Struts2基础之三:URL路径的跳转 和basePath

来源:互联网 发布:涤纶 锦纶 知乎 编辑:程序博客网 时间:2024/06/08 04:46



一:URL经过Struts找到jsp的流程

上一个示例的URL是http://127.0.0.1:8080/Struts2Project01/myAction01,以它为例:


1. “127.0.0.1:8080/” 会找到Tomcat下web应用的根目录

2. “Struts2Project01” 是tomcat的项目,既然是tomcat的项目 就会先检查其中的web.xml文件

3. web.xml中存在我们设置的过滤器,所以会首先执行过滤器(在配置Servlet之前),这个Struts2的<filter>会去找项目中的struts.xml

4.struts.xml中此<package>的namespace=“/” ,所以“Struts2Project01/XXXXX.action ”的XXXXX,归这个包所解析,

5.“myAction01” 在这个<package>中找对应的 <action>名称,我们正好配置过了这个名称要去执行class中的action,

(这儿如果在包里找不到,还会去找namespace=“”,也就是所有命名空间都可调用的action。再找不到就只能告诉taomcat找不到所需了)

6.我们自定义包中的action执行后,返回“success”

7.<result>校验得到成功信息,所以跳转到指定的jsp,显示内容


web.xml文件如下:(过滤器)

    <filter>        <filter-name>struts2</filter-name>        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>struts2</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

struts.xml如下:(namespace、action、result)

<package name="ma1" namespace="/" extends="struts-default">        <action name="myAction01" class="com.rt.struts2.actionDemo.MyAction_01"><!-- 包.类名称 -->            <result >                /helloStruts2.jsp            </result>        </action>    </package>





二:跳转时的路径

添加一个获得basePath的scriptlet

<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
还可以在<head>标签中加一个<base>标签

  <head>   <base href="<%=basePath%>"/>  </head>



这样跳转的时候就可以根据绝对路径跳转,而不是当前页的相对地址

<a href="forwardPath/forwarded.jsp"> head中带“base:标签的跳转 (路径前自动补齐base)</a><br>    <a href="<%=basePath%>forwardPath/forwarded.jsp"> 使用scriptlet变量"basePath"的跳转 </a>    










原创粉丝点击