javaweb三大组件之一servlet
一、什么是servlet
servlet是javaweb三大组件之一,负责处理请求与发送响应,servlet本质上是一种接口。那么它是如何工作的呢?它是如何工作的?基于计算机和网络通讯(主要是http协议)构建网络应用的。
二、它和tomcat的关系
tomcat是一个存放servlet/jsp的容器。你可以随便谷歌一个servlet的hello world教程,里面都会让你写一个servlet,相信我,你从来不会在servlet中写什么监听8080端口的代码,servlet不会直接和客户端打交道!
那请求怎么来到servlet呢?答案是servlet容器,比如我们最常用的tomcat,同样,你可以随便谷歌一个servlet的hello world教程,里面肯定会让你把servlet部署到一个容器中,不然你的servlet压根不会起作用。
tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。
三、编写servlet
1.通过xml文件配置
1、创建一个MyServlet继承HttpServlet,重写doGet和doPost方法,也就是看请求的方式是get还是post,然后用不同的处理方式来处理请求,
2、在web.xml中配置MyServlet,为什么需要配置?让浏览器发出的请求知道到达哪个servlet,也就是让tomcat将封装好的request找到对应的servlet让其使用。
按照步骤,首先浏览器通过http://localhost:8080/test01/MyServlet来找到web.xml中的url-pattern,这就是第一步,匹配到了url-pattern后,就会找到第二步servlet的名字MyServlet,知道了名字,就可以通过servlet-name找到第三步,到了第三步,也就能够知道servlet的位置了。然后到其中找到对应的处理方式进行处理。
3、实验,验证上面配置成功。
3.2通过注解来配置servlet
/**
11 * 注解WebServlet用来描述一个Servlet
12 * 属性name描述Servlet的名字,可选
13 * 属性urlPatterns定义访问的URL,或者使用属性value定义访问的URL.(定义访问的URL是必选属性)
14 /
15 @WebServlet(name=“Servlet3Demo”,urlPatterns="/Servlet3Demo")
16 public class Servlet3Demo extends HttpServlet {
17
18 public void doGet(HttpServletRequest request, HttpServletResponse response)
19 throws ServletException, IOException {
20 response.getWriter().write(“Hello Servlet3.0”);
21 }
22
23 public void doPost(HttpServletRequest request, HttpServletResponse response)
24 throws ServletException, IOException {
25 this.doGet(request, response);
26 }
27 }
28
29 /
30 * 完成了一个使用注解描述的Servlet程序开发。
31 使用@WebServlet将一个继承于javax.servlet.http.HttpServlet的类定义为Servlet组件。
32 @WebServlet有很多的属性:
33 1、asyncSupported: 声明Servlet是否支持异步操作模式。
34 2、description: Servlet的描述。
35 3、displayName: Servlet的显示名称。
36 4、initParams: Servlet的init参数。
37 5、name: Servlet的名称。
38 6、urlPatterns: Servlet的访问URL。
39 7、value: Servlet的访问URL。
40 Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。
41 像上面的Servlet3Demo可以描述成@WebServlet(name=“Servlet3Demo”,value="/Servlet3Demo")。
42 也定义多个URL访问:
43 如@WebServlet(name=“Servlet3Demo”,urlPatterns={"/Servlet3Demo","/Servlet3Demo2"})
44 或者@WebServlet(name=“AnnotationServlet”,value={"/Servlet3Demo","/Servlet3Demo2"})
45 *
46 */