java Web三大組件--過濾器
阿新 • • 發佈:2018-03-04
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 classDoLoginServlet 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) throwsServletException, 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三大組件--過濾器