2017-07-16 48 views
0

我想要解决的问题是,我有一个运行在Tomcat 7上的Web项目,主要是可公开访问的JSP页面,但也有一些JSP页面不打算公开无障碍。这些“私人”页面使用不同的servlet像这样:使JSP可以通过RequestDispatcher访问#仅包括

response.setContentType(...); 
request.getRequestDispatcher("/private/example.jsp").include(request, response); 

我想私人JSP页面是由RequestDispatchaer#include()访问,但不如果客户端导航到例如直接使用/private/example.jsp

的方式,我处理这现在是我从servlet设置一个请求属性:

request.setAttribute("okToAccess", true); 

然后在JSP页面中我检查该属性,如果它没有找到返回一个空文件。这两个缺点是:

  1. 该代码是boiler-platey和恼人的写作。
  2. 通过include分派的Servlet无法修改响应状态/头文件,所以我不能从JSP发回一个403或404,我必须实现稍微复杂的逻辑来让调用的servlet发出错误响应。

我的问题是:是否有一种更简洁的方式来阻止直接访问这些“私人”的JSP,同时仍然让它们与include()一起使用?东西我可以放在web.xml什么的?

回答

1

存储在WEB-INF中的任何内容都不会由Web容器直接提供。将您的私人jsp文件放在该文件夹中,通过servlet强制执行请求。

+0

它将如何在WEB-INF文件夹中编译? –

+0

令人惊叹!我不知道我可以在那里放置任意东西。 –

+0

@TonyBenBrahim我猜它是有效的。我看到有人提到它[这里](https://coderanch.com/t/291403/java/access-jsp-WEB-INF-folder#1332177)。我没有做足够的挖掘来找到官方规格。 –

相关问题