2010-09-16 15 views
5

La siguiente URL, el primer contenido en la respuesta elegida describe la ocultación de JSP.Ocultar la página JSP del acceso directo, pero ¿cómo se accede a la página objetivo?

Hidden features of JSP/Servlet

que hasta ahora entiendo que puedo poner archivos JSP en el directorio/WEB-INF. De modo que evita que un usuario tenga acceso directo, como http://test.com/WEB-INF/register.jsp (return 404)

Pensé que entendía pero no y quiero describir mejor, así que estoy abriendo la pregunta aquí.

Tengo, digamos, 2 archivos jsp como a continuación.

webapps/ROOT/home.jsp

webapps/ROOT/WEB-INF/register.jsp

NOTA: /go_register se asigna a la clase servlet en web.xml Register (DD)

home.jsp

<html> 
<body> 
    <a href="/go_register">Go to register.jsp</a> 
<body> 
</html> 

register.jsp

<html> 
<body> 
    <form method="post" action="/process_register"> 
    <input type="submit"> 
</form> 
<body> 
</html> 

Así que .. ya register.jsp reside en/WEB-INF /, solamente RequestDispatcher puede acceder a ella. Eso significa que necesito crear servlet para reenviar la solicitud.

public class Register extends HttpServlet { 

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String address = "/WEB-INF/register.jsp"; 
     request.getRequestDispatcher(address).forward(request, response); 
    } 
} 

Pero esto no se ve bien. Si deseo agregar la página de inicio de sesión /WEB-INF/login.jsp a home.jsp, para acceder al login.jsp, tengo que crear otro servlet solo para ir a la página de inicio de sesión propósito? ??

public class Login extends HttpServlet { 

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String address = "/WEB-INF/login.jsp"; 
     request.getRequestDispatcher(address).forward(request, response); 
    } 
} 

Creo que estoy usando la técnica de la manera incorrecta. ¿Alguien podría explicar cómo usar este escondite jsp?

Respuesta

4

¿Tiene un servlet que realiza la tarea de inicio de sesión en el método doPost()? Se podía añadir el necesario doGet() a ella :)

Por cierto, me acaba de trazar el servlet Register en una sola url-pattern como /register de manera que se puede usar tanto en <a href="/register"> (que se llame doGet() método) y <form action="/register" method="post"> (que llamará al método doPost()) sin necesidad innecesaria de dos asignaciones de servlets.

Para ir un paso más allá, puede refactorizar todo esto en un solo servlet que tome las medidas correspondientes en función de la URL de solicitud. Como ve, hay alguna repetición de código que puede abstraerse. Normalmente, esto se debe hacer mediante un marco MVC como Struts2, Spring-MVC, JSF2, etc., pero también puede crear uno básico. Más detalles y ejemplos de código se pueden encontrar en this answer.

+0

Patrón de controlador frontal parece ser el camino a seguir para mis necesidades. Pensé en centralizar el punto de entrada, pero nunca pensé en tales patrones, ¡gracias por el enlace! –

1

Sí, eso es correcto. Usualmente es más fácil usar un marco, como puntales o resortes.

+1

Creo que usar Framework sería más fácil como dijiste, pero no estoy usando ningún framework, así que necesitaba algo para escribirme, gracias por la sugerencia. –

Cuestiones relacionadas