之前做项目都是一股脑的做SpringMVC的SSH项目,而且还是半路出家的那种。。。感觉好多前后台交互的东西实现起来很困难,而后才真正懂了什么叫JSP。。。很尴尬,所以现在重新补JAVA-JSP-Web知识,记录一下,方便需要的童鞋,也方便自己的理解!
好的,我们正式开始!
基本Servlet用法
首先我们创建一个Dynamic Web project项目,我这儿就叫ServletTest了,下面是项目结构图:
好的,我们写最关键的Servlet文件继承自HttpServlet,不过在这之前,先创建包,这个很基础的了。
复写一下doGet和doPost方法,基础的咱就写简单点儿:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取页面HTML标签写入流,我习惯用PrintWriter,println感觉用起来舒服点儿~
PrintWriter pw = resp.getWriter();
pw.println("<html><head>");
pw.println("<title>My first servlet project</title>");
pw.println("</head><body>");
pw.println("<h1>Show my first servlet project success!</h1><br/>");
pw.println("</body></html>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
然后我们在web.xml里修改一下配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID"
version="3.0">
<!-- 对应cn.com.dnyy.Servlet01.ServletTest01.java的案例 -->
<servlet>
<servlet-name>ServletTest01</servlet-name>
<servlet-class>cn.com.dnyy.Servlet.ServletTest01</servlet-class><!-- 对应加载的类 -->
</servlet>
<servlet-mapping>
<servlet-name>ServletTest01</servlet-name><!-- 两个servlet-name一定要统一 -->
<url-pattern>/ServletTest01</url-pattern><!-- 访问URL -->
</servlet-mapping>
</web-app>
好了,开启服务器,访问localhost:8080/ServletTest/ServletTest01就能看到我们写的HTML了,其中ServletTest是我的项目名哈,注意一下。
获取参数
既然弄清楚了这么原始的基本Servlet用法,肯定是不够的,因此,我们最先想到的就是如何获取参数了。
返回java文件,我们添加点儿东西,注释一下你就能看懂了!
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter pw = resp.getWriter();// 获取页面HTML标签写入流
pw.println("<html><head>");
pw.println("<title>My first servlet project</title>");
pw.println("</head><body>");
pw.println("<h1>Show my first servlet project success!</h1><br/>");
// 获取参数并输出其值
String parameter = null;// 参数值存放数组
try {
parameter = req.getParameter("parameter");// 获取的参数名
// 如果参数值不为空,则输出
if(!parameter.isEmpty() || parameter != "") pw.println("<h4>Now get param[parameter] in url:" + parameter + "</h4>");
} catch (NullPointerException e) {
// 如果没有参数输入,则捕获异常后不输出
e.printStackTrace();
}
pw.println("</body></html>");
}
有注释就是容易理解哈,现在我们刷新一下页面,还是什么都没有,一旦加入了参数就不一样了,加入参数的URL如下:localhost:8080/ServletTest/ServletTest01?parameter=111
加入参数回车访问一下,就能看到屏幕多输出了我们要添加的内容了!
简单介绍其他常用用法
纯纯的干货,代码加注释的干货!
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter pw = resp.getWriter();// 获取页面HTML标签写入流
pw.println("<html><head>");
pw.println("<title>My first servlet project</title>");
pw.println("</head><body>");
pw.println("<h1>Show my first servlet project success!</h1><br/>");
// 上下文根目录路径
pw.println("<h2>root:" + req.getContextPath() + "</h2>");
// 真实路径
pw.println("<h3>real path:" + req.getSession().getServletContext().getRealPath("/") + "</h3>");
// 循环输出URL上的所有参数名
Enumeration<String> enu = req.getParameterNames();
pw.println("<h3>you must input a parameter in url, and now, you put the parameter:</h3>");
while(enu.hasMoreElements()){// 如果还能遍历
String element = enu.nextElement();// 下一个Element
pw.println("<h4>[" + element + "] and it's value is [" + req.getParameter(element) + "]</h4><br/>");
}
// 获取并输出数值
String parameter = null;// 参数值存放数组
try {
parameter = req.getParameter("parameter");// 获取的参数名
// 如果参数值不为空,则输出
if(!parameter.isEmpty() || parameter != "") pw.println("<h4>Now get param[parameter] in url:" + parameter + "</h4>");
} catch (NullPointerException e) {
// 如果没有参数输入,则捕获异常后不输出
e.printStackTrace();
}
pw.println("</body></html>");
}
堪称极品!要是能够通过其它页面跳转到这个页面并传递参数的形式就更好了!
HTML页面跳转到Servlet
说做就做!赶紧的,我们创建一个html页面index.html,给大家看看我的目录结构:
好的,然后我们填充一下这个html内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ServletTest01</title>
</head>
<body>
<h1>You can input this parameter to visit ServletTest01.java</h1>
<!-- 访问URL为web.xml中设置的servlet,没有../则是URL加上/01,将会提示找不到页面,可以设置为post方法 -->
<form action="../ServletTest01" method="get">
parameter:<input name="parameter" type="text" value=""/>(必填!)<br/>
parameter1:<input name="parameter01" type="text" value=""/><br/>
parameter2:<input name="parameter02" type="text" value=""/><br/>
parameter3:<input name="parameter03" type="text" value=""/><br/>
parameter4:<input name="parameter04" type="text" value=""/><br/>
<input type="submit" value="sendTo"/>
</form>
</body>
</html>
这下就基本没问题了,不过为了处理一下编码问题,在java文件doGet方法处加上两行UTF-8。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");// GET请求URIEncoding设置为UTF-8
resp.setContentType("text/html;charset=UTF-8");// POST请求URIEncoding设置为UTF-8
PrintWriter pw = resp.getWriter();// 获取页面HTML标签写入流
pw.println("<html><head>");
pw.println("<title>My first servlet project</title>");
pw.println("</head><body>");
后面代码略...
如果访问页面后编码还有问题的话,可以移步自我浅淡编码的博文《【Java】SpringMVC Post&Get编码问题》来解决一下,大概就是修改下Tomcat的server.xml就行了的,如果还有什么不清楚的话,可以在下方留言,我会进我所能给大家解答的!
下面就是我的工程源码,移步–>链接