1.过滤器防止中文乱码,代码如下:
public class characterEncodingFilter implements Filter {
//初始化,与服务器一同启动,等待过滤对象的出现!
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("characterEncodingServlet执行前");
chain.doFilter(request,response); //将request,response传递下去,供其他拦截器使用
System.out.println("characterEncodingServlet执行后");
}
//服务器关闭,过滤器销毁
@Override
public void destroy() {
System.out.println("销毁");
}
}
web.xml中的配置
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.lv.filter.characterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!--该路径下的所有请求都会通过过滤器-->
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
2.拦截器拦截请求,这里使用登录拦截作为示例
(1)登录jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>登录</h1>
<form action="/servlet/login" METHOD="post">
<input type="text" name="username">
<input type="submit" value="登录">
</form>
</body>
</html>
(2)servlet控制器
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取前端参数
String username = req.getParameter("username");
if (username.equals("admin")){
req.getSession().setAttribute("USER_SESSION",req.getSession().getId());
resp.sendRedirect("/sys/success.jsp"); //登录成功前往成功页面
}else {
resp.sendRedirect("/error.jsp"); //登录失败跳转错误页面
}
}
(3)拦截器,创造一个用户session,在登录成功时给session赋值。没有登陆session为空,不能访问成功页面,拦截器主要是来判断该session是否为空。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//转化为HttpServletRequest\HttpServletResponse
//ServletRequest下不能获取到session
HttpServletRequest request1=(HttpServletRequest) request;
HttpServletResponse response1=(HttpServletResponse) response;
if (request1.getSession().getAttribute("USER_SESSION")==null){
response1.sendRedirect("/error.jsp");
}
chain.doFilter(request,response);
}
web.xml中的配置
<filter>
<filter-name>SysFilter</filter-name>
<filter-class>com.lv.listener.SysFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SysFilter</filter-name>
<!--该路径下的所有请求都会通过拦截过滤器-->
<url-pattern>/sys/*</url-pattern>
</filter-mapping>
小节:过滤器与拦截器都实现了javax.servlet类下的Filter接口。