1、为了减少风险,可以把页面文件移到WEB-INF目录下,WEB-INF目录是不对外开放的,外部没办法直接访问到,所有只能通过映射来访问,比如映射为一个action或者Servlet通过服务器端跳转来访问到具体的页面。这样可以限制访问,提高安全性。基于Servlet的声明,WEB-INF不作为Web应用的公共文档树的一部分。WEB-INF是Java的WEB应用的安全目录,所谓安全就是客户端无法访问,只有服务端可以访问的目录。

2、首先,对于外部访问来说,web-inf下的文件都是不可见的(即不能通过url获得web-info下的任何文件),所以,直接访问jsp是不可能的。这要从web-inf文件夹的作用说起:
WEB-INF的存在以及其下的lib和classes目录的作用都是jsp规定的,主要是系统运行的配置信息和环境,用来存储服务端配置文件信息和在服务端运行的类文件,它下面的东西不允许客户端直接访问的,这是jsp环境的规定。
而我们通常是使用view层框架(如struts)来提供jsp服务,此时,我们可以将jsp文件放到web-inf下避免客户直接访问到页面,同时使用struts来进行jsp文件提取,并将编译好的结果发送到客户端。

3、看见个挺有意思的比喻。

就像一条河,本来有一个独木桥,人容易掉下去. 
于是甲不走独木桥(不使用webroot访问jsp),只是在边上造一座安全的桥通行(用服务端转发方式访问jsp). 
乙说有桥为什么不走,造桥多破坏环境呀,他要走独木桥,可是他的做法是先将独木桥踹飞("加一个过滤器阻止所有对*.jsp的访问"),再在原地造一座安全的桥通行(阻止了所有对*.jsp的访问,必然还需要一个服务端转发方式来访问jsp页面) 
既然都不走独木桥为什么要那么麻烦还去理独木桥?直接另造座桥就好了.桥造在原地和造在边上有什么区别.更何况,两者在转发时的区别只不过是转发url中甲比乙多了一个文件夹.入口还不是一样. 
放在webroot下又麻烦(要针对用户直接访问作一些预防动作)又不安全(一些敏感页面),放在web-inf下也不见得打乱了项目文件结构,怕和classes lib弄混,可以在web-inf下创个名为jsp的文件夹专放jsp文件. 
直接用模板框架如freemarker,省了这些个麻烦~

4、

附言:有关路径问题?
关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件

在有Struts部署的Java EE环境中,我们一般把jsp页面写在WebRoot\WEB-INF\content 目录下,这样使得jsp页面一定需要struts的控制转发才可访问,提高页面安全性。

但是今天在jsp页面中应用WebRoot目录中的css,js文件发现十分困难,先看看我的文件结构:

目标是在index.jsp中访问default.css。

defautl.css是在index.jsp目录的父目录的父目录的CSS目录下。所以我这样写:

ps:空格为故意添加,不知为何会自动变成博客园的网址

        <link href="../ ../css/default.css" rel="stylesheet" type="text/css"/><link href="../ ../css/uploadify.css" rel="stylesheet" type="text/css"/>

在Eclipes中也出现超链接提示,说明目录正确,但是结果失败。

查询资料后,在百度百科中看到:

http://baike.baidu.com/view/1745468.htm

 TomCat 服务器下的WEB-INF文件夹是一个非常安全的文件,在页面中不能直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。

从上面的实验可以看出,不但是直接访问,使用" ../ ../ "之类的间接访问也不能成功。

在此多方查询资料之后,尝试使用如下方法访问:

1         <!-- 输出为项目根目录,即WebRoot -->
2         <%String path = request.getContextPath(); %>
3         <link href="${path}/css/default.css" rel="stylesheet" type="text/css"/>
4         <link href="${path}/css/uploadify.css" rel="stylesheet" type="text/css"/>

原理很简单,变量path值为项目根目录,而css就是此目录的子目录,自然可以访问。

可惜结果还是错,思考之,el表达式的${}是以page,request,session,application的顺序寻找匹配的项,而path并不在这个范围之内,也许在java脚本中直接定义的对象是局部作用域,而不是page作用域?可惜百度之后难以找到相关资料,不过结论应该是没错的。

既然EL表达式无法取出,那么java脚本应该可以达到目的吧?尝试如下:

1         <%String path = request.getContextPath(); %>
2         <link href="<%=path %>/css/default.css" rel="stylesheet" type="text/css"/>
3         <link href="<%=path %>/css/uploadify.css" rel="stylesheet" type="text/css"/>

果不其然,页面成功读出了css文件中的样式,达到目的。不过此页面中存在java脚本,不够规范,查询资料后,用以下纯EL表达式实现:

1         <c:set value="${pageContext.request.contextPath}" var="path" scope="page"/>
2         <link href="${path}/css/default.css" rel="stylesheet" type="text/css"/>
3         <link href="${path}/css/uploadify.css" rel="stylesheet" type="text/css"/>

先将ContextPath放如page中,再使用el表达式取出,问题得以解决

3、4 引用自:http://iteye.blog.163.com/blog/static/186308096201211204421565/

WebRoot 与 WEB-INF 相关问题学习整理相关推荐

  1. 整理了 25 个前端相关的学习网站和一些靠谱的小工具,都来看看吧

    给大家整理了 25 个前端相关的学习网站和一些靠谱的小工具,包括一些小游戏.教程.社区网站和博客,以及一些资源网站,希望可以帮助到大家! CSS 相关 1.CSS Battle - 在线比拼 CSS ...

  2. amazeui学习笔记一(开始使用4)--Web App 相关

    amazeui学习笔记一(开始使用4)--Web App 相关 一.总结 1.桌面图标(Touch icon)解决方案:终极方案:link标签的rel和href属性: <link rel=&qu ...

  3. 最详细的SQL注入相关的命令整理

    最详细的SQL注入相关的命令整理   QUOTE: 1.   用^转义字符来写ASP(一句话***)文件的方法: ?   http://192.168.1.5/display.asp?keyno=18 ...

  4. ACM竞赛学习整理开篇之01背包问题

    ACM竞赛学习整理开篇之01背包问题. 最近,偶然的一次机会让我关注信息奥赛的一些内容.发现其中的内容很有趣,是学习编程的一条很好的路径,又能很好地将数学和编程联系到一起.在csdn里看到了不少同好也 ...

  5. mybitsplus的idworker应java什么类型_MyBatisPlus学习整理(一)

    本文是通过慕课网相关课程学习MyBatisPlus整理的笔记. MyBatisPlus入门 : - ) 老师讲的挺好的,还不会MyBatisPlus的小伙伴门可以听一下. MyBatisPlus官网 ...

  6. 推荐系统相关顶会整理

    推荐系统相关顶会整理算法工程师是否应该持续读论文?\x0d\x0a\x0d\x0a尤其是对于业务属性偏重的搜索/推荐/广告算法岗位,很多人的工作主要涉及业务理解以及数据清洗,对于模型的优化以及新模型的 ...

  7. 2022最新Web方面相关面试题解析(已拿Offer)

    Web方面相关: 291.WEB应用中如果有.class和.jar类型的文件一般分别应该放在什么位置? 答:.class文件放在WEB-INF/classes文件下,.jar文件放在WEB-INF/l ...

  8. 各种开发测试相关免费学习书籍

    https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh.md 免 ...

  9. Web前端入门的学习路线总结

    想要学习web前端,前期一定要做好学习路线,下面是小编整理的Web前端入门的学习路线总结,希望正在从事Web前端工作的小伙伴们来和小编一起看一看吧,希望本篇文章能够对大家有所帮助. Web前端入门的学 ...

  10. web前端开发入门学习线路图详解-2019升级版

    现如今,Web前端工程师已经成为各大互联网公司不可或缺的热门职位,从业者队伍日渐庞大,这其中不乏零基础学习者和转行人士.为了方便大家系统而全面的掌握前端基础知识,千锋小编特意整理了web前端开发入门学 ...

最新文章

  1. 日志多租户架构下的Loki方案
  2. 定时分量和直流分量_直流电机效率测试的计算与纹波因数及波形因数的计算
  3. ubuntu修改u盘权限_Ubuntu下提示U盘没有些权限的只能读不能写
  4. 基于RDP开源许可rdesktop基本介绍
  5. java io字符输出流_Java字符输入输出流
  6. jQuery——插入元素节点的方法
  7. centos7 安装git_Gitlab安装及使用
  8. python从字符串中提取数字并转换为相应数据类型_python从PDF中提取数据的示例
  9. win下修改anaconda的jupyter notebook默认打开路径
  10. 深度强化学习DQN(Deep Q Network)原理及例子:如何解决迷宫问题,附源码
  11. lily+Solr 原理与配置
  12. W5500以太网控制器芯片(五):实现FTP客户端
  13. Adreno GPU上Android 游戏开发介绍 (3)
  14. 架构 理论 定律 总结
  15. 《哪来的天才-练习中的平凡与伟大》阅读笔记与心得
  16. 如何快速将MKV格式转换成MP4高清电影格式?
  17. quartus II编译报错:Error: Current license file does not support the XXX device 环境win10,Quartus2出现破解问题
  18. linux显示mem进行排序,linux下top命令显示详解
  19. 单元测试用例 php,PHP 单元测试(PHPUnit)(2)
  20. JavaScript 习题及面试题 4

热门文章

  1. 网站能使用微软雅黑字体吗?是否会构成侵权?微软雅黑有版本吗?
  2. 日常工作记录---在虚拟机中进行slam建图
  3. 【JZOJ A组】东风谷早苗
  4. Springboot连接Redis超时问题解决
  5. Latex中的括号用法总结
  6. Linux学习第一节课
  7. c语言:从键盘输入两个正整数,求其最大公约数和最小公倍数
  8. 树莓派3b+指南(二十二)暴力解决默认声卡设置失效问题
  9. 科普一下SM系列国密算法(从零开始学区块链)
  10. ESP32S 数据手册