《深入浅出 Servlet:Java Web 开发的基石》(一)
- Servlet概述(了解)
- JavaWeb的三大组件
Servlet是JavaWeb三大组件之一,它是我们学习JavaWeb最为基本的组件,也就是说你一定要100%的掌握它。
其它两种:Filter(过滤器)、Listener(观察者模式),后续讲解
-
- Servlet的作用
Servlet,即Server Let的意思,用来处理用户请求。当客户端发出请求后,由Tomcat去找到可以处理这一请求的Servlet来处理。
也就是说,用户的请求是由Servlet来处理的!例如用户发出登录请求,那么就应该由处理登录的Servlet来处理;用户发出登录请求,那么就应该有登录Servlet来处理。
- Servlet初识(熟练)
- 第一个Servlet
- Servlet说明
- 第一个Servlet
servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。也就是说,Servlet是由我们自己来完成的!但Servlet一定要实现javax.servlet.Servlet接口,并且还要在web.xml文件中部署!不然Tomcat是找不到我们写的Servlet的。
-
-
- Servlet接口
-
javax.servlet.Servlet接口中方法如下:
- void init(ServletConfig servletConfig):当Tomcat创建Servlet实例后,马上调用init()方法。这个方法只在创建后调用一次!用来做Servlet初始化工作!一个Servlet实例只被创建一次,所以init()方法也只被调用一次!(本方法编写对Servlet的初始化代码)
- void service(ServletRequest request, ServletResponse response):Servlet实例在每次处理请求时都调用service()方法。
- void destroy():当Tomcat要销毁Servlet实例时,会先调用destroy()方法,再销毁它。所谓销毁Servlet,其实就是在Servlet缓存池中把Servlet移除!一般只有Tomcat关闭时,才会销毁Servlet实例!
- ServletConfig getServletConfig():这个方法返回ServletConfig对象,但我们不能自己去创建ServletConfig对象,所以一般我们会在init()方法中把init()方法的参数保存起来,然后再在本方法中返回它。ServletConfig对象对应web.xml中当前Servlet实例的配置信息。
- String getServletInfo():这个方法只是返回一个字符串,用来说明当前Servlet。基本没用!
-
- 创建Servlet
-
第一步:常见HelloServlet实现Servlet的接口,实现接口中的方法;
package cn.tx.servlet; |
第二步:配置servlet的访问路径;
<?xml version="1.0" encoding="UTF-8"?> |
-
-
- JavaWeb请求响应流程
-
当Tomcat接收到请求(http://localhost:8080/servlet_pro/logon)后,Tomcat会找到servlet_pro项目中的web.xml文件,然后通过logon这个请求路径,查找处理这个请求的Servlet类型。这刚好与<url-pattern>/logon</url-pattern>匹配,这说明存在一个可以通过这个请求的Servlet。然后再通过<url-pattern>/logon </url-pattern>查找到<servlet-name>login</servlet-name>,然后再通过<servlet-name>login </servle-name>查找到<servlet-class>com.rl.servlet.LoginServlet</servlet-class>。这时Tomcat已经得到了一个Servlet类名字(一个字符串而已)。
Tomcat通过Servlet类名字去查找内存中是否存在Servlet对象,如果存在,那么就不用再去创建,直接获取这个Servlet实例,调用它的service()方法完成请求!
如果这个Servlet不存在,那么Tomcat会通过反射来创建Servlet实例,并把Servlet实例存放到Servlet池中,再去调用Servlet的service方法处理请求。
-
- Servlet生命周期
javax.servlet.Servlet接口中,有三个方法说明了Servlet的生命周期:
- void init(ServletConfig):创建后马上调用init()完成初始化;
- void service(ServletRequest,ServletResponse):每次处理请求时调用service()方法;
- void destroy():当Tomcat要销毁Servlet实例时,先调用destroy()方法。
Servlet对象的实例默认情况下是在浏览器第一次调用servlet时候被创建的(可以修改其创建时机后续讲解)
现在你应该已经清楚了,Servlet的实例不由我们创建,Servlet的方法不由我们来调用,这一切都是由Tomcat来完成!!!这就是说由Tomcat来管理Servlet,而我们只需要去编写Servlet实现类,并将其部署到web.xml文件中去!
再次提醒,只有这三个方法是生命周期中的方法。也就是说,生命周期方法会被Tomcat在不同的时间点来调用!而其它方法就不会被调用了!!!如果你在自己写的Servlet中添加了其他方法,那么Tomcat也是不会去调用它们的!但你可以让生命周期方法去调用你自己写的方法就OK了!
- HttpServlet(精通)
- HttpServlet介绍
因为现在我们的请求都是基于HTTP协议的,所以我们应该专门为HTTP请求写一个Servlet做为通用父类。
由上图我们可以看出,以后再写Servlet 可以直接继承HttpServlet
- Servlet 一个标准
- GenericServlet 是Servlet接口子类
- HttpServlet 是GenericServlet子类,一个专门处理Http请求的Servlet
- Http请求方法
HTTP请求方法不只是GET和POST,还有其他的方法,但基本上用不上。这里只是简单介绍一下。你自己心里有个数,HTTP请求除了GET和POST之外还有别的就行了。
- GET 通过请求URI得到资源
- POST 用于添加新的内容
- PUT 用于修改某个内容
- DELETE 删除某个内容
- CONNECT 用于代理进行传输,如使用SSL
- OPTIONS 询问可以执行哪些方法
- PATCH 部分文档更改
- RACE 用于远程诊断服务器
- HEAD 类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
- TRACE 用于远程诊断服务器
- 创建HttpServlet
- 第一种方法
- 创建HttpServlet
创建一个类继承HttpServlet
package cn.tx.servlet; |
配置Servlet的映射路径
<servlet> |
-
-
- 第二种方法
-
IDEA直接创建servlet
填写Servlet名称
创建完成,自己填写映射路径
-
-
- Servlet创建顺序
-
有些Servlet需要在Tomcat启动时就被创建,而不是第一次访问时被创建,那么可以在web.xml文件中配置<servlet>元素。
在<servlet>元素中添加子元素<load-on-startup>元素!
<servlet> |
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
所有添加了<load-on-startup>子元素的Servle,都会在Tomcat启动时被创建!当然,只是被创建,但没有处理请求!但我们知道在Servlet生命周期中init()方法会在创建后被调用,所以你可以在init()方法中做一些输出,查看是否在Tomcat启动时调用了它。
<load-on-startup>元素的值是一个序号,Tomcat会使用这个序号给多个Servlet排序!然后在Tomcat启动时会按这个顺序来创建Servlet实例对象!