1.页面映射:
struts2 约定要求,将JSP页面 放入WEB-INF下 !!!!
因为webRoot(webapp)下的页面是公开路径,可以直接访问,struts拦截器只能拦截WEB-INF下的页面action请求。
过滤器与拦截器区别:
过滤器可以拦截任何web资源,而拦截器只能拦截action请求。
所以我们将页面放在WEB-INF目录下的任何自定义文件夹下,但这样的问题是,如果我有很多页面,是不是每个页面都要写一个对应action呢,这样做显然是不行的,所以我们需要引入这样一个配置:
<package name="basicstruts2" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
<!--需要进行权限控制的页面访问 -->
<action name="page_*_*">
<result>/WEB-INF/pages/{1}/{2}.jsp</result>
</action>
</package>
前面这个action标签代表的是访问index.action访问的是index.jsp页面,后面这个action才是我们需要关注的配置,这个配置代表当我访问page_*_*.action时候对应的是访问/WEB-INF/pages/*/*.jsp。(*)可以是任意字符。
2.页面跳转
一般我们在开发的时候都会将页面放到WEB-INF下的自定义文件夹下,但网站主页很多时候是通过放在WEB-INF目录下的index.jsp做跳转到指定目录下的指定页面。例:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>跳转到主页</title>
</head>
<body>
<jsp:forward page="/page_common_index.action"></jsp:forward>
</body>
</html>
在index.jsp通过转发请求到page/common目录下的index.jsp页面。但是这样做,有一个问题,默认情况下,struts2只在请求方式下拦截,而像这种页面转发是不过滤的,这样的话我们上面配置的页面映射在这里就不会起作用,导致出现404,找不到页面,所以我们需要在web.xml的struts2的过滤器配置中加上转发的过滤:
好了,ok了。