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代码之前执行。