今天在写一个小项目是遇到一个问题。就是浏览器无法直接访问Tomcat WEB-INF目录下的文件。
项目如下:
其中index.jsp代码如下:
<body>
<jsp:forward page="/WEB-INF/Interface.jsp"></jsp:forward>
</body>
Interface.jsp有一个表单,其action的url原意是想调到Result.jsp。
<body>
<form action="/MyCalc/WEB-INF/Result.jsp" method="post">
...
</form>
</body>
当浏览器访问Result.jsp时,无法正常显示,通过了解才得知,原来Tomcat WEB-INF目录下的文件,浏览器一般无法直接方法,只能通过重定向后才可以访问,如果需要直接访问,可以放在和WEB-INF同级目录下。
下面是网上有关此问题的讨论:
CSDN问题:
jsp放在webroot目录下 这样就可以让用户直接访问,jsp放在web-inf目录下就必须要通过请求才能访问。
因此放在web-inf下jsp页面显得要安全。
既然这样 ,那是不是只要是需要通过请求才可以访问的页面就一定要放在web-inf目录下呢
还有放在webroot和放在web-inf目录下都各有什么明显的优缺点 。
望大家讨论…
1楼:
通过设置过滤器,放在webroot下面的文件也可以实现不能直接访问。所以说放在哪里就看习惯是什么样了。
一般项目都是要求隐藏性的,只让客户通过请求访问而不是直接访问jsp页面。若放在webroot下面,肯定要加一个过滤器阻止所有对*.jsp的访问。只要比较的话:
放在webroot下面:优点,程序结构清晰,便于编码和维护;缺点,要加过滤器。
放在web-inf下面:优点,不用过滤器;缺点,打乱了程序结构,编码和维护麻烦点。
其实二者没啥大区别,个人倾向于放在webroot下面
2楼:
放web-inf干嘛,web-inf一般都是用来放不允许用户访问到的东西吧,JSP本来就是用于访问的,感觉像是一个private的interface一样…,又是让人调又隐藏…
3楼:
问题是jsp里面内容都是要通过请求才能获取的 那如果放在webroot下 直接访问的话 页面就空空如也了 或者直接报错
4楼:
一、加个过滤器并不麻烦,而且加上后就可以永远不用再管了。
二、放在WEB-INF下面,首先从理解上就很别扭,然后WEB-INF下面通常有很多文件,开发过程中从里面寻找一个文件或文件夹是很不方便的。
http://bbs.csdn.net/topics/320097731
为了减少风险,可以把这些页面文件移到
WEB-INF
目录下。基于
Servlet
的声明,
WEB-INF
不作为
Web
应用的公共文档树的一部分。因此,
WEB-INF
目录下的资源不是为客户直接服务的。我们仍然可以使用
WEB-INF
目录下的
JSP
页面来提供视图给客户,客户却不能直接请求访问
JSP
。
JSP
存放在
WEB-INF
目录下更为安全
如果把这些JSP页面文件移到WEB-INF 目录下,在调用页面的时候就必须把”WEB-INF”添加到URL中。
我们知道,实现页面的跳转有两种方式,一种是通过redirect的方式,一种是通过forward的方式。redirect方式的跳转,系统会在一个新的页面打开要跳转的网页;而forward方式跳转,系统会在原来的页面上打开一个要跳转的网页。
所以放到
WEB-INF
目录下的文件是不允许采用redirect方式的跳转来访问的