Cookies, sessões e filtros geralmente são usados em aplicativos da Web. Cookies e sessões são usados para salvar determinados dados. Os filtros de filtro entram em vigor depois que o navegador faz uma solicitação e antes que o plano de fundo execute uma solicitação específica. A razão pela qual esses três são reunidos é porque geralmente são combinados, como alguns programas de login .
Os cookies são o mecanismo do navegador, e a sessão é o mecanismo do servidor, mas, de fato, os cookies também são gerados pelo servidor e são devolvidos ao navegador, não gerados pelo próprio navegador. Quando um navegador envia uma solicitação, ele reunirá o cookie se tiver um cookie válido.
Todos os cookies são usados porque o protocolo HTTP é originalmente um protocolo sem estado, o que significa que, através do próprio protocolo HTTP, o servidor não pode determinar se o navegador já o acessou antes.
Os métodos de escrita de filtro e servlet são semelhantes. Ao escrever código relacionado, você precisa implementar a interface do filtro e reescrever os métodos relacionados. Geralmente, o método Dofilter é alterado com mais frequência. Se o código do filtro precisar ser eficaz após a escrita, será necessário configurar determinada configuração no web.xml como a configuração de servlets.
Aqui está um código de amostra de login simples que combina cookies, sessões, servlets e filtros:
Defina uma classe de entidade do usuário para atuar como dados do banco de dados. O padrão Singleton é usado aqui para garantir que apenas um objeto de instância exista:
modelos de pacotes; / ** * Classe de entidade de informações do usuário * * @Author TUZONGXUN123 * */ public class Usermodel {private String UserName; senha de sequência privada; // Modo Singleton, verifique se há apenas uma instância do objeto de usuário public static usermodel getInstance () {userModel user = new UserModel ("zhangsan", "123456"); devolver usuário; } private UserModel (String UserName, String senha) {this.username = nome de usuário; this.password = senha; } public string getUserName () {return userName; } public string getPassword () {return senha; }} Faça o login do usuário na interface index.jsp e use o recurso JSP na ação do formulário para obter o caminho do projeto:
<%@ Page Language = "Java" import = "java.util. "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> bookieAndfilterstest <// Action = "< %= request.getContextPath () %>/logInservlet" Method = "post"> Nome de usuário: <input type = "text" name = "nome de usuário"/> </br> senha: <input type = "sevent" name = "senha"/> </br> <input = "submit" value = "Login"/>
Servlet de fundo correspondente:
pacote servlettest; importar java.io.ioException; importar javax.servlet.servletexception; importar javax.servlet.http.cookie; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; importar javax.servlet.http.httpSession; Models.Usermodel de importação; classe pública LogInservlet estende httpServlet {@Override Protected Void Doget (httpServletRequest req, httpServletResponse resp) lança servletexception, ioexception {this.doPost (req, resp); } @Override Protect DoPost protegido (httpServletRequest req, httpServletResponse resp) lança servletexception, ioexception {string userName = req.getParameter ("nome de usuário"); String senha = req.getParameter ("senha"); // simular dados do banco de dados UserModel User = UserModel.getInstance (); String dbuserName = user.getUserName (); String dbpassword = user.getpassword (); if (dbusername.equals (nome de usuário) && dbpassword.equals (senha)) {// o nome do usuário e a senha correspondem, prove que o login é bem -sucedido, defina sessão e cookie httpSession session = req.getSession (); session.setAttribute ("nome de usuário", nome de usuário); session.setAttribute ("senha", senha); Cookie Cookie = novo cookie ("Nome de usuário", nome de usuário); Cookie cookie2 = novo cookie ("senha", senha); // Defina o tempo de armazenamento dos cookies cookie.setMaxage (60); Cookie2.SetMaxage (60); // Envie cookies para o navegador resp.addcookie (cookie); resp.addcookie (Cookie2); // solicitação encaminhada para a lista de usuários req.getRequestDispatcher ("/userlist"). Forward (req, resp); } else {// solicitação encaminhada para o login página req.getRequestDispatcher ("index.jsp"). Forward (req, resp); }; }} Solicitar para pular após o login:
pacote servlettest; importar java.io.ioException; importar javax.servlet.servletexception; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; Models.Usermodel de importação; classe pública UserListServlet estende httpServlet {@Override Protected Void Doget (httpServletRequest req, httpServletResponse resp) lança servletexception, ioexception {this.dopost (req, resp); } @Override Protected void DoPost (httpServletRequest req, httpServletResponse resp) lança servletexception, ioexception {userModel user = userModel.getInstance (); // Imprima os dados do livro da lista de usuários no navegador resp.getWriter (). Write ("Nome de usuário:" + user.getUserName () + "," + "senha:" + user.getpassword ()); }} Projeto Web.xml Configuração:
<?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" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "id =" webApp_id "versão" 2.5 "> <!-Nome do projeto ao acessar-> <lor-name> cookieeandfiltertest </servirname> <!-servlet- <Verlet-class-Class> servlettest.loginservlet </Servlet-Class> </Servlet> <Servlet-Mapping> <Servlet-Mapping> <Servlet-Name> Login </Servlet-Name> <url-Pattern>/Loginservlet </url-Pattern> </Servlet--Mapping> <Verlet> <ervlet> </servlet-class> </servlet> <Servlet-mapping> <Servlet-name> userlist </servlet-name> <url-pattern>/userlist </url-tattern> </servlet-mapping> <!-filtro, depois que o Solicitação de Filtro> <filter-class> filtertest.filtertest </filter-Class> </filter> <filter-mapping> <filter-name> loginfilter </ftrhter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-Página padrão para entrar no nome do projeto- </web-app>
Código do filtro Java:
pacote filtrotest; importar java.io.ioException; importar javax.servlet.filter; importar javax.servlet.filterchain; importar javax.servlet.FilterConfig; importar javax.servlet.servletexception; importar javax.servlet.servletRequest; importar javax.Servlet.ServletResponse; importar javax.servlet.http.cookie; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; Models.Usermodel de importação; public class filtertest implementa filtro {@Override public void Destroy () {} @Override public void Dofilter (Solicitação de servletRequest, resposta servletResponse, cadeia de filtragem) lança ioexception, solicitação de servleTExceptle {// libere diretamente httpsleTrequest para o login solicitando e o hTServPexception {// libere httpSleTrequest para o login e o hTServScept. HttpServletResponse resp = (httpServletResponse); String uri = req.getRequesturi (); if ("/cookieeandfiltertest/loginservlet".equals(uri) ||" /cookieeandfiltertest/".equals(uri)) {// libera cadeia.dofilter (solicitação, resposta); retornar; } // Se não for uma solicitação de login, determine se existem cookies cookie [] cookies = req.getcookies (); if (cookies! = null && cookies.length> 0) {string userName = null; String senha = null; // Determine se o nome do usuário e a senha no cookie são consistentes com o banco de dados. Se for consistente, solte -o, encaminhe a solicitação para a página de login para (Cookie Cookie: Cookies) {if ("UserName" .equals (cookie.getName ())) {nome de usuário = cookie.getValue (); } if ("senha" .equals (cookie.getName ())) {senha = cookie.getValue (); }} UserModel User = UserModel.getInstance (); if (user.getUserName (). Equals (nome de usuário) && user.getpassword (). igual (senha)) {Chain.dofilter (solicitação, resposta); retornar; } else {// redireciona para a interface de login req.getRequestDispatcher ("/index.jsp"). Forward (req, resp); retornar; }} else {req.getRequestDispatcher ("/index.jsp"). Forward (req, resp); retornar; }} @Override public void init (filterConfig arg0) lança servletexception {}}O exposto acima é tudo sobre este artigo, espero que seja útil para todos aprenderem a programação Java.