標籤:odi 配置 etc 初始化 username check 重點 技術分享 webapp
定義
過濾器:準系統是對servlet容器調用Servlet的過程進行攔截,從而在Servlet響應前後實現一些特殊功能
javaAPI提供三個介面,Filter,FilterChain,FilterConfig
實現介面Filter
public class LoginFilter2 implements Filter { public LoginFilter2() { // TODO Auto-generated constructor stub } public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request,response); } public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub }}
生命週期:載入----->調用構造器(調用一次)-------->初始化init()(調用一次)------->doFilter()(可以調用多次和servlet中的service一樣)
執行個體
1.login.jsp代碼 ,hello.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="${pageContext.request.contextPath }/hello.jsp" method="post"> 使用者:<input type="text" name="username">${user_msg }<br> 密碼:<input type="password" name="password">${pass_msg}<br> <button>提交</button> </form></body></html>
- LoginFilter攔截器用於檢查使用者名稱 ,擷取初始化參數“Tom”來比較
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;public class LoginFilter implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain arg2) throws IOException, ServletException { String username=request.getParameter("username"); String password=request.getParameter("password"); String name=config.getInitParameter("Username"); if(username.equals(name)) { arg2.doFilter(request, response); }else { request.setAttribute("user_msg", "使用者名稱錯誤"); request.getRequestDispatcher("login.jsp").forward(request, response); } } FilterConfig config; @Override public void init(FilterConfig config) throws ServletException { // TODO Auto-generated method stub this.config=config; }}
3.web.XML配置代碼,和Servlet配置一樣,只是名不一樣
注意:自己配置的Filter攔截順序就是代碼書寫順序,如果使用註解自動設定的話攔截順序是按Filter類的名來排序的,
<?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_2_5.xsd" id="WebApp_ID" version="2.5"> <context-param> <param-name>Password</param-name> <param-value>1234</param-value> </context-param> <filter> <filter-name>loginfilter</filter-name> <filter-class>com.filter.LoginFilter</filter-class> <init-param> <param-name>Username</param-name> <param-value>Tom</param-value> </init-param> </filter> <filter-mapping> <filter-name>loginfilter</filter-name> <url-pattern>/hello.jsp</url-pattern> </filter-mapping> <filter> <filter-name>checkfilter</filter-name> <filter-class>com.filter.CheckFilter</filter-class> </filter> <filter-mapping> <filter-name>checkfilter</filter-name> <url-pattern>/hello.jsp</url-pattern> </filter-mapping></web-app>
4.檢查密碼的代碼,重點練習擷取全域變數
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;public class CheckFilter implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { String password=arg0.getParameter("password"); String pass=config.getServletContext().getInitParameter("Password"); if(password.equals(pass)) { arg2.doFilter(arg0, arg1); }else { arg0.setAttribute("pass_msg", "密碼錯誤"); arg0.getRequestDispatcher("login.jsp").forward(arg0, arg1); } } FilterConfig config; @Override public void init(FilterConfig config) throws ServletException { // TODO Auto-generated method stub this.config=config; }}
javaweb----Filter