【Servlet】Java Servet Filter 過濾器

來源:互聯網
上載者:User

標籤:檔案   cti   row   servet   servlet   character   har   xtend   chain   

Filter的設計思想
Filter是一種AOP的設計思想 : 面向切面

下面這是一個使用filter的登入案例:
我們通過一張圖片理解理解filer面向切面

下面是項目的結構:


下面是jsp檔案:
<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body><form action="login.do" method="POST"><span>使用者名稱:</span><span><input type="text" name="uname" /></span><br/><span>密碼:</span><span><input type="password" name="upass" /></span><br/><input type="submit" value="提交"/></form></body></html>
login.jsp

下面是web.xml檔案:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">  <display-name>Filter_Demo</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>  </welcome-file-list>    <!-- 佈建要求的編碼格式的過濾器 -->  <filter>    <filter-name>request</filter-name>    <filter-class>cn.userLogin.filter.RequestFilter</filter-class>  </filter>  <filter-mapping>     <filter-name>request</filter-name>     <url-pattern>*.do</url-pattern>  </filter-mapping>    <!-- 設定響應的編碼格式的過濾器 -->  <filter>    <filter-name>response</filter-name>    <filter-class>cn.userLogin.filter.ResponseFilter</filter-class>  </filter>  <filter-mapping>    <filter-name>response</filter-name>    <url-pattern>*.do</url-pattern>  </filter-mapping>    <!-- 設定檢查參數的格式編碼器 -->  <filter>    <filter-name>param</filter-name>    <filter-class>cn.userLogin.filter.ParamFilter</filter-class>  </filter>  <filter-mapping>    <filter-name>param</filter-name>    <url-pattern>*.do</url-pattern>  </filter-mapping>  </web-app>
web.xml

下面是servelet檔案
package cn.user.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class UserLogin */@WebServlet("/login.do")public class UserLogin extends HttpServlet {    private static final long serialVersionUID = 1L;        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doPost(request,response);    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //進行資料判斷        String userName=request.getParameter("uname");        String userPassword=request.getParameter("upass");                //從資料庫中查詢相應的資訊...                //將資訊返回        response.getWriter().append("姓名:"+userName+",密碼:"+userPassword);    }}
UserLogin.java

下面是filter檔案:
package cn.userLogin.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.annotation.WebFilter;/** * 這個過濾器佈建要求的編碼格式 */public class RequestFilter implements Filter {    public void destroy() {        // TODO Auto-generated method stub    }        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        //佈建要求的編碼格式        request.setCharacterEncoding("utf-8");        //允許存取        chain.doFilter(request, response);    }        public void init(FilterConfig fConfig) throws ServletException {    }}
RequestFilter.java
package cn.userLogin.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;/** * 這個過濾器設定響應的編碼格式 */public class ResponseFilter implements Filter {    /**     * 過濾器銷毀的時候調用     */    public void destroy() {    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        //設定響應的編碼格式        response.setContentType("text/html;charset=utf-8");        //允許存取        chain.doFilter(request, response);    }    /**     * 過濾器初始化的時候調用     */    public void init(FilterConfig fConfig) throws ServletException {    }}
ResponseFilter.java
package cn.userLogin.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.annotation.WebFilter;/** * 這個過濾器進行參數的格式檢查 */public class ParamFilter implements Filter {    public void destroy() {    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        //檢查參數的格式        String uName = request.getParameter("uname");        String uPassword = request.getParameter("upass");        if(uName == null || uPassword == null || uName.length()==0 || uPassword.length()==0){            response.getWriter().append("你的參數格式不正常");            return;//退出方法        }        chain.doFilter(request, response);    }    /**     * @see Filter#init(FilterConfig)     */    public void init(FilterConfig fConfig) throws ServletException {        // TODO Auto-generated method stub    }}
ParamFilter.java

【Servlet】Java Servet Filter 過濾器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.