首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

查验用户名、密码、字符编码、页面缓存-Filter的基本使用

2012-12-19 
检验用户名、密码、字符编码、页面缓存----Filter的基本使用login.jsp%@ page languagejava contentType

检验用户名、密码、字符编码、页面缓存----Filter的基本使用

login.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><font color="red">${requestScope.errormsg }</font><br><br><form action="hello.jsp" method="post">Name: <input type="text" name="name"/><br><br>Password: <input type="password" name="password"/><br><br><input type="submit" value="Submit"/></form></body></html>


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><h4>Hello Page</h4><br><br><%//request.setCharacterEncoding("UTF-8") ;%>hello : ${param.name }<br><br></body></html>


EncodingFilter.java

package com.syh.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/** * 字符编码过滤器,在设置这个过滤器的时候,还要将Tomcat的一个配置改变: * 修改 Tomcat 服务器的 conf 目录下的 server.xml 文件中的  <Connector> 为(67 行)<Connector port="8989" protocol="HTTP/1.1"   connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true" />,再次重新启动Tomcat服务器 * @author Administrator * */public class EncodingFilter implements Filter {private FilterConfig config ;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.config = filterConfig ;}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//1. 获取 ServletContext 对象ServletContext servletContext = config.getServletContext() ;//2. 获取 encoding 的初始化参数String encoding = servletContext.getInitParameter("encoding") ;//3. 设置 request 的字符编码request.setCharacterEncoding(encoding) ;chain.doFilter(request, response) ;}@Overridepublic void destroy() {}}


NoCacheFilter.java

package com.syh.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;/** * 使浏览器不缓存页面的过滤器 * @author Administrator * */public class NoCacheFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) resp ;// 并不是所有的浏览器都能完全支持上面的三个响应头, 因此最好是同时使用下面的三个响应头response.setDateHeader("Expires",-1);response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache");chain.doFilter(req, resp) ;}@Overridepublic void destroy() {}}


NameFilter.java

package com.syh.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;/** * 用户名检验过滤器 * @author Administrator * */public class NameFilter implements Filter {private FilterConfig config ;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.config = filterConfig ;}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//1. 获取表单中 name 的参数String paramName = request.getParameter("name") ;//2. 获取当前 Filter 中 name 的参数String initName = config.getInitParameter("name") ;//3. 比较if(paramName != null && initName.equals(paramName)) {//3.1  匹配,放行chain.doFilter(request, response) ;}else {//3.2 不匹配, 将页面转发到 /login.jsp, 并提示用户 "您输入的用户名不同"request.setAttribute("errormsg", "您输入的用户名" + paramName + "不同") ;request.getRequestDispatcher("/login.jsp").forward(request,response) ;}}@Overridepublic void destroy() {}}


PasswordFilter.java

package com.syh.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;/** * 密码检验过滤器 * @author Administrator * */public class PasswordFilter implements Filter {private FilterConfig config ;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.config = filterConfig ;}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//1.获取表单中 password 的参数String paramPassword = request.getParameter("password") ;//2. 获取当前 Filter 的 password 的参数String initPassword = config.getInitParameter("password") ;//3. 比较if(paramPassword != null && initPassword.equals(paramPassword)) {//3.1 匹配, 放行chain.doFilter(request, response) ;} else {//3.2 不匹配, 将页面转发到 /login.jsp, 并提示用户 "您输入的密码不正确"request.setAttribute("errormsg", "您输入的密码不正确") ;request.getRequestDispatcher("/login.jsp").forward(request, response) ;}}@Overridepublic void destroy() {}}


<!-- 字符编码的参数 --><context-param><param-name>encoding</param-name><param-value>UTF-8</param-value></context-param><!-- 字符编码的检验 --><filter><filter-name>EncodingFilter</filter-name><filter-class>com.syh.filter.EncodingFilter</filter-class></filter><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 浏览器缓存的检验 --><filter><filter-name>NoCacheFilter</filter-name><filter-class>com.syh.filter.NoCacheFilter</filter-class></filter><filter-mapping><filter-name>NoCacheFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 用户名的检验 --><filter><filter-name>NameFilter</filter-name><filter-class>com.syh.filter.NameFilter</filter-class><init-param><param-name>name</param-name><param-value>Tom</param-value></init-param></filter><filter-mapping><filter-name>NameFilter</filter-name><url-pattern>/hello.jsp</url-pattern></filter-mapping><!-- 用户名的检验 --><filter><filter-name>PasswordFilter</filter-name><filter-class>com.syh.filter.PasswordFilter</filter-class><init-param><param-name>password</param-name><param-value>1234</param-value></init-param></filter><filter-mapping><filter-name>PasswordFilter</filter-name><url-pattern>/hello.jsp</url-pattern></filter-mapping>

热点排行