1. 程式人生 > >java Web三大組件--過濾器

java Web三大組件--過濾器

stub red ati on() org ring blog web ||

貼個例子:

login.jsp:

<form action="doLogin" method="post">
用戶名:<input type="text" name="userName"/><br/>
密碼:<input type="password" name="password"/><br/>
<input type="submit" value="登錄"/>
<input type="reset" value="重置"/>
</form>

創建一個success.jsp用於展示跳轉成功。

創建登錄跳轉Servlet:

package com.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@SuppressWarnings("serial")
public class
DoLoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException { String userName=req.getParameter("userName"); String password=req.getParameter("password"); System.out.println(userName); if("張三".equals(userName)&&"123".equals(password)){ //校驗通過 HttpSession session = req.getSession(); session.setAttribute("userName", userName); resp.sendRedirect("success.jsp"); }else { resp.sendRedirect("login.jsp"); } } }

創建第一個過濾器(解決亂碼):

package com.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class SetEconding implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
            throws IOException, ServletException {

        HttpServletRequest req=(HttpServletRequest)arg0;
        //解決亂碼問題
        req.setCharacterEncoding("UTF-8");
        
        //別忘了放行
        arg2.doFilter(arg0, arg1);

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

創建第一個過濾器(是否登錄):

package com.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {

    private FilterConfig config=null;
    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
            throws IOException, ServletException {
        HttpServletRequest req=(HttpServletRequest)arg0;
        HttpServletResponse resp=(HttpServletResponse)arg1;
        HttpSession session=req.getSession();
        
        
        String initParam=config.getInitParameter("NotFilter");
        String[] notFilterPages=initParam.split(";");
        
        if(notFilterPages!=null){
            for(int i=0;i<notFilterPages.length;++i){
                //跳過字段為空和空字符串的情況
                if(notFilterPages[i]==null||"".equals(notFilterPages[i]))continue;
                //註意這裏是URI路徑中的是否含有某個初始值,對於servlet來說,是指配置servlet時指定的url-pattern的值,而不是servlet類名
                if(req.getRequestURI().indexOf(notFilterPages[i])!=-1){
                    arg2.doFilter(arg0, arg1);
                    return;
                }
                
            }
                
        }
        
        //只要未登錄成功,所有的頁面跳轉請求(免除過濾的頁面和servlet處理類除外)都將跳轉到登錄頁面
        if(session.getAttribute("userName")!=null){
            arg2.doFilter(arg0, arg1);
            return;
        }else{
            resp.sendRedirect("login.jsp");
            return;
        }
            

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        config=arg0;
        

    }

}

web.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>javaEE_filter</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
  <!-- 第1個過濾器 -->
  <!-- 配置解決亂碼過濾器 -->
  <filter>
  <filter-name>SetEcondingFilter</filter-name>
  <filter-class>com.filter.SetEconding</filter-class>
  </filter>
  
  <!-- 配置解決亂碼過濾器映射 -->
  <filter-mapping>
  <filter-name>SetEcondingFilter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
  <!-- 第2個過濾器 -->
  <!-- 配置登錄過濾器 -->
  <filter>
  <filter-name>LoginFilter</filter-name>
  <filter-class>com.filter.LoginFilter</filter-class>
  <init-param>
  <param-name>NotFilter</param-name>
  <param-value>login;doLogin</param-value>
  </init-param>
  </filter>
  
  <!-- 配置登錄過濾器映射 -->
  <filter-mapping>
  <filter-name>LoginFilter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
  <!-- 配置處理登錄的Servlet -->
  <servlet>
  <servlet-name>LoginServlet</servlet-name>
  <servlet-class>com.servlet.DoLoginServlet</servlet-class>
  </servlet>
  
  <!-- 配置處理登錄Servlet的映射 -->
  <servlet-mapping>
  <servlet-name>LoginServlet</servlet-name>
  <url-pattern>/doLogin</url-pattern>
  </servlet-mapping>
</web-app>

參考博客:http://www.cnblogs.com/coderland/p/5902878.html

https://www.cnblogs.com/HigginCui/p/5772514.html

java Web三大組件--過濾器