Filter && i18n
一、Filter过滤器
1.什么是filter过滤器
- Filter过滤器它是JavaWeb的三大组件之一。
? 三大组件分别是:Servlet程序、Listener监听器、Filter过滤器
- Filter过滤器它是JavaEE的规范。也就是接口
- Filter过滤器它的作用是:拦截请求,过滤响应。
拦截请求常见的应用场景有:
- 权限检查
- 日记操作
- 事务管理
- ……
2.filter过滤器 的使用
步骤:
-
编写一个类去实现Filter 接口 -
实现过滤方法doFilter() 在必要时候进行强制类型转化 HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
-
到web.xml中去配置Filter的拦截路径或 在Filter实现类的前面使用@WebFilter()注解,参数为,拦截的路径。
非法登录、举例:
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
public class onServlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
String username= request.getParameter("username");
String password= request.getParameter("password");
if ("fan1116".equals(username)&&"123456".equals(password)){
Cookie cookie=new Cookie("username",username);
request.getSession ().setAttribute ("username",username);
Cookie cookie2=new Cookie("password",password);
cookie2.setMaxAge(60*60*2);
cookie.setMaxAge(60*60*2);
response.addCookie(cookie);
response.addCookie(cookie2);
response.sendRedirect("/onServlet1.jsp");
}else{
response.getWriter().write("登录失败。");
response.sendRedirect ("/login.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.FileFilter;
import java.io.IOException;
@WebFilter("/onServlet1.jsp")
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
Object user = httpServletRequest.getSession().getAttribute("username");
if(user!=null){
filterChain.doFilter(servletRequest,servletResponse);
}else{
servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest, servletResponse);
}
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>用户登录页面</title>
</head>
<body>
<form action="/onServlet1" method="post">
<%--注意这里的value ,不论username还是password都用cookie--%>
用户名:<input type="text" name="username" value="${cookie.username.value}">
</br>
密码:<input type="password" name="password" value="${cookie.password.value}">
</br>
<button >登录</button>
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>登陆成功界面</title>
</head>
<body>
<%
%>
恭喜你,登陆成功!</br>
用户:${cookie.username.value}</br>
密码:${cookie.password.value}</br>
</body>
</html>
3.filter的生命周期
Filter 的生命周期包含几个方法:
- 构造器方法
- init初始化方法
——第1,2步,在web工程启动的时候执行(Filter已经创建) - doFilter过滤方法
——第3步,每次拦截到请求,就会执行 - destroy销毁
——第4步,停止web 工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)
4.filterConfig类
FilterConfig 类见名知义,它是 Filter过滤器的配置文件类。
Tomcat每次创建Filter的时候,也会同时创建一个FilterConfig类,这里包含了Filter配置文件的配置信息。
? FilterConfig 类的作用是获取filter过滤器的配置内容 ? 1、获取Filter的名称filter-name的内容 ? 2、获取在Filter中配置的init-param初始化参数 ? 3、获取ServletContext对象
5.FilterChain过滤器链
6.Filter的拦截路径
精确匹配
<url-pattern>/target.jsp</url-pattern>
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp
目录匹配
<ur1-pattern>/ admin/*</ur1-pattern>
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*
后缀名匹配
<ur1-pattern>*.html</ur1-pattern>
以上配置的路径,表示请求地址必须以.html结尾才会拦截到
<ur1-pattern>*.do</ur1-pattern>
以上配置的路径,表示请求地址必须以.do结尾才会拦截到
<ur1-pattern>*.action</ur1-pattern>
以上配置的路径,表示请求地址必须以.action结尾才会拦截到
Filter过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在!
|