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

本文详细介绍了如何通过Struts框架处理URL请求,包括从Tomcat接收到请求开始,直至找到对应的action并跳转到指定的JSP页面的过程。此外,还介绍了如何在JSP中获取基础路径,并利用该路径实现页面间的正确跳转。



一: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>
    










评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值