下面的URL,所选答案中的第一个内容描述了JSP隐藏。
Hidden features of JSP/Servlet
我到目前为止了解到我可以将jsp文件放在/ WEB-INF目录下。这样它就可以阻止用户直接访问http://test.com/WEB-INF/register.jsp
(返回404)
我以为我理解但不想并且想要更好地描述,所以我在这里提出问题。
我有,比如下面的2个jsp文件。
的webapps / ROOT /针对home.jsp
的webapps / ROOT / WEB-INF / register.jsp
注意:/go_register
映射到web.xml(DD)中的servlet类Register
针对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>
所以..因为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);
}
}
但这看起来不对。如果我想将登录页面/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);
}
}
我想我正在以错误的方式使用这项技术。任何人都可以解释如何使用这个jsp隐藏吗?
答案 0 :(得分:4)
你有一个Servlet在doPost()
方法中执行登录任务吗?你可以向它添加必要的doGet()
:)
顺便说一句,我只会将Register
servlet映射到url-pattern
这样的/register
,以便您可以在<a href="/register">
中使用它(将调用{ {1}}方法)和doGet()
(将调用<form action="/register" method="post">
方法),而不需要两个servlet映射。
为了更进一步,您可以将这一切重构为一个servlet,该servlet根据请求URL采取相应的操作。如您所见,有一些代码重复可以被抽象掉。通常,这是由Struts2,Spring-MVC,JSF2等MVC框架完成的,但您也可以自己创建一个基本框架。更多详细信息和代码示例可以在this answer中找到。
答案 1 :(得分:1)