Tomcat WEB-INF目录下的文件无法直接访问

今天在写一个小项目是遇到一个问题。就是浏览器无法直接访问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方式的跳转来访问的。

转自:
http://blog.csdn.net/jichuang123/article/details/52759819

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值