WebRoot META-INF WEB-INF 区别

/WEB-INF/web.xml

Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。

 /WEB-INF/classes/
包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中。
 /WEB-INF/lib/
存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件。

 /WEB-INF/src/
 源码目录,按照包名结构放置各个Java文件。

 /WEB-INF/database.properties
 数据库配置文件

 /WEB-INF/tags/

存放了自定义标签文件,该目录并不一定为 tags,可以根据自己的喜好和习惯为自己的标签文件库命名,当使用自定义的标签文件库名称时,在使用标签文件时就必须声明正确的标签文件库路径。例如:当自定义标签文件库名称为 simpleTags 时,在使用 simpleTags 目录下的标签文件时,就必须在 jsp 文件头声明为:<%@ taglibprefix="tags" tagdir="/WEB-INF /simpleTags" % >。

/WEB-INF/jsp/

jsp 1.2 以下版本的文件存放位置。改目录没有特定的声明,同样,可以根据自己的喜好与习惯来命名。此目录主要存放的是 jsp 1.2 以下版本的文件,为区分 jsp 2.0 文件,通常使用 jsp 命名,当然你也可以命名为 jspOldEdition 。

/WEB-INF/jsp2/

与 jsp 文件目录相比,该目录下主要存放 Jsp 2.0 以下版本的文件,当然,它也是可以任意命名的,同样为区别 Jsp 1.2以下版本的文件目录,通常才命名为 jsp2。

META-INF

相当于一个信息包,目录中的文件和目录获得Java 2平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务
 manifest.mf文件,在用jar打包时自动生成。

以下转载至 http://blog.csdn.net/saygoodbyetoyou/article/details/9944773

请求页面为何要放到META-INF目录下

观点一:(较为赞同)
安全性不是真正的原因,因为jsp是要解析后才显示到浏览器的,即使用户知道你jsp的路径,也不可能通过浏览器看到jsp源码的,而如果是通过其它手段入侵服务器的话,放在WEB-INF又和放在别的地方有什么区别呢???
真正的原因是,对于早期直接嵌入Java代码的jsp,是直接给出jsp路径给用户访问的,这种情况恰恰不能放在WEB-INF,而到了现在的mvc模式,jsp已经不是曾经那个包含完整逻辑的jsp,而仅仅充当view层的模板,必须要填入model数据后进行渲染,才能生成可读的页面,这样的模板是不能让用户直接访问的,直接访问的话要么是一堆各种空白,或者一堆占位符,甚至一堆NullPointException,所以需要放到WEB-INF里。补充一下,“安全性问题”指的是“不允许你访问,否则会对我不好”,而这里的情况其实是“不建议你访问,否则会对你不好”,应该属于健壮性的范畴。
观点二:
  放到WEB-INF下的Jsp文件,如果你直接去访问这个Jsp是不可以的,必须通过Action的跳转,这样就能够理解为什么安全性高了,对于用户是不可见的,对于一些对于用户,可以直接访问的,如,登录,注册页面,可以直接放在webroot下,这个也是根据你系统的需求了。
观点三:
通过设置过滤器,放在webroot下面的文件也可以实现不能直接访问。所以说放在哪里就看习惯是什么样了。
一般项目都是要求隐藏性的,只让客户通过请求访问而不是直接访问jsp页面。若放在webroot下面,肯定要加一个过滤器阻止所有对*.jsp的访问。只要比较的话:
放在webroot下面:优点,程序结构清晰,便于编码和维护;缺点,要加过滤器。
放在web-inf下面:优点,不用过滤器;缺点,打乱了程序结构,编码和维护麻烦
观点四:
为了减少风险,可以把这些页面文件移到WEB-INF 目录下。基于Servlet的声明,WEB-INF不作为Web应用的公共文档树的一部分。因此,WEB-INF 目录下的资源不是为客户直接服务的。我们仍然可以使用WEB-INF目录下的JSP页面来提供视图给客户,客户却不能直接请求访问JSP。JSP存放在 WEB-INF 目录下更为安全

------------------------------------------------------------------------------------------------

今天同事提了个问题:说我们项目的page目录为什么是放在webroot下面的,而不是web-inf下,因为放在web-inf 下比较安全,只能通过action,跳转来访问,不能直接在地址上访问jsp内容。后来说放在webroot下面也是可以的,只要加一个过滤器,过滤掉所有后缀为.jsp的请求就行了。

上网看了一下,也是这种说法,而且文件夹目录放在web-inf下不好分层,web-inf下一般是很少打开和是使用的东西,存放着用户获取不到的东西。放在这个目录下面比较麻烦。

还不如放在根目录下,然后加一个过滤器一了百了,我也觉得这样挺好。

---------------------------------------------------------------------------------------------------

其实到最后也找不出META-INF是做什么用的,也很少有详细的解释,百度估计找不出我想要的答案了。至于文件放在webroot下还是web-inf下。   

webroot用户可以直接访问,但是这样安全性缺失,需要加过滤器。

web-inf用户无法直接访问。需要通过action映射访问。

有一个疑问,如果两个jsp放在web-inf中通过a标签跳转,不通过action。那么可以成功跳转吗?    

接上,试验过 不可以。

-------------------------------------------补充以上-------------------------------------------------

经过测试,在webroot和web-inf下放同名的jsp文件。

如果直接访问,访问的是webroot下的。(这个是正常的,web-inf原先就不允许直接访问jsp).

如果通过跳转,那么访问的就是web-inf下的,这个就不明白了。应该是通过action一手,会优先找web-inf下的jsp文件吧。

猜你喜欢

转载自blog.csdn.net/a4171175/article/details/82947308
今日推荐