1、关于 jsp 页面是放在 webroot 目录下和 web-inf 下优缺点/(如何访问 WebRoot 中的 CSS 和 JS 文件)2012-12-20 16:18:43| 分类: JAVA | 标签: web 开发 java |举报|字号 订阅问:jsp 放在 webroot 目录下 这样就可以让用户直接访问,jsp 放在 web-inf 目录下就必须要通过请求才能访问。因此放在 web-inf 下 jsp 页面显得要安全。 既然这样 ,那是不是只要是需要通过请求才可以访问的页面就一定要放在 web-inf 目录下呢还有放在 webroot 和放在 web-inf 目录下都各有什么明显的
2、优缺点 。答 1:通过设置过滤器,放在 webroot 下面的文件也可以实现不能直接访问。所以说放在哪里就看习惯是什么样了。一般项目都是要求隐藏性的,只让客户通过请求访问而不是直接访问 jsp 页面。若放在webroot 下面,肯定要加一个过滤器阻止所有对*.jsp 的访问。只要比较的话:放在 webroot 下面 :优点,程序结构清晰,便于编码和维护;缺点,要加过滤器。放在 web-inf 下面:优点,不用过滤器;缺点,打乱了程序结构,编码和维护麻烦点。答 2:我作个比喻,放 web-inf 下为方法甲,放 webroot 下为方法乙.就像一条河,本来有一个独木桥 ,人容易掉下去.于是甲不走
3、独木桥(不使用 webroot 访问 jsp),只是在边上造一座安全的桥通行(用服务端转发方式访问 jsp).乙说有桥为什么不走,造桥多破坏环境呀 ,他要走独木桥,可是他的做法是先将独木桥踹飞(“加一个过滤器阻止所有对*.jsp 的访问“),再在原地造一座安全的桥通行 (阻止了所有对*.jsp 的访问,必然还需要一个服务端转发方式来访问 jsp 页面)既然都不走独木桥为什么要那么麻烦还去理独木桥?直接另造座桥就好了.桥造在原地和造在边上有什么区别.更何况,两者在转发时的区别只不过是转发 url 中甲比乙多了一个文件夹.入口还不是一样.放在 webroot 下又麻烦 (要针对用户直接访问作一些预
4、防动作)又不安全(一些敏感页面),放在 web-inf 下也不见得打乱了项目文件结构 ,怕和 classes lib 弄混,可以在 web-inf 下创个名为 jsp 的文件夹专放 jsp 文件.直接用模板框架如 freemarker,省了这些个麻烦附言:有关路径问题?关于 JAVA EE 项目在 WEB-INF 目录下的 jsp 页面如何访问 WebRoot 中的 CSS 和 JS 文件在有 Struts 部署的 Java EE 环境中,我们一般把 jsp 页面写在 WebRootWEB-INFcontent 目录下,这样使得 jsp 页面一定需要 struts 的控制转发才可访问,提高页面
5、安全性。但是今天在 jsp 页面中应用 WebRoot 目录中的 css,js 文件发现十分困难,先看看我的文件结构:目标是在 index.jsp 中访问 default.css。defautl.css 是在 index.jsp 目录的父目录的父目录的 CSS 目录下。所以我这样写:ps:空格为故意添加,不知为何会自动变成博客园的网址在 Eclipes 中也出现超链接提示,说明目录正确,但是结果失败。查询资料后,在百度百科中看到:http:/ 服务器下的 WEB-INF 文件夹是一个非常安全的文件,在页面中不能直接访问其中的文件,必须通过 web.xml 文件对要访问的文件进行相应映射才能访问
6、。从上面的实验可以看出,不但是直接访问,使用“ / / “之类的间接访问也不能成功。在此多方查询资料之后,尝试使用如下方法访问:1 2 3 4 原理很简单,变量 path 值为项目根目录,而 css 就是此目录的子目录,自然可以访问。可惜结果还是错,思考之,el 表达式的$是以 page,request,session,application 的顺序寻找匹配的项,而 path 并不在这个范围之内,也许在 java 脚本中直接定义的对象是局部作用域,而不是 page 作用域?可惜百度之后难以找到相关资料,不过结论应该是没错的。既然 EL 表达式无法取出,那么 java 脚本应该可以达到目的吧?尝试如下:1 2 /css/default.css“ rel=“stylesheet“ type=“text/css“/3 /css/uploadify.css“ rel=“stylesheet“ type=“text/css“/果不其然,页面成功读出了 css 文件中的样式,达到目的。不过此页面中存在 java 脚本,不够规范,查询资料后,用以下纯 EL 表达式实现:1 2 3 先将 ContextPath 放如 page 中,再使用 el 表达式取出,问题得以解决。