Tomcat WEB-INF目录下的文件无法直接访问
2016-10-08 19:39
344 查看
今天在写一个小项目是遇到一个问题。就是浏览器无法直接访问Tomcat WEB-INF目录下的文件。
项目如下:
其中index.jsp代码如下:
Interface.jsp有一个表单,其action的url原意是想调到Result.jsp。
当浏览器访问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方式的跳转来访问的
项目如下:
其中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方式的跳转来访问的
相关文章推荐
- Tomcat WEB-INF目录下的文件无法直接访问
- SpringBoot WEB-INF目录下文件无法访问一种解决方案
- 关于WEB-INF目录下无法访问webapp下的css等静态文件
- 关于WEB-INF目录下无法访问webapp下的css等静态文件
- 访问web.inf文件.....关于访问html静态文件的tomcat原理解析.....
- 关于jsp页面是放在webroot目录下和web-inf下优缺点/(如何访问WebRoot中的CSS和JS文件)
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- 访问WEB-INF目录下的jsp文件
- Apache+Tomcat整合后 禁止访问 WEB-INF目录
- Eclipse下无法自动编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法
- jsp中访问WEB-INF目录下的文件
- 访问WEB-INF目录中的JSP文件
- WEB-INF目录下的文件之间如何访问
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- jsp访问WEB-INF目录下面的jsp文件
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- Eclipse下无法编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法
- 关于jsp页面是放在webroot目录下和web-inf下优缺点/(如何访问WebRoot中的CSS和JS文件)