文章目录
Servlet 体系结构
Servlet
是一个接口,在Java EE API
中,我们可以看到有一个抽象类GenericServlet
实现了Servlet
接口,在抽象类GenericServlet
又有一个抽象类HttpServlet
类继承了它。
也就是说:Servlet
接口是爷爷,GenericServlet
抽象类是爸爸,HttpServlet
抽象类是孙子。画个图看一下:
接下来分别看一下三个类
1、Servlet
2、GenericServlet
GenericServlet
帮我们把Servlet
接口中的init
、getServetConfig
、getServetInfo
、destory
这四个方法做了空实现,只留了一个抽象类service
。继承这个类,可以使代码更简洁,开发也会更高效。
@WebServlet("/demo3")
public class ServletDemo3 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
}
但是实际开发中,用的却是HttpServlet
3、HttpServlet
在service
方法中,一般都要获取从浏览器发来的数据,这时候我们就要判断http
用的是哪种请求方式了。
下面是传统判断请求方式的代码:
String method = req.getMethod();
//get方式获取数据
if("GET".equals(method)){
//执行相应操作
}
//POST方式获取数据
else if("POST".equals(method)){
//执行相应操作
}
这种方式要对各种请求方式进行判断,每个Servlet
都要判断到底。显然,这在开发过程中会很麻烦,为了解决这个问题,HttpServlet
对这些个判断,进行了封装,形成了下面的这些个方法:
操作步骤如下:
第一步、定义一个类继承HttpServlet
@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet{
}
第二步、在web
目录下新建一个test.html
文件
<form action="demo4" method="post">
<input name="txt">
<input type="submit" value="提交">
</form>
第三步、回到ServletDemo4
,重写doPost()
方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost is run......");
}
至此完成,打开浏览器输入localhost:8080/text.html
即可出现: