隐藏直接访问JSP页面,但是如何访问目标页面?

mas*_*san 5 java jsp servlets hide

下面的URL,所选答案中的第一个内容描述了JSP隐藏.

JSP/Servlet的隐藏功能

我到目前为止了解到我可以将jsp文件放在/ WEB-INF目录下.这样就可以防止用户直接访问http://test.com/WEB-INF/register.jsp(返回404)

我以为我理解但不想并且想要更好地描述,所以我在这里提出问题.

比方说,我有2个jsp文件.

web应用/ ROOT /针对home.jsp

web应用/ ROOT/WEB-INF/register.jsp

注意:/go_register映射到Registerweb.xml(DD)中的servlet类

针对home.jsp

<html>
<body>
  <a href="/go_register">Go to register.jsp</a>
<body>
</html>
Run Code Online (Sandbox Code Playgroud)

register.jsp

<html>
<body>
  <form method="post" action="/process_register">
  <input type="submit">
</form>
<body>
</html>
Run Code Online (Sandbox Code Playgroud)

所以..因为register.jsp位于/ WEB-INF /下,所以只有RequestDispatcher可以访问它.这意味着我需要创建用于转发请求的servlet.

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但这看起来不对.如果我想将登录页面/WEB-INF/login.jsp添加到home.jsp,为了访问login.jsp,我必须创建另一个servlet 只是为了进入登录页面目的 ???

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想我正在以错误的方式使用这项技术.任何人都可以解释如何使用这个jsp隐藏?

Bal*_*usC 4

您确实有一个 Servlet 在doPost()方法中执行登录任务吗?您只需添加必要的内容即可doGet():)

顺便说一句,我只是将Registerservlet 映射到单个url-patternlike上/register,以便您可以在<a href="/register">(将调用doGet()方法)和<form action="/register" method="post">(将调用doPost()方法)中使用它,而无需不必要的两个 servlet 映射。

为了更进一步,您可以将这一切重构为单个 servlet,该 servlet 根据请求 URL 采取相应的操作。正如您所看到的,有一些代码重复可以被抽象掉。通常,这是由 Struts2、Spring-MVC、JSF2 等 MVC 框架来完成的,但您也可以自己创建一个基本框架。更多细节和代码示例可以在这个答案中找到。