zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【web后端(十三)】jsp、servlet_生命周期、过滤器

JSPWeb后端Servlet 生命周期 过滤器 十三
2023-09-11 14:20:37 时间

Servlet生命周期

serlvet请求是单实例多线程

1.初始化

Serlvet是配置到web.xml当中,服务器读取配置自动实例化并置入ServletContext容器当中。当Servlet刚刚实例化,就会调用void init()方法,所以我们初始化Servlet的代码并不是写在构造函数中,而是推荐写到init()方法当中

2.服务请求

service(request,response)是Servlet处理请求的默认方法,这个方法根据http请求中的方法值(如,get,post等)分别调用doGet(),doPost()等方法

3.销毁

一个Servlet如果在一段时间内(具体由服务器定,比如24小时)没有被访问,容器会自动销毁,销毁时调用destroy()方法。如果Servlet销毁后又被请求,则服务器会重新实例化Servlet并调用init()方法

 

处理乱码

request.setCharectEncoding("utf-8");
respone.setCharectEncoding("utf-8");

 

过滤器

拦截在你要请求的Servlet前面,提前执行的web组件

面向切面的编程

Filter要实现,javax.servlet.Filter接口

package edu.xalead.filter;
​
import javax.servlet.*;
import java.io.IOException;
​
public class EncodingFilter implements Filter {
    public void destroy() {
    }
​
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        chain.doFilter(req, resp);//转发给用户实际请求的Servlet
    }
​
    public void init(FilterConfig config) throws ServletException {
​
    }
​
}

 

web.xml

<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>edu.xalead.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern><!--/*是通配符,指拦截所有的Servlet-->
</filter-mapping>

过滤器的代码会在其它Servlet代码之前执行。