1. 전체 사이트에서 통합 문자 인코딩
구성 매개 변수 charset은 HTML 양식 요청 매개 변수의 중국 문제를 처리하는 데 사용되는 문자 인코딩을 나타냅니다.
packing me.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterconfig; import javax.servlet.servletexception; import javax.servletrequest; Javax.servlet.http.http.httpervletrequest; import javax.servlet.http.htttp.httpervletrequestwrapper; import javax.servlet.http.htttp.httpervletresponse;/ *** @classname : charac 캐릭터 encodingfilter는 필터 {private filterconfig filterconfig = null; // 기본 문자를 인코딩하는 기본 문자열을 설정합니다. string defaultcharset = "utf-8"; Public Void Dofilter (ServletRequest req, ServletRepsonse Resp, Filterchain 체인) IoException, servleTexception {httpservletRequest request = (httpservletRequest) req; httpservletresponse 응답 = (httpservletresponse) resp; 문자열 charset = filterconfig.getInitParameter ( "charset"); if (charset == null) {charset = defaultcharset; } request.SetchAracterEncoding (charset); 응답 .SetchAracterEncoding (charset); response.setContentType ( "text/html; charset ="+charset); MyCharacterEncodingRequest requestWrapper = New MyCharacterEncodingRequest (요청); chain.dofilter (requestWrapper, 응답); } public void init (FilterConfig FilterConfig) servleTeXception {// 필터의 초기화 구성 정보 가져 점 .filterConfig = FilterConfig; } public void destroy () {}}/*1. 향상된 객체와 동일한 인터페이스를 구현합니다. 변수 정의 강화 된 객체를 정의하십시오. 3. 강화 된 객체를 수신하기 위해 생성자를 정의하십시오. 향상 해야하는 방법을 덮어 씁니다. public mycharacterencodingRequest (httpservletrequest 요청) {super (요청); this.request = 요청; } /* getParameter 메소드를 다시 작성* @see javax.servlet.servletrequestwrapper#getParameter (java.lang.string)* /@override public String getParameter (String Name) {// 매개 변수의 값 값 값 = this.request.getParameter (이름); if (value == null) {return null; } // 데이터가 get에 제출되지 않은 경우 획득 한 값을 직접 반환합니다. } else {// 데이터가 get에 제출되면, 획득 된 값은 value = new String (value.getBytes ( "iso8859-1"), this.request.getCharacterEncoding ()); 반환 값; }} catch (예외 e) {throw new runtimeexception (e); }}} Web.xml 파일의 구성은 다음과 같습니다.
<filter> <filter-name> atriblicodingfilter </filter-name> <filter-class> me.gacl.web.filter.characterencododingfilter </filter-class> <init-param> <param-name> charset </param-name> <param-value> utf-8 </init-param> </init-param> </init-param> </init-param> <filter-name> atriblicecodingfilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2. 브라우저는 캐시 된 모든 동적 페이지에서 금지됩니다.
브라우저가 현재 페이지를 캐시하는 것을 금지 할 수있는 3 개의 HTTP 응답 헤더 필드가 있습니다. 서블릿의 예제 코드는 다음과 같습니다.
모든 브라우저가 위의 3 개의 응답 헤더를 완전히 지원할 수있는 것은 아니므로 위의 3 개의 응답 헤더를 동시에 사용하는 것이 가장 좋습니다.
packing me.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterconfig; import javax.servlet.servletexception; import javax.servletrequest; javax.servlet.http.httpervletrequest; import javax.servlet.http.htttp.httpservletresponse;/*** @classname : nocachefilter* @description : 브라우저는 모든 동적 페이지로부터 양도되어 있습니다* @author : Lonely Canglang* @Date* @Date : 2014-8-31 11:25: 공개 클래스 nocachefilter는 필터를 구현합니다 {public void dofilter (servletrequest req, servletreponse resp, filterchain chain)는 ioexception, servletexception {// servletrequest를 httpservletrequest httpervletrequest request = (httppletrequest) Req; // httpservletResponse에 대한 servletResponse를 강제로 httpservletResponse 응답 = (httpservletResponse) resp; // servletResponse를 httpservletResponse로 강제 강제로 응답 = (httpservletResponse) resp; // 모든 동적 페이지 응답을 캐시하는 브라우저를 금지합니다. Response.SetHeader ( "Cache-Control", "No-Cache"); Response.SetHeader ( "Pragma", "No-Cache"); Chain.dofilter (요청, 응답); } public void init (FilterConfig FilterConfig) servleTexception {} public void destroy () {}} Web.xml 파일의 구성은 다음과 같습니다.
<filter> <filter-name> nocachefilter </filter-name> <filter-class> me.gacl.web.filter.nocachefilter </filter-class> </filter> <filter-mapping> <filter-name> nocachefilter </filter-name> <!-intercept jsp 요청-> jsplet-name>*. </필터 매핑>
3. 브라우저 캐시 페이지의 정적 리소스 제어
일부 동적 페이지는 페이지 효과를 수정하기 위해 일부 사진 또는 CSS 파일을 참조합니다. 이 그림과 CSS 파일은 종종 변경되지 않으므로 서버의 압력을 완화하기 위해 필터를 사용하여 브라우저를 제어하여 이러한 파일을 캐시하여 서버의 성능을 향상시킬 수 있습니다.
packing me.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterconfig; import javax.servlet.servletexception; import javax.servletrequest; javax.servlet.http.httpervletrequest; import javax.servlet.http.httpervletresponse;/ *** @classname : cachefilter*@description : 필터*/ public class cachefilter emplements filter {private filterconfig filterconfig; Public Void Dofilter (ServletRequest req, ServletRepsonse Resp, Filterchain 체인) IoException, servleTexception {httpservletRequest request = (httpservletRequest) req; httpservletresponse 응답 = (httpservletresponse) resp; // 1. 사용자가 String uri = request.getRequesturi ()에 액세스하려는 리소스를 얻습니다. // 2. 사용자가 문자열 ext = uri.substring (uri.lastIndexof ( ".")+1)에 액세스하려는 리소스의 접미사 이름을 가져옵니다. // 리소스가 캐시 된 문자열이어야하는 시간을 얻습니다. Time = FilterConfig.getInitParameter (ext); if (time! = null) {long t = long.parselong (time)*3600*1000; // 캐시 응답을 설정합니다 .SetDateHeader ( "FERPIRES", SYSTEM.CURRENTTIMEMILLIS () + T); } chain.dofilter (요청, 응답); } public void init (FilterConfig FilterConfig) servleTexception {this.filterConfig = FilterConfig; } public void destroy () {}} Web.xml 파일의 구성은 다음과 같습니다.
<!-캐시 필터 구성-> <filter> <filter-name> cachefilter </filter-name> <filter-class> me.gacl.wilter.filter.cachefilter </filter-class> <!-시간 내에 캐싱 될 웹 리소스를 구성-<param-name> css </param-name>을 구성합니다. <Param-value> 4 </param-value> </init-param> <init-param> <param-name> jpg </param-name> <param- value> 1 </param-value> </init-param> <init-param> <param-name> js </param-name> <param-value> 4 </param-value> <Param-name> png </param-name> <param-value> 4 </param-value> </init-param> </filter> <!-웹 리소스의 접미사를 캐시 할 수 있도록 구성-> <filter-name> cachefilter </filter-name> <url-fattern>. <filter-mapping> <filter-name> cachefilter </filter-name> <Url-pattern>*. css </url-pattern> </filter-mapping> <filter-name> cachefilter </filter-name> <url-pattern>*. js </url-pattern> <filter-mapping> <filter-name> Cachefilter </filter-name> <url-pattern>*. png </url-pattern> </filter-mapping>
4. 사용자를위한 자동 로그인을 실현하십시오
아이디어는 다음과 같습니다.
1. 사용자가 성공적으로 로그인 한 후에는 사용자가있는 쿠키를 클라이언트에게 보내십시오. 쿠키의 값은 MD5의 사용자 이름과 암호화 된 비밀번호입니다.
2. AutologinFilter를 작성하십시오. 이 필터는 사용자에게 사용자라는 쿠키가 있는지 확인합니다. 그렇다면 DAO에 전화하여 쿠키의 사용자 이름과 암호가 데이터베이스와 일치하는지 확인하십시오. 일치가 완료되면 사용자 객체 (즉, 사용자 로그인 마크)가 자동 로그인을 달성하기 위해 세션에 저장됩니다.
핵심 코드는 다음과 같습니다.
컨트롤러 처리 사용자 로그인 : loginservlet
package me.gacl.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import Javax.servlet.http.http.httpervletresponse; import me.gacl.dao.userdao; import me.gacl.domain.user; import me.gacl.util.webutils; public class loginservlet httpservlet {httpservlet respirts) ServleTeXception, ioException {String username = request.getParameter ( "username"); 문자열 비밀번호 = request.getParameter ( "password"); userdao dao = new userDao (); 사용자 user = dao.find (사용자 이름, 비밀번호); if (user == null) {request.setAttribute ( "message", "사용자 이름 또는 비밀번호가 잘못되었습니다 !!"); request.getRequestDispatcher ( "/message.jsp"). FORMPER (요청, 응답); 반품; } request.getSession (). setAttribute ( "사용자", 사용자); // 자동 로그인 쿠키를 클라이언트 브라우저에 보내기 위해 SendAutologinCookie (요청, 응답, 사용자)을 저장합니다. request.getRequestDispatcher ( "/index.jsp"). FORMPER (요청, 응답); } / ** * @method : sendautologincookie * @description : 자동 로그인 쿠키를 클라이언트 브라우저 * @param request * @param response * / private void sendautologincookie (httpservletRequest request, httpservletResponse 응답, 사용자 user) {if (request.ggintime ") integer.parseint (request.getParameter ( "logintime")); // 쿠키 생성, 쿠키 이름은 autologin이고 값은 사용자 로그인의 사용자 이름과 비밀번호이며 사용자 이름과 비밀번호 사이에 사용됩니다. 나뉘어진다. 비밀번호는 MD5에 의해 암호화됩니다. 쿠키 = 새 쿠키 ( "autologin", user.getusername () + "." + webutils.md5 (user.getpassword ()); // 쿠키 쿠키의 유효 기간을 설정합니다 .setMaxage (logintime); // 쿠키 쿠키의 유효한 경로를 설정합니다. // 쿠키를 클라이언트 브라우저 응답에 작성합니다 .addCookie (쿠키); }} public void dopost (httpservletrequest 요청, httpservletreponse 응답) servletexception, ioexception {doget (요청, 응답); }} 사용자 자동 로그인을 처리하는 필터 : AutologInfilter
packing me.gacl.web.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterconfig; import javax.servlet.servletexception; import javax.servletrequest; javax.servlet.http.cookie; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import me.gacl.dao.userdao; import me.gacl.usor; import me.gacl.util.wbutils; AutologinFilter는 필터를 구현 {public void dofilter (servletrequest req, servletreponse resp, filterchain chain)가 ioexception, servletexception {httpservletrequest request = (httpservletrequest) req; httpservletresponse 응답 = (httpservletresponse) resp; // 로그인 한 경우 직접 체인 .dofilter (요청, 응답) release if (request.getSession (). getAttribute ( "사용자")! = null) {chain.dofilter (요청, 응답); 반품; } // 1. 사용자 문자열 값 = null에 의해 가져온 인증의 쿠키를 얻으십시오. 쿠키 쿠키 [] = request.getCookies (); for (int i = 0; cookies! = null && i <cookies.length; i ++) {if (쿠키 [i] .getName (). Equals ( "autologin")) {value = 쿠키 [i] .getValue (); }} // 2. if (value! = null) {string username = value.split ( "//") [0]; 문자열 암호 = value.split ( "//.") [1]; // 3. DAO에 전화하여 사용자 dao dao = new userDao ()의 해당 비밀번호를 얻습니다. 사용자 user = dao.find (username); 문자열 dbpassword = user.getPassword (); // 4. 사용자가 가져온 MD5의 비밀번호가 데이터베이스의 비밀번호와 일치하는지 확인하십시오. 일치하는 경우 if (password.equals (webutils.md5 (dbpassword))) {request.getSession (). setAttribute ( "user", user); }} chain.dofilter (요청, 응답); } public void destroy () {} public void init (FilterConfig FilterConfig) servletexception {}} 자동 로그인을 취소하려면 사용자가 로그 아웃 할 때 자동 로그인 쿠키를 삭제할 수 있습니다. 핵심 코드는 다음과 같습니다.
package me.gacl.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.httpervletrequest; import javax.servlet.http.htttp.httpservletresponse; public class cancelaUloginservlet 확장 httpservlet {public void doget (httpservletrequest request, httpservletresponse 응답) servleteccement, ioexmence { /remection} request.getSession (). removeAttribute ( "사용자"); // removeautologincookie (요청, 응답)에 자동으로 로그인 된 쿠키를 제거합니다. // 로그인 후 로그인 페이지로 제거 요청. } /** * @method : removeautologincookie * @description : 자동 로그인 쿠키 삭제, * Javaweb에서 쿠키를 삭제하는 방법은 새 쿠키를 만드는 것입니다. 새로 생성 된 쿠키는 쿠키와 동일한 이름을 삭제하는 것과 동일합니다. 요청 * @param response */private void removeautologincookie (httpservletrequest request, httpservletresponse response) {// 이름으로 쿠키 생성 autologin 쿠키 쿠키 = 새로운 쿠키 ( "autologin", "); // 쿠키를 0으로 설정하고 쿠키를 설정하도록 브라우저 (0). 쿠키.위의 내용은 필터의 몇 가지 일반적인 응용 시나리오이며 모든 사람의 학습에 도움이되기를 바랍니다.