Las cookies, sesiones y filtros generalmente se usan en aplicaciones web. Las cookies y las sesiones se utilizan para guardar ciertos datos. Los filtros de filtro surtan efecto después de que el navegador realiza una solicitud y antes de que el fondo ejecute una solicitud específica. La razón por la cual estos tres se juntan es porque a menudo se combinan, como algunos programas de inicio de sesión .
Las cookies son el mecanismo del navegador, y la sesión es el mecanismo del servidor, pero de hecho, las cookies también son generadas por el servidor y luego son devueltas al navegador, no generadas por el navegador mismo. Cuando un navegador envía una solicitud, reunirá a la cookie si tiene una cookie válida.
Todas las cookies se usan porque el protocolo HTTP es originalmente un protocolo sin estado, lo que significa que a través del protocolo HTTP en sí, el servidor no puede determinar si el navegador ha accedido antes.
Los métodos de escritura de filtro y servlet son similares. Al escribir código relacionado, debe implementar la interfaz de filtro y reescribir los métodos relacionados. Por lo general, el método Dofilter cambia con más frecuencia. Si el código de filtro debe ser efectivo después de escribir, es necesario configurar cierta configuración en Web.xml, como configurar servlets.
Aquí hay un simple código de muestra de inicio de sesión que combina cookies, sesiones, servlets y filtros:
Defina una clase de entidad de usuario para actuar como datos de base de datos. El patrón de singleton se usa aquí para garantizar que solo exista un objeto de instancia:
modelos de paquete; / ** * Clase de entidad de información de usuario * * @author tuzongxun123 * */ public class Usermodel {private String UserName; contraseña de cadena privada; // modo singleton, asegúrese de que solo haya una instancia de objeto de usuario pública estática usermodel getInstance () {usermodel user = new Usermodel ("Zhangsan", "123456"); devolver el usuario; } private usermodel (string username, string contraseña) {this.Username = username; this.password = contraseña; } public String getUsername () {return UserName; } public String getPassword () {return Password; }} Iniciar sesión de usuario en la interfaz index.jsp y use la función JSP en la acción de formulario para obtener la ruta del proyecto:
<%@ page lenguaje = "java" import = "java.util.*" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! DocType html público "-// w3c // dtd html 4.01 Transición // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <fead> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> CookieanDFilterTest </ttitle> </EHY> <form) Action = "< %= request.getContextPath () %>/loginservlet" método = "post"> username: <input type = "text" name = "username"/> </br> contraseña: <input type = "contraseña" name = "contraseña"/> </br> <input type = "Enviar" valor = "login"/> </form> </body> </html>
Servlet de fondo correspondiente:
paquete servlettest; 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; import javax.servlet.http.httpsession; importar modelos.usermodel; LoginServlet de clase pública extiende httpservlet {@Override protegido void doget (httpservletRequest req, httpServletResponse resp) lanza ServletException, ioexception {this.dopost (req, resp); } @Override protegido void dopost (httpservletRequest req, httpservletreSponse resp) lanza ServletException, ioexception {string username = req.getParameter ("username"); Cadena contraseña = req.getParameter ("contraseña"); // simular datos de base de datos userModel user = usermodel.getInstance (); Cadena dbusername = user.getUsername (); Cadena dbpassword = user.getPassword (); if (dbusername.equals (username) && dbpassword.equals (contraseña)) {// tanto el nombre de usuario como la contraseña coinciden, demuestre que el inicio de sesión es exitoso, establece la sesión y cookie httpsession session = req.getSession (); session.SetAttribute ("Nombre de usuario", nombre de usuario); session.SetAttribute ("Password", Password); Cookie cookie = nueva cookie ("nombre de usuario", nombre de usuario); Cookie cookie2 = nueva cookie ("contraseña", contraseña); // Establecer el tiempo de almacenamiento de las cookies Cookie.setMaxage (60); Cookie2.setMaxage (60); // Enviar cookies al navegador resp.addcookie (cookie); resp.addcookie (Cookie2); // reenviar solicitud a la lista de usuarios req.getRequestDispatcher ("/UserList"). Forward (Req, Res); } else {// reenviar solicitud para iniciar sesión en la página req.getRequestDispatcher ("index.jsp"). Forward (req, resp); }; }} Solicitud de saltar después de iniciar sesión:
paquete servlettest; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; importar modelos.usermodel; UserListServlet de clase pública extiende httpservlet {@Override protegido void doget (httpservletRequest req, httpservletreSponse resp) lanza ServletException, ioexception {this.dopost (req, resp); } @Override protegido void dopost (httpservletRequest req, httpservletResponse resp) lanza ServletException, ioexception {usermodel user = usermodel.getInstance (); // Imprima los datos del libro de la lista de usuarios en el navegador resp.getwriter (). Write ("UserName:" + user.getUsername () + "," + "contraseña:" + user.getPassword ()); }} Configuración del proyecto Web.xml:
<? xml versión = "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 "version =" 2.5 "> <!-Nombre del proyecto al acceder-> <Spantname-Name> CookieAndFilterTest </Displaw <Servlet-class> servlettest.loginservlet </servlet-class> </servlet> <ervlet-mapping> <ervlet-mapping> <ervlet-name> login </servlet-name> <url-pattern>/loginservlet </url-Pattern> </servlet-mapping> <ervlet> <ervlet-name> userlist </servlet-name> <servlet-class> servlettest.userListservlet </servlet-class> </servlet> <ervlet-mapping> <ervlet-name> userlist </servlet-name> <url-pattern>/userlist </url-Pattern> </servlet-mapping> <! Configuración de filtro, después de navegar por la solicitud, irá aquí primero- <filter> <filtro >>> nominfilter <filter-class> filtreTest.filterTest </filter-class> </filter> <filter-mapping> <filter-name> loginfilter </filter-name> <url-pattern>/*</sl url-pattern> </filtre-mapping> <! Página predeterminada para acceder al ingresar el nombre del proyecto-> <creantado-file-list> <bellito >-file> index.jsp </-file> </whedle welcome-file </wheday-file </wheday-file- </web-app>
Código de filtro Java:
PAQUETO FILTERTEST; 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.cookie; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; importar modelos.usermodel; Public Class FilterTest implementa Filter {@Override public void Destroy () {} @Override public void dofilter (ServletRequest Solicitue, Respuesta ServLetResponse, FilterChain Chain) lanza IOException, servletException {// httpServletRequest para la solicitud de logina y la solicitud de httpServletRetRetRetRetRetRetRetRetRetRetRetRequest) directamente. HttpservletResponse resp = (httpservletResponse) respuesta; Cadena uri = req.getRequesturi (); if ("/cookieandfiltertest/loginservlet".equals(uri) ||" /cookieandfiltertest/".equals(uri)) {// lanza cadena.dofilter (solicitud, respuesta); devolver; } // Si no es una solicitud de inicio de sesión, determine si hay cookies cookie [] cookies = req.getcookies (); if (cookies! = null && cookies.length> 0) {string username = null; String Password = Null; // Determinar si el nombre de usuario y la contraseña en la cookie son consistentes con la base de datos. Si es consistente, suelte, de lo contrario reenvíe la solicitud a la página de inicio de sesión para (cookie cookie: cookies) {if ("username" .equals (cookie.getName ())) {username = cookie.getValue (); } if ("contraseña" .equals (cookie.getName ())) {contraseña = cookie.getValue (); }} UserModel user = usermodel.getInstance (); if (user.getUsername (). Equals (UserName) && user.getPassword (). Equals (Password)) {Chain.DoFilter (solicitud, respuesta); devolver; } else {// redirigir a la interfaz de inicio de sesión req.getRequestDispatcher ("/index.jsp"). Forward (req, resp); devolver; }} else {req.getRequestDispatcher ("/index.jsp"). Forward (req, resp); devolver; }} @Override public void init (FilterConfig Arg0) lanza ServletException {}}Lo anterior se trata de este artículo, espero que sea útil para todos aprender la programación de Java.