Java——Servlet

Servlet 为创建基于 web 的应用程序提供了基于组件、独立于平台的方法。一个 Servlet 其实就是一个 Java 类,并且可以通过 “请求-响应” 编程模型来访问的这个驻留在服务器内存里的 Servlet 程序。

Java Servlet API 是Servlet容器(tomcat)和servlet之间的接口,它定义了serlvet的各种方法,还定义了Servlet容器传送给Servlet的对象类,其中最重要的就是ServletRequest和ServletResponse。所以说我们在编写servlet时,需要实现Servlet接口。

Tomcat和Servlet的关系

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户。

请求响应流程

  1. Tomcat将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象,所有的HTTP头数据读可以通过request对象调用对应的方法查询到。
  2. Tomcat同时会要响应的信息封装为HttpServletResponse类型的response对象,通过设置response属性就可以控制要输出到浏览器的内容,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器

Servlet的使用

1、使用 Servlet,首先继承 HttpServlet,并重写 doGet() 和 doPost() 方法:

import javax.servlet.http.HttpServlet;
public class UploadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
    }
}

然后在 web.xml 中注册 Servlet 即可:

<servlet>
    <servlet-name>upload</servlet-name>
    <servlet-class>com.example.servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>upload</servlet-name>
    <!-- 访问路径地址 -->
    <url-pattern>/servlet/upload</url-pattern>
</servlet-mapping>

2、Servlet 的生命周期

  1. 初始化阶段,判断 Servlet 实例是否存在,若不存在则调用构造方法装载 Servlet 类并创建实例,然后调用init()方法,若存在执行第二步;
  2. 响应客户端请求阶段,调用service(ServletRequest req, ServletResponse res)方法根据提交方式选择执行doGet()或者doPost()方法;
  3. 服务器关闭,调用destroy()的方法。

注意:在 Servlet 的整个生命周期,init() 方法只被调用一次。

Filter

Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

Filter链
在我们的请求到达Servle之前是可以经过多个Filter的,一般来说,建议Filter之间不要有关联,各自处理各自的逻辑即可。如果一定要确保执行顺序,就要对配置进行修改了,执行顺序如下

  1. 在web.xml中,filter执行顺序跟的顺序有关,先声明的先执
  2. 使用注解配置的话,filter的执行顺序跟名称的字母顺序有关,例如AFilter会比BFilter先执行
  3. 如果既有在web.xml中声明的Filter,也有通过注解配置的Filter,那么会优先执行web.xml中配置的Filter

应用:实现Filter接口,重写方法

Spring Interceptor

类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

应用

  1. 实现HandlerInterceptor接口
  2. 继承HandlerInterceptorAdapter抽象类,按需重写部分实现即可,(HandlerInterceptorAdapter也实现了HandlerInterceptor接口)

HandlerInterceptor有如下3个方法:

  • boolean preHandler():在controller执行之前调用
  • void postHandler():controller执行之后,且页面渲染之前调用
  • void afterCompletion():页面渲染之后调用,一般用于资源清理操作

你可能感兴趣的:(Java)