当我刚开始学 struts2 框架时,我们在学校是有这个课的,我们用的教材是 《轻量级JavaEE 企业应用实战》,这是 李刚 编写的疯狂系列中一本,这本书很厚,我们老师也差不多是讲这上面的内容。当我照着书上的教程学时,遇到了一个问题,就是我访问不了 WEB-INF 下面的 jsp页面
一般来说,如果不用 struts2 框架的话,本身是访问不了
WEB-INF下面的所有的内容的,因为这个文件下面一般存放的是一些配置文件和一些库文件,而这些文件是不能让用户直接访问到的。
但是如果你使用了 struts2 框架的话,是可以将 jsp页面 存放在 WEB-INF这个目录下面的(struts 官方还推荐将页面放置于这个目录下面)。下面是我 struts.xml 配置文件中的代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default" namespace="/">
<action name="*">
<result name="success">/WEB-INF/{1}.jsp</result>
</action>
</package>
</struts>
下面上一张我的目录结构图:

大家可以看到我在
WEB-INF的目录下面放了三个jsp文件,在WebContent的直接子目录下也放了同样的三个文件(这三个文件与WEB-INF同级),但是其中的内容不同,以便我们到时知道自己访问的是哪一个文件。
- 现在如果我在
WEB-INF下的jsp 页面右键单击run as的话,那么出来的页面是404页面,显示这个页面是没有找到的。而且大家可以看到下面图中红线部分,这就是我们这个 jsp页面的访问路径。

- 而如果我们右键点击运行与
WEB-INF同级的jsp页面,那么可以得到页面,如下图,可以看到图中红色部分的访问地址。

那么通过以上我们首先可以得出我们项目中的jsp页面在本地访问的地址是怎样的
http://localhost:8080/ + 项目名称 + jsp页面在WebContent 路径(不包括WebContent)。
再看一下我们在 struts.xml 中的配置:
<action name="*">
<result name="success">/WEB-INF/pages/loginForm.jsp</result>
</action>
之前我理解的是
<action name="*">可以拦截到所有的请求,从而跳转到/WEB-INF/pages/loginForm.jsp, 通过实践才知道在web.xml中的
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
以上才能拦截到所有的请求,然后拦截到所有请求以后,就交给一系列的拦截器开始处理,而<action name="*">能拦截的只是以.action结尾的jsp页面,比如loginForm.action页面,也能拦截到表单中action="loginForm",所以我猜测是不是表单就是以XXX.action的方式被提交给后台的。
但是如果你把浏览器中的地址改为 http://localhost:8080/login2/WEB-INF/pages/loginForm.action 那么你还是不能访问到 WEB-INF 下的页面,这是因为用户访问不了 WEB-INF 下的页面,但是我们如果在浏览器中随便输入,比如 http://localhost:8080/login2/XXX/loginForm.action,那么我们就可以访问到 WEB-INF 下的页面了,可以看出在程序内部对http://localhost:8080/login2/WEB-INF/这个目录进行了处理,如果用户的路径包含的话,就直接跳转到 404.
以下是其中的一些知识点:
1.web.xml当程序启动时,会自动读取其中的配置。
2.WEB-INF下存放的是 一些配置文件和一些库文件(包)。
3.struts.xml是struts框架的核心配置文件,可以在其中配置一些拦截器等。
4.用户是不能直接访问WEB-INF 下的文件的。
5.用户可以通过配置 action来让框架将 WEB-INF的页面显示出来。
在学习Struts2框架时,遇到无法直接访问WEB-INF目录下jsp页面的问题。通常,WEB-INF目录存放敏感资源,不直接对外暴露。但在Struts2中,可通过配置Action来实现访问。文章详细描述了配置过程和理解,包括struts.xml的核心配置、拦截器的工作原理,并指出直接输入URL访问的限制。

被折叠的 条评论
为什么被折叠?



