La reescritura de URL es un proceso de agregar o modificar cualquier estructura de URL mientras se carga una página.
La solicitud realizada por el cliente es siempre una nueva solicitud y el servidor no puede identificar si la solicitud actual es enviada por un nuevo cliente o por el mismo cliente anterior. Debido a esta propiedad del protocolo HTTP y los servidores web se denominan sin estado. Pero muchas veces debemos saber quién es el cliente en la solicitud de procesamiento.
Por ejemplo:
en cualquier sitio de redes sociales durante el inicio de sesión hasta el cierre de sesión, el servidor debe saber quién es el cliente para que el servidor pueda administrar todas las requests de acuerdo con las necesidades del usuario.
Este problema lo resuelve Session en Servlet.
Sesión: la sesión es un estado entre el cliente y el servidor y contiene múltiples requests y respuestas entre el cliente y el servidor. Como sabemos que HTTP y el servidor web no tienen estado, la única forma de mantener una sesión es cuando se pasa información única sobre la sesión (id de sesión) entre el servidor y el cliente en cada solicitud y respuesta.
Las siguientes son algunas formas en que podemos proporcionar una identificación única en la solicitud y la respuesta:
Reescritura de URL
Si su navegador no admite cookies, la reescritura de URL le brinda otra alternativa de seguimiento de sesión. La reescritura de URL es un método en el que la URL solicitada se modifica para incluir una ID de sesión. Hay varias formas de realizar la reescritura de URL.
Aquí estamos discutiendo la técnica de gestión de sesiones en la que pasamos el control de un servlet a otro. La sintaxis para pasar el control de un servlet a otro es la siguiente
// SecondServlet is the name of the servlet where you want to pass control out.print("<a href='SecondServlet?uname=" + n + "'>visit</a>");
Nota: Generalmente escribimos un archivo web.xml para el despachador de requests, pero en este ejemplo usamos anotaciones, por lo que no es necesario crear un archivo web.xml.
La sintaxis de la anotación es:
@WebServlet("/ServletName") // at the place of ServletName we have to write the name of our servlet file and this annotation should be written at the starting of class in servlet.
Ejemplo de seguimiento de sesión usando reescritura de URL usando anotación
<!-- Save this file as Index.html --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="FirstServlet" method="get"> Name:<input type="text" name="userName"/><br/> <input type="submit" value="submit"/> </form> </body> </html>
// Name this file as FirstServlet.java package GeeksforGeeks; import java.io.*; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; @WebServlet("/FirstServlet") // annotation // this annotation is used for replacing xml file public class FirstServlet extends HttpServlet { // class name is FirstServlet which extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) { try { response.setContentType("text/html"); /* The response's character encoding is only set from the given content type if this method is called before getWriter is called. This method may be called repeatedly to change content type and character encoding.*/ PrintWriter out = response.getWriter(); /*T he Java PrintWriter class ( java.io.PrintWriter ) enables you to write formatted data to an underlying Writer . For instance, writing int, long and other primitive data formatted as text, rather than as their byte values*/ String n = request.getParameter("userName"); //request.getParameter takes the value from index.html file // where name is username out.print("Welcome " + n); // out.println is used to print on the client web browser //url rewriting is used for creating session // it will redirect you to SecondServlet page out.print("<a href='SecondServlet?uname=" + n + "'>visit</a>"); out.close(); } catch (Exception e) { System.out.println(e); } } }
// Name this file as SecondServlet.java package GeeksforGeeks; import java.io.*; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; @WebServlet("/SecondServlet") // annotation public class SecondServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { try { response.setContentType("text/html"); /* * The response's character encoding is only set from the given * content type if this method is called before getWriter is called. * This method may be called repeatedly to change content type and * character encoding. */ PrintWriter out = response.getWriter(); /* * The Java PrintWriter class ( java.io.PrintWriter ) enables you to * write formatted data to an underlying Writer . For instance, * writing int, long and other primitive data formatted as text, * rather than as their byte values */ // getting value from the query string String n = request.getParameter("uname"); out.print("Hello " + n); /* out.println is used to print on the client web browser */ out.close(); } catch (Exception e) { System.out.println(e); } } }
Program flow
Explicación (siga el diagrama)
Cuando implementa su proyecto en eclipse, la primera página que se carga en el formulario HTML cuya acción de formulario es el primer servlet, por lo que el control irá a servlet1. En este caso, llamamos servlet1 como FirstServlet donde se imprime el nombre de usuario. En FirstServlet proporcionamos url donde transferimos el control a servlet2 usando la reescritura de url. En nuestro caso llamamos servlet2 como SecondServlet.
Ventaja de la reescritura de URL:
- No depende de las cookies y funcionará ya sea que las cookies estén habilitadas o deshabilitadas.
- No se requiere el envío de formularios adicionales en todas las páginas
Desventaja de la reescritura de URL
Funcionará solo con enlaces y el anuncio solo puede enviar texto
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA