1.
O parâmetro de configuração Charset indica qual codificação de caracteres é usada para lidar com o problema chinês dos parâmetros de solicitação de formulário HTML
pacote me.gacl.web.filter; importar java.io.ioException; importar javax.servlet.filter; importar javax.servlet.filterchain; importar javax.servlet.filterconfig; import javax.servlet.sertleStleSception; import javax.servlesslente; javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;/*** @ClassName: CharacterEncodingFilter* @Description: This filter is used to solve O problema dos chineses iluminou em todo o site*/ classe pública CaracterencodingFilter implementa filtro {private filtroConfig filterConfig = null; // Defina o caractere padrão que codifica a String privada defaultcharset = "utf-8"; public void Dofilter (servletRequest req, servletResponse resp, cadeia de filtro) lança ioexception, servletexception {httpServletRequest request = (httpServleTrequest) req; HttpServletResponse Response = (httpServletResponse) resp; String charset = filterConfig.getInitParameter ("charset"); if (charset == null) {charset = defaultcharset; } request.SetcharAcTerEncoding (charset); Response.Setcharacterencoding (Charset); Response.setContentType ("Text/html; charset ="+charset); MyCharacterencodingRequest RequestWrapper = new MyCharacterencodingRequest (solicitação); Chain.Dofilter (requestWrapper, resposta); } public void init (filterConfig filterConfig) lança servletexception {// obtenha as informações de configuração de inicialização do filtro this.filterConfig = filterConfig; } public void Destroy () {}}/*1. Implementar a mesma interface do objeto aprimorado 2. Defina uma variável Lembre -se do objeto aprimorado 3. Defina um construtor para receber o objeto aprimorado 4. Substitua os métodos que precisam ser aprimorados 5. Para métodos que não desejam ser aprimorados, chamam diretamente o método do objeto aprimorado (objeto de destino)/ classe MyAcTerCoMEPTERTEstrendsLetLerend (objeto de destino) */ classe MyAcTerCoSTEstrendsLeTrendSLeTrendSLeTSLeTSLeTSLeTSLeTSLeTSLeTSLeTSLeTSLeTSLeTSLeTReStEsterTeRMERTReSTEstret (objeto de destino) */ classe MyAcTerCoSTEstretLeTrestrendsLeTRestretLeT (objeto de destino) */ classe public MyCharacterencodingRequest (solicitação httpServletRequest) {super (request); this.request = solicitação; } /* Reescreva o método getParameter* @see javax.servlet.servletRequestwrapper#getParameter (java.lang.string)* /@Override public string getParameter (nome da string) {try {// obtenha o valor do parâmetro do parâmetro if (value == null) {return null; } // Se os dados não forem enviados no get, retorne diretamente o valor obtido if (! This.request.getMethod (). Equalsignorecase ("get")) {return value; } else {// Se os dados forem enviados no get, o valor obtido será transcodificado valor = new String (value.getBytes ("ISO8859-1"), this.Request.getCharacterencoding ()); valor de retorno; }} Catch (Exceção e) {lança nova RunTimeException (e); }}} A configuração no arquivo web.xml é a seguinte:
<filter> <filter-name> caracterencodingfilter </filter-name> <filter-Class> me.gacl.web.filter.characterencodingFilter </limter-Class> <iit-param> <amamp-name> charset </amam-name> <aam-Value> utf-8 </param-name> </ingress-s-rotação </param-name> <aam-Value> utf-8 </param-name> <Filter-Name> CaracterEncodingFilter </filter-Name> <url-Pattern>/*</url-tattern> </filter-Mapping>
2. O navegador é proibido de armazenar em cache todas as páginas dinâmicas
Existem 3 campos de cabeçalho de resposta HTTP que podem proibir o navegador de armazenar em cache a página atual. O código de exemplo no servlet é o seguinte:
Nem todos os navegadores podem suportar completamente os três cabeçalhos de resposta acima, por isso é melhor usar os três cabeçalhos de resposta acima ao mesmo tempo.
pacote me.gacl.web.filter; importar java.io.ioException; importar javax.servlet.filter; importar javax.servlet.filterchain; importar javax.servlet.filterconfig; import javax.servlet.sertleStleSception; import javax.servlesslente; javax.servlet.servletResponse; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse;/*** @ClassName: nocachEfilter* @Description: BrowAThEThEThEThEThed a partir de um cache de allicatric* @Descrition: BrowerTeThEThEThEThEThEThEThEThEtHed: 2014-8-31 23:25:40 **/classe pública nocachefilter implementa filtro {public void Dofilter (servletRequest req, servletResponse resp, cadeia de filtro) lança (servetTeLeTreLeTPELTPELTPELTEXCEMCEMPETQE; // forçando o servletResponse a httpServletResponse httpServletResponse Response = (httpServletResponse) resp; // forçando o servletResponse a httpServletResponse Response = (httpServletResponse) resp; // proíbe os navegadores de armazenar em cache todas as páginas dinâmicas Response.SetDateHeader ("Expira", -1); Response.setheader ("Cache-Control", "No-Cache"); Response.setheader ("Pragma", "sem cache"); Chain.Dofilter (solicitação, resposta); } public void init (filterConfig filterConfig) lança servletexception {} public void Destroy () {}} A configuração no arquivo web.xml é a seguinte:
<filter> <filter-name> nocachefilter </ftrhter-name> <filter-Class> me.gacl.web.filter.nocachefilter </ftrids-class> </ftruter> <filter-mapping> <filter-name> nocachefilter </filter-name> <!-intercept apenas jsps-<er Servlet-name>*.
3. Controle recursos estáticos em páginas de cache do navegador
Algumas páginas dinâmicas se referem a algumas imagens ou arquivos CSS para modificar o efeito da página. Esses arquivos de imagens e CSS geralmente permanecem inalterados; portanto, para aliviar a pressão no servidor, você pode usar o filtro para controlar o navegador para armazenar esses arquivos para melhorar o desempenho do servidor.
pacote me.gacl.web.filter; importar java.io.ioException; importar javax.servlet.filter; importar javax.servlet.filterchain; importar javax.servlet.filterconfig; import javax.servlet.sertleStleSception; import javax.servlesslente; javax.servlet.servletResponse; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; *** @className: cachefilter*@Description: filtro*/ public class Filter; public void Dofilter (servletRequest req, servletResponse resp, cadeia de filtro) lança ioexception, servletexception {httpServletRequest request = (httpServleTrequest) req; HttpServletResponse Response = (httpServletResponse) resp; // 1. Obtenha o recurso que o usuário deseja acessar a string uri = request.getRequesturi (); // 2. Obtenha o nome do sufixo do recurso que o usuário deseja acessar string ext = uri.substring (uri.lastindexof (".")+1); // Obtenha o tempo em que o recurso precisa ser cache de string time = filterConfig.getInitParameter (ext); if (time! = null) {long t = long.parselong (tempo)*3600*1000; // Defina o cache Response.SetDateHeader ("Expira", System.CurrentTimemillis () + T); } cadeia.dofilter (solicitação, resposta); } public void init (filterConfig filterConfig) lança servletexception {this.filterConfig = filterConfig; } public void Destroy () {}} A configuração no arquivo web.xml é a seguinte:
<!-Configure filtro de cache-> <filter> <filtro-name> Cachefilter </ftrid-name> <filter-Class> me.gacl.web.filter.cachefilter </filter-class> <!-Configure os recursos da Web a serem cache e o tempo do cache em horas-> <iniT-Param> <amanname> cs e o tempo de cache em horas- </init-param> <iit-param> <amam-name> jpg </param-name> <amam-value> 1 </param-value> </irit-param> <iit--param> <amam-name> js </param-name> <aam-value> 4 </amaM-value> </init-param> <am-name> <amam-value> 4 </amam-value> </irit-param> </ftruter> <!-Configure o sufixo do recurso da web a ser em cache-> <Irl-Mapping> <filter-Name> cachefilter </filter-name> <url-Pattern>*. <url-pattern>*. </filter-mapping>
4. Realize o login automático para os usuários
A idéia é a seguinte:
1. Depois que o usuário efetua login com sucesso, envie um cookie com o nome do usuário para o cliente. O valor do cookie é o nome de usuário e a senha criptografada do MD5.
2. Escreva um AutologinFilter. Este filtro verifica se o usuário possui um cookie chamado usuário. Nesse caso, ligue para o DAO para verificar se o nome de usuário e a senha do cookie correspondem ao banco de dados. Se a correspondência for concluída, o objeto do usuário (ou seja, a marca de login do usuário) será armazenada na sessão para obter login automático.
O código principal é o seguinte:
Login de usuário de manuseio de controladores: 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.httpServletResponse; importar me.gacl.dao.userdao; importar me.gacl.domain.user; importar me.gacl.util.webutils; public class Loginslet Extrends HtTPSetLeSTlet {Public Void Doget (htterpTrPertsTlettlettLeTlettLeStLeStLeStLeStLeStletTetTrPROTSTRPORTS; Servletexception, ioexception {string userName = request.getParameter ("nome de usuário"); String senha = request.getParameter ("senha"); Userdao dao = novo userdao (); Usuário do usuário = dao.find (nome de usuário, senha); if (user == null) {request.setAttribute ("mensagem", "o nome do usuário ou a senha está incorreta !!"); request.getRequestDispatcher ("/message.jsp"). Forward (solicitação, resposta); retornar; } request.getSession (). SetAttribute ("Usuário", usuário); // Envie um cookie de login automático para o navegador do cliente para armazenar sendAutologiCookie (solicitação, resposta, usuário); request.getRequestDispatcher ("/index.jsp"). Forward (solicitação, resposta); } /** * @Method: sendAutoLoginCookie * @Description: Send an automatic login cookie to the client browser* @param request * @param response * @param user */ private void sendAutoLoginCookie(HttpServletRequest request, HttpServletResponse response, User user) { if (request.getParameter("logintime")!=null) { int LogIntime = Integer.ParseInt (request.getParameter ("LogIntime")); // Crie um cookie, o nome do cookie é autólogo, o valor é o nome do usuário e a senha do login do usuário e é usado entre o nome do usuário e a senha. Está dividido. A senha é criptografada pelo MD5. Cookie = novo cookie ("Autologin", user.getUserName () + "." + Webutils.md5 (user.getpassword ())); // Defina o período de validade do cookie cookie.setMaxage (LogIntime); // Defina o caminho válido do cookie cookie.setPath (request.getContextPath ()); // Escreva o cookie para o navegador do cliente Response.addcookie (Cookie); }} public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {doget (solicitação, resposta); }} Filtros que lidam com o Login automático do usuário: AutologinFilter
pacote me.gacl.web.filter; importar java.io.ioException; importar javax.servlet.filter; importar javax.servlet.filterchain; importar javax.servlet.filterconfig; import javax.servlet.sertleStleSception; import javax.servlesslente; javax.servlet.servletResponse; importar javax.servlet.http.cookie; importar javax.servlet.http.httpServletRequest; import javax.ervlet.http.httpsletroponse; importação me.gacl.dao.erDao.UserDao.USAO.USERDAO.USOO.USERDAO.USERDAO.USOO.USERDAO.USERDAO.USERDAO.USOO.USERDAO.URSOO.URSERDAO.URSERDAO.URSOO.URSERDAO.URSOO.URSERDAPO; me.gacl.util.webutils; public class Autologinfilter implementa filtro {public void Dofilter (servletRequest req, servletResponse resp, cadeia de filtragem) lança IoException, servletexception {httpSleTreQuest request = (hTTTleTre -sequest); HttpServletResponse Response = (httpServletResponse) resp; // Se você já fez login, diretamente Chain.Dofilter (request, resposta) libere se (request.getSession (). GetAttribute ("user")! = Null) {Chain.dofilter (solicitação, resposta); retornar; } // 1. Obtenha o cookie do Authlogin trazido pelo Valor da String do Usuário = NULL; Cookies biscoitos [] = request.getCookies (); para (int i = 0; cookies! = null && i <cookies.length; i ++) {if (cookies [i] .getName (). Equals ("autologin")) {value = cookies [i] .getValue (); }} // 2. Obtenha o nome de usuário e a senha no cookie if (value! = Null) {string userName = value.split ("//.") [0]; String senha = value.split ("//.") [1]; // 3. Ligue para o DAO para obter a senha correspondente do usuário userdao dao = new userdao (); Usuário do usuário = dao.find (nome de usuário); String dbpassword = user.getpassword (); // 4. Verifique se a senha do MD5 trazida pelo usuário corresponde à senha no banco de dados. Se corresponder, ele efetuará login automaticamente se (senha.equals (webutils.md5 (dbpassword))) {request.getSession (). SetAttribute ("user", usuário); }} cadeia.dofilter (solicitação, resposta); } public void Destroy () {} public void init (filterConfig filterConfig) lança servletexception {}} Se você deseja cancelar o login automático, poderá excluir o cookie de login automático quando o usuário fizer o login. O código principal é o seguinte:
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.httpServletRequest; importar javax.servlet.http.httpServletResponse; public class CancelAutologInServlet estende httpServLeTL {public Void Doget (httpSleTrequest Solicution, hTTPSEVEXSONGRESSONSTENSOSTENSOSTENSOSTENSOSTENSESTENSOSTENSOSTENSESTENSESTENSESTENSOSTENSESTENSESTENSESTENSESTENSESTENSESTENSESTENSESTENSESTENSESTENSESTENSESTENSESTENSESTENSESTENSOSTEN) request.getSession (). removeattribute ("usuário"); // Remova o cookie que está logado automaticamente no removeautologologiCookie (solicitação, resposta); // Remova para a página de login após o login request.getRequestDispatcher ("/login.jsp"). Forward (solicitação, resposta); } /** * @Method: removeAutoLoginCookie * @Description: Delete the automatic login cookie, * The way to delete the cookie in JavaWeb is to create a new cookie, the newly created cookie has the same name as the cookie to be deleted, * Set the validity period of the newly created cookie to 0, and the valid path is the same as the valid path of the cookie to be deleted* @param solicitação * @param Resposta */Private void removeautologiCookie (solicitação httpServletRequest, resposta httpServletResponse) {// Crie um cookie com o nome Autologin Cookie = novo cookie ("Autologin", "); // Definir o período de validade do cookie e comando e comandos; Cookie.setPath (solicitação.GetContextPath ();Os acima são vários cenários de aplicação comuns de filtros, e espero que eles sejam úteis para o aprendizado de todos.