zoukankan      html  css  js  c++  java
  • Java基础95 过滤器 Filter

    1、filter 过滤器的概述        

        filter过滤器:是面向切面编程的一种实现策略,在不影响原来的程序流程的前提下,将一些业务逻辑切入流程中,在请求达到目标之前进行处理,一般用于编码过滤、权限过滤、....

    2、filter 过滤器的创建步骤  

      1、创建一个普通的java类实现filter接口
      2、实现接口中的三个方法(init,doFilter,destory)
      3、配置过滤器(web.xml)

    3、实例_编码过滤器            

     1 package com.shore.a_filter;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.Filter;
     6 import javax.servlet.FilterChain;
     7 import javax.servlet.FilterConfig;
     8 import javax.servlet.ServletException;
     9 import javax.servlet.ServletRequest;
    10 import javax.servlet.ServletResponse;
    11 
    12 public class CharsetEncoding implements Filter{
    13     private String encoding;
    14     public void init(FilterConfig config) throws ServletException {//过滤器初始化
    15          encoding = config.getInitParameter("encoding");//获取web.xml配置文件中的参数
    16     }
    17 
    18     public void doFilter(ServletRequest request, ServletResponse response,
    19             FilterChain chain) throws IOException, ServletException {
    20         request.setCharacterEncoding(encoding);
    21         response.setCharacterEncoding(encoding);
    22         chain.doFilter(request, response);//放行
    23     }
    24     
    25     public void destroy() {//过滤器被销毁(服务器停止,才会被销毁)
    26         
    27     }
    28 }

    web.xml 配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.5" 
     3     xmlns="http://java.sun.com/xml/ns/javaee" 
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     7 
     8   <!-- 编码过滤 -->
     9   <filter>
    10       <!-- 类名 -->
    11       <filter-name>CharsetEncoding</filter-name>
    12       <!-- 类路径 -->
    13       <filter-class>com.shore.a_filter.CharsetEncoding</filter-class>
    14       <init-param>
    15           <!-- 参数名 -->
    16           <param-name>encoding</param-name>
    17           <!-- 编码 -->
    18           <param-value>UTF-8</param-value>
    19       </init-param>
    20   </filter>
    21   
    22   <filter-mapping>
    23       <!-- 类名 -->
    24       <filter-name>CharsetEncoding</filter-name>
    25       <!--  /* 表示过滤(拦截)所有页面(请求)     *.xxx 表示拦截该指定后缀结尾的页面(请求) -->
    26       <url-pattern>/*</url-pattern>
    27   </filter-mapping>
    28 
    29 
    30   <welcome-file-list>
    31     <welcome-file>index.jsp</welcome-file>
    32   </welcome-file-list>
    33 </web-app>

     附录 

     过滤器

     1 package com.shore.b_filter;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.Filter;
     6 import javax.servlet.FilterChain;
     7 import javax.servlet.FilterConfig;
     8 import javax.servlet.ServletException;
     9 import javax.servlet.ServletRequest;
    10 import javax.servlet.ServletResponse;
    11 import javax.servlet.http.HttpServletRequest;
    12 import javax.servlet.http.HttpServletResponse;
    13 
    14 public class LoginFilter implements Filter{
    15         private String[] passlist;
    16     public void init(FilterConfig Config) throws ServletException {
    17         passlist=Config.getInitParameter("passList").split(",");
    18         System.out.println("第一步");
    19     }
    20 
    21     public void doFilter(ServletRequest req, ServletResponse resp,
    22             FilterChain chain) throws IOException, ServletException {
    23         //会重复执行一次
    24         System.out.println("第二步");
    25         //获取request对象
    26         HttpServletRequest request=(HttpServletRequest)req;
    27         HttpServletResponse response=(HttpServletResponse)resp;
    28         //获取客户端的资源路径
    29         String uri = request.getRequestURI();
    30         //获取请求资源路径
    31         int index = uri.lastIndexOf("/");//获取路径中的最后一个斜杠的下标
    32         String source = uri.substring(index+1);//截取斜杠后面的所有字符串
    33         System.out.println(source);
    34         boolean flag = false;//定义标记
    35         for(String s:passlist){//遍历
    36             if(s.trim().equals(source)){
    37                 flag = true;
    38             }
    39         }
    40         if(flag){//如果flag=true则放行
    41             chain.doFilter(request, response);
    42         }else{
    43             //获取session的内容
    44             Object obj = request.getSession().getAttribute("user");
    45             if(obj == null){
    46                 //未登录
    47                 request.setAttribute("msg","请先登录");
    48                 request.getRequestDispatcher("index.jsp").forward(request, response);
    49             }else{
    50                 System.out.println("第五步");
    51                 chain.doFilter(request, response);//放行
    52             }
    53         }
    54     }
    55 
    56     public void destroy() {
    57         
    58     }
    59 }

    web.xml 配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.5" 
     3     xmlns="http://java.sun.com/xml/ns/javaee" 
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     7 
     8  <!-- 配置过滤器-->
     9  <filter>
    10     <!-- 类名 -->
    11      <filter-name>LoginFilter</filter-name>
    12     <!-- 类路径 -->
    13      <filter-class>com.shore.b_filter.LoginFilter</filter-class>    
    14      <init-param>
    15         <!-- 参数名 -->
    16          <param-name>passList</param-name>
    17         <!-- passList参数的值(放行index和reg页面,即:不用登陆也可直接访问这两个页面) -->
    18          <param-value>index.jsp,reg.jsp</param-value>
    19      </init-param>
    20  </filter>
    21  <filter-mapping>
    22     <!-- 类名 -->
    23      <filter-name>LoginFilter</filter-name>
    24     <!-- 拦截所有jsp页面 -->
    25      <url-pattern>*.jsp</url-pattern>
    26  </filter-mapping>
    27  
    28   <!-- 编码过滤 -->
    29   <filter>
    30       <filter-name>CharsetEncoding</filter-name>
    31       <filter-class>com.shore.a_filter.CharsetEncoding</filter-class>
    32       <init-param>
    33           <param-name>encoding</param-name>
    34           <param-value>UTF-8</param-value>
    35       </init-param>
    36   </filter>
    37   <filter-mapping>
    38       <filter-name>CharsetEncoding</filter-name>
    39     <!--  /* 表示过滤(拦截)所有页面(请求)     *.xxx 表示拦截该指定后缀结尾的页面(请求) -->
    40       <url-pattern>/*</url-pattern>
    41   </filter-mapping>
    42 
    43 
    44   <servlet>
    45     <description>This is the description of my J2EE component</description>
    46     <display-name>This is the display name of my J2EE component</display-name>
    47     <servlet-name>LoginServlet</servlet-name>
    48     <servlet-class>com.shore.b_servlets.LoginServlet</servlet-class>
    49   </servlet>
    50   <servlet>
    51     <description>This is the description of my J2EE component</description>
    52     <display-name>This is the display name of my J2EE component</display-name>
    53     <servlet-name>RegisterServlet</servlet-name>
    54     <servlet-class>com.shore.b_servlets.RegisterServlet</servlet-class>
    55   </servlet>
    56   
    57   <servlet-mapping>
    58     <servlet-name>LoginServlet</servlet-name>
    59     <url-pattern>/LoginServlet</url-pattern>
    60   </servlet-mapping>
    61   <servlet-mapping>
    62     <servlet-name>RegisterServlet</servlet-name>
    63     <url-pattern>/RegisterServlet</url-pattern>
    64   </servlet-mapping>
    65   
    66   
    67   <welcome-file-list>
    68     <welcome-file>index.jsp</welcome-file>
    69   </welcome-file-list>
    70 </web-app>

    servlet

     1 package com.shore.b_servlets;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 
     6 import javax.servlet.ServletException;
     7 import javax.servlet.http.HttpServlet;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletResponse;
    10 
    11 public class LoginServlet extends HttpServlet {
    12 
    13     public void doGet(HttpServletRequest request, HttpServletResponse response)
    14             throws ServletException, IOException {
    15         doPost(request, response);
    16     }
    17 
    18     public void doPost(HttpServletRequest request, HttpServletResponse response)
    19             throws ServletException, IOException {
    20         String name=request.getParameter("uname");
    21         String pass=request.getParameter("upass");
    22         System.out.println("第四步");
    23         if(!"".equals(name.trim())){
    24             //将当前登录的用户存储到session中
    25             request.getSession().setAttribute("user",name);
    26             //跳转到主页
    27             response.sendRedirect("main.jsp");
    28             
    29         }else{
    30             request.setAttribute("msg","请输入账号和密码");
    31             request.getRequestDispatcher("index.jsp").forward(request, response);
    32         }
    33     }
    34 }

    登录页面

     1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'index.jsp' starting page</title>
    13     <meta http-equiv="pragma" content="no-cache">
    14     <meta http-equiv="cache-control" content="no-cache">
    15     <meta http-equiv="expires" content="0">    
    16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    17     <meta http-equiv="description" content="This is my page">
    18     <!--
    19     <link rel="stylesheet" type="text/css" href="styles.css">
    20     -->
    21   </head>
    22   <body>
    23           <% 
    24               System.out.println("第三步");
    25           %>
    26           <form action="LoginServlet1" method="post">
    27               <input type="text" name="uname"/>
    28              <input type="password" name="upass"/>
    29              <input type="submit" value="登录"/>
    30              <span>没有账号?<a href="reg.jsp">立即注册</a></span>
    31           </form>
    32           <hr>
    33           <span style="color: red;">${requestScope.msg}</span>
    34   </body>
    35 </html>

    注册页面

     1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'reg.jsp' starting page</title>
    13     
    14     <meta http-equiv="pragma" content="no-cache">
    15     <meta http-equiv="cache-control" content="no-cache">
    16     <meta http-equiv="expires" content="0">    
    17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18     <meta http-equiv="description" content="This is my page">
    19     <!--
    20     <link rel="stylesheet" type="text/css" href="styles.css">
    21     -->
    22 
    23   </head>
    24   
    25   <body>
    26     <form action="RegisterServlet">
    27         <input type="text" name="uname" placeholder="请输入账号"/>
    28         <input type="password" name="upass" placeholder="请输入密码"/>
    29         <input type="password" name="upass" placeholder="请输入重复密码"/>
    30         <input type="submit" value="注册"/>
    31     </form>
    32   </body>
    33 </html>

    主页面

     1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'main.jsp' starting page</title>
    13     
    14     <meta http-equiv="pragma" content="no-cache">
    15     <meta http-equiv="cache-control" content="no-cache">
    16     <meta http-equiv="expires" content="0">    
    17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18     <meta http-equiv="description" content="This is my page">
    19     <!--
    20     <link rel="stylesheet" type="text/css" href="styles.css">
    21     -->
    22 
    23   </head>
    24   
    25   <body>
    26     欢迎来到主页
    27   </body>
    28 </html>

    Struts2下的拦截器(interceptor)和 过滤器(Filter)

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/10703859.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    asp.net core 2.0的认证和授权
    数据库性能优化详解
    StringUtils.defaultIfBlank
    SQL优化(二) 快速计算Distinct Count
    SQL语句中Left join,right join,inner join用法
    sql中的limit关键字
    多线程之间的资源共享
    面试长谈的String,StringBuffer,StringBuilder三兄弟有啥区别
    关于java中的值传递与引用传递遇到的问题
    Struts1和Struts2的区别和对比:
  • 原文地址:https://www.cnblogs.com/dshore123/p/10703859.html
Copyright © 2011-2022 走看看