本人之前看过很多论坛关于这点的讨论,我也考虑了很多情况,也苦恼了一阵,最后还是偶然的机会看到一个别的话题才得到的正解。
关于论坛关于这个得争论,主要可以用一句话来概括。
jsp放在外面-------简洁,方便
jsp放在里面-------安全,麻烦
当时我看了很多论坛,也没有真正的剖析明白。最经典的一个说法是这样的,说为了防止直接通过浏览器访问jsp,我们把jsp放在web-inf下,但是这样的话,对于页面之间的跳转,尤其是submit 到<form action="WEB-INF/a.jsp">这样的就没办法实现了,因为访问不到,所以引入servlet,structs,这样的概念,就解决了。
说实话我感觉写的人可能很明白,但是看的人比如像我这么愚钝的人,真是感觉有点理解的不到位。通过<form action="login">,然后在xml里面通过映射找到对应的类(action),forward一下,然后在到jsp中,我在浏览器上是不让正常访问jsp了,但是我通过访问http://localhost/login也可以访问到页面,看到源码,那么还有必要放在web-inf下吗?
要是只是单纯的想访问不到jsp,那不用把文件放到web-inf,就在外面,通过structs映射,我们也直接访问不了jsp。何乐而不为。那究竟为什么要放,我谈下我的理解。
当我们购买一个web应用软件的时候,商家一般不提供给我们源码,只是发布编译好的class文件。我们后台人员可以通过xml找到路径,甚至反编译类文件,那么我假设一个例子,一般访问系统,首先都要进行身份验证的,尤其是当登陆到系统的时候,会伴随着很多安全验证。这些安全验证一般是通过类来实现的。在一家单位里面,后台人员想躲过安全验证就来进入到系统,那么他需要直接在浏览器上输入页面,如果jsp是在web-inf外部,那么通过查询xml文件可以找到jsp相对路径,进去就可以了,但是他想通过类直接进去是不行的,因为需要身份验证。反之,如果jsp事先是封装在web-inf内部,那么就算后台人员或者其他相关人员找到jsp路径,他们也访问不了,因为系统是找不到的,会提示错误,这就是安全性的保证。以上是我个人粗浅的理解。可能是有点胡扯,感觉有帮助的笑笑就好。有问题的希望讨论。