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

  • Post author:
  • Post category:其他


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



版权声明:本文为jichuang123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。