HttpServlet是javax.servlet.http包下的一个抽象类,这个包提供了用来扩展基于http协议的Servlet。HttpServlet继承与GenericServlet,不仅重写了service(ServletRequest req,ServletResponse res)方法,还提供了很多与http协议有关的方法。
1.HttpServlet详解
为了让大家更加清晰的理解HttpServlet,下面我们通过一张图来了解HttpServlet的相关方法,如图1-1所示:
由图1-1可知,HttpServlet中自带的方法大多都是以“do”开头,例如doGet、doPost等。我们知道GET和POST是Http协议中的请求方式,那么doGet,doPost方法其实是分别对get请求和post请求进行处理的方法。其中,还有两个service()方法,一个是重写GenericServlet 类的service()方法,一个是自定义的service()方法,它们的参数类型也不一样。 自定义的service(HttpServletRequest req,HttpServletResponse resp)方法,该方法中的参数都是javax.servlet.http包下的类,即都是基于Http协议的。ServletRequest与HttpServletRequest、ServletResponse与HttpServletResponse都是父子关系。
为了让大家更好的理解HttpServlet,下面我们通过一张图来描述其原理,如图1-2所示:
图1-2是HttpSerlvet类的工作原理,下面通过一张序列图来理解当客户端访问Servlet时,底层的一些方法调用的顺序,如图1-3所示:
我们自己创建的Servlet类继承了HttpServlet,不需要重写service()方法,只需要重写doGet()和doPost()。因为在以后的开发中最常用的请求方式是get和post,所以一般重写它们即可,如果不重写就会调用父类的doGet()和doPost()方法,父类的这两个方法是向客户端响应405状态码。
2.HttpServlet动手体验
由于大多数客户端的请求方式都是GET和POST,因此学习如何使用HttpServlet中的doGet()和doPost()方法变得相当重要。接下来通过一个具体的案例,详细了解这两个方法的使用,双击此处 下载案例源代码,详细步骤请参考HttpServlet案例详解,具体如下:
(1)创建一个web应用Example12,在【src】目录下新建一个类TestServlet,该Servlet继承HttpServlet。具体代码如例1-1所示:
例1-1 TestServlet.java
public class TestServlet extends HttpServlet {
/*
* 重写doPost方法
* */
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doPost() ………..");
}
}
(2)接着在web.xml对TestServlet 进行配置,具体代码如例1-2所示:
例1-2 web.xml配置TestServlet
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>cn.itcast.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
(3)将应用发布到Tomcat服务器中,启动Tomcat服务器,在浏览器端地址栏上输入http://localhost:8080/Example12/TestServlet,浏览器显示结果如图1-4所示:
图1-4运行结果
由图1-4的可知,服务器端响应给浏览器端405状态码,在常用状态码中对405状态码进行了介绍,出现这样的结果是因为当前的请求方式没有在服务器端进行处理,我们在服务器端只重写了doPost()方法,并没有重写doGet()方法,而当前请求是GET请求,所以这个时候会去调用父类HttpServlet的doGet()方法,HttpServlet的doGet()方法响应给客户端405状态码。
(5)对Example12应用中的index.jsp页面做修改,主要代码如例1-3所示:
例1-3 index.jsp
<body>
<form action ="/Example12/TestServlet" method="post">
用户名:<input type="text" name="username"/></br>
<input type="submit" value="提交"/>
</form>
</body>
例1-3中,index.jsp页面中的表单,提交路径是“/Example12/TestServlet”,请求方式是post请求。
(6)重新启动Tomcat服务器,在浏览器端地址栏上输入http://localhost:8080/Example12,然后点击表单的提交按钮,控制台打印结果如图1-5所示:
由运行结果得知doPost()方法被调用了,请求方式post请求,服务器调用service方法,service方法根据请求方式来调用相应的方法进行处理。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253157.html