struts2路径跳转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2路径跳转相关的知识,希望对你有一定的参考价值。

现在的home.jsp主页面是两个部分,左边是树状的连接名,就是点击树节点右边就显示相对应的页面

d = new dTree('d');
d.add(0,-1,'系统菜单树');
d.add(2,0,'员工管理','$pageContext.request.contextPath/login/welcome.jsp','','mainFrame');
//子目录添加
d.add(5,2,'用户管理','$pageContext.request.contextPath/user/list.jsp','','mainFrame');
document.write(d);

这是左边的树

<frameset rows="103,*,43" frameborder=0 border="0" framespacing="0">
<frame src="$pageContext.request.contextPath/login/left.jsp" name="leftFrame" noresize scrolling="YES">
<frame src="$pageContext.request.contextPath/login/welcome.jsp" name="mainFrame">
</frameset>
</frameset>

这是主页面,树在左边 ,小页面在右边

现在的问题是,比如点击用户管理的页面,会显示出所有的用户,但是单单跳转页面怎么启动struts的action
在右边显示用户列表呢?

还有在右边的页面做struts的增删改查的操作时,在struts的xml里怎么写<result>的跳转路径
即可以显示home.jsp ,右边的页面又可以显示相对应的struts操作后的跳转页面

不难,主要你要理解<frame>标签的name属性和target属性的用法,以及Struts 2 action的处理过程。


你的第一个问题:点击用户管理的页面,会显示出所有的用户,但是单单跳转页面怎么启动struts的action在右边显示用户列表呢?

回答:其实直接跳转显示用户列表jsp,和调用Struts2的action之间差了一步,就是从数据库里取出用户数据,这需要在Struts2的action里调用,因此你需要这时把“用户管理”对应的URL换成Struts 2的action(假设是UserAction)对应的URL,这样你点击“用户列表”的链接后,UserAction会先处理(取出用户数据),最后通过return "success",把success视图(也可能是别的视图)设置为你要显示的用户列表JSP。  

为了在右边显示,这里点击“用户管理”时,还要求把目标(target)设成你要显示所在的<frame>的name,也就是结果页面会在target属性设置的框架里显示,这是对于<form>和<a>这两个标签来说的。如果要是对<frame>标签来说,直接用其名字设置其location属性也可以达到效果。

我看你原来的代码好像已经用javascript实现了,就是这句:

d.add(5,2,'用户管理','$pageContext.request.contextPath/user/list.jsp','','mainFrame');

里面的“mainFrame"。(当然我不清楚你的这个js代码具体实现,总之最终需要设置右边页面里刷出来UserAction对应的URL,直接用原生js代码如下:

window.top.mainFrame.location.href="你的UserAction对应的URL";


如果第一个问题理解并搞定,第二个问题也就不难:

在右边的页面做struts的增删改查的操作时,在struts的xml里怎么写<result>的跳转路径
即可以显示home.jsp ,右边的页面又可以显示相对应的struts操作后的跳转页面。


target属性可以设置成"_self"(这是个系统值,注意前面的下划线),表示在当前的页面跳转,也就是说Struts2页面内部的按钮啊操作啊(不涉及导航)可以统统让它们在本页面里转换。并且不会影响其他框架里的内容,也就是整个页面框架集还是home.jsp

参考技术A 这是前端范畴,请查看frame标签方法

struts2 的跳转方式

在struts2中有4中跳转方式

1. dispatcher        请求转发(默认),只跳到jsp页面
2. redirect         重定向到jsp
3. redirectAction        重定向到action
4. chain           转发到action

在说这之前,让我们说下请求转发和重定向的概念,如果你已经了解转发和重定向,可以跳过,直接看下面。

转发和重定向

 1. 转发是服务器内部之间进行的

   重定向是用户重新向服务器发送新的请求

 2. 转发地址栏不会改变

   重定向由于是重新发送的新请求,地址栏会改变

 3. 转发共用一个作用域对象,相当于A.jsp页面的内容添加到B.jsp页面中。

   重定向,会得到一个信的作用对象

 4. 转发的速度比较重定向快(因为重定向重新发送请求)

什么时候用转发和重定向?

   前后两个页面,有数据传递,用请求转发,没有则用重定向。

   比如servlet查询了数据需要在页面显示,就用请求转发。

   比如servlet做了update操作跳转到其他页面。就用重定向。

下面让我们步入正题,先看看页面效果和项目的结构

  1.项目结构

    技术分享

2.看看页面的效果图,先页面枯燥,就加了个背景图片。记得自己修改。

 技术分享

让我们看下具体的实现细节,不要被神秘遮住了眼,其实它并不神秘。

  1. userIndex.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	/* 项目名称 */
	String path = request.getContextPath();
	// 获取传输协议  
	String http = request.getScheme();
	// 获取服务器名称
	String serverName = request.getServerName();
	// 获取服务器端口号
	Integer serverPort = request.getServerPort();
	// 拼接起来的项目URL
	String bath = http + "://" + serverName + ":" + serverPort + path;
	System.out.println(bath);
%>   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body style="background-image: url(‘image/bg1.jpg‘);">
<!-- 跳转方式 -->
<a href="<%=bath %>/jump/jumpDipatcher?param=1">dispatcher 默认方式,请求转发</a><br/>
<a href="<%=bath %>/jump/jumpDipatcher?param=2">redirect 重定向到jsp页面</a><br/>
<a href="<%=bath %>/jump/jumpDipatcher?param=3">redirectAction 重定向到Action</a><br/>
<a href="<%=bath %>/jump/jumpDipatcher?param=4">chain 转发到Action</a><br/>
</body>
</html>

2.对于 login.jsp 和 error.jsp 和success.jsp。其实没有什么内容,只是一个页面,在这里不写了。

 不过你测试的时候,要写,当然名字你也可以自己写(毕竟是来测试,不是正规开发).

3.TestJump

package com.struts2.control;

/**
 * @author admin
 * 测试跳转方式
 */
public class TestJump {
	
	private String param; 
	
	public String getParam() {
		return param;
	}

	public void setParam(String param) {
		this.param = param;
	}

	public String testDispatcher(){
		if("1".equals(param)){
			System.out.println("-----Dispatcher--------");
			return "dispatcher";
		}else if("2".equals(param)){
			System.out.println("-----Redirect--------");
			return "redirect";
		}else if("3".equals(param)){
			System.out.println("-----RedirectAction--------");
			return "redirectAction";
		}else if("4".equals(param)){
		        System.out.println("-----Chain--------");
			return "chain";
		}
		return null;
	}
	public String returnUserIndex(){
		return "userIndex";
	}
	public String returnChain(){
		return "chain";
	}
}


4.看下struts.xml 是如何配置的,面纱即将揭晓。如果你对配置中的属性不知道,请参考上章

 http://11144439.blog.51cto.com/11134439/1926477 


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">   
   
<struts>
	<package name="jumps" extends="struts-default" namespace="/jump">
		<action name="jumpDipatcher" class="com.struts2.control.TestJump" method="testDispatcher">
			<!-- 请求转发,跳转到jsp页面 -->
			<result name="dispatcher" type="dispatcher">/success.jsp</result>
			<!-- 重定向到jsp页面 -->
			<result name="redirect" type="redirect">/success.jsp</result>
			<!-- 重定向到Action -->
			<result name="redirectAction" type="redirectAction">
			        <!-- 这里是要跳转到Action的 package的namespace,
			           注意  / 不要忽略了。
			         -->
				<param name="namespace">/jump</param>
				<!-- 这个是action中的name 看下图 -->
				<param name="actionName">returnUserIndex</param>
			</result>
			<!-- 转发到chain -->
			<result name="chain" type="chain">
				<param name="namespace">/jump</param>
				<param name="actionName">returnChain</param>
			</result>
		</action>
		<action name="returnUserIndex" class="com.struts2.control.TestJump" method="returnUserIndex">
			<result name="userIndex" type="redirect">/login.jsp</result>
		</action>
		<action name="returnChain" class="com.struts2.control.TestJump" method="returnChain">
			<result name="chain" type="redirect">/login.jsp</result>
		</action>
	</package>
</struts>

这个是转发Action中的配置关系图(redirectAction重定向到Action也是一样的道理)

技术分享



5.上面的配置中有没有发现什么?是不是感觉有跳转同一个页面的?没错,看下图

技术分享

如果按照上面配置是不是感觉代码又减少了,没有错,下面是配置,记得修改Action中返回字符串要和全局中的一致。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">   
   
<struts>
	<package name="jumps" extends="struts-default" namespace="/jump">
		<!-- 全局跳转,抽取重复的result,简化配置 -->
		<global-results>
			<result name="success">/success.jsp</result>
			<result name="login">/login.jsp</result>
		</global-results>
		
		<action name="jumpDipatcher" class="com.struts2.control.TestJump" method="testDispatcher">
			<!-- 重定向到Action -->
			<result name="redirectAction" type="redirectAction">
				<param name="namespace">/jump</param>
				<param name="actionName">returnUserIndex</param>
			</result>
			<!-- 转发到chain -->
			<result name="chain" type="chain">
				<param name="namespace">/jump</param>
				<param name="actionName">returnChain</param>
			</result>
		</action>
		<action name="returnUserIndex" class="com.struts2.control.TestJump" method="returnUserIndex">
		</action>
		<action name="returnChain" class="com.struts2.control.TestJump" method="returnChain">
		</action>
	</package>
</struts>


6.说了这么多,让我们测试下结果如何

  1. dispacher 请求转发跳转.测试如图

    技术分享

  2. redirect 重定向 jsp,效果如下图

    技术分享

  3. redirectAction 重定向到Action,效果如下图

    技术分享


4. chain 转发到Action ,效果如图

技术分享

到这里告一段落,重要的是要亲自动手,亲自动手,亲自动手。好了重要的事情,已经说了三遍。收工,打造回府搂媳妇去了。


本文出自 “11134439” 博客,转载请与作者联系!

以上是关于struts2路径跳转的主要内容,如果未能解决你的问题,请参考以下文章

Struts2 action 跳转到web-inf下,

struts2 action 页面跳转

struts2 的跳转方式

Struts2的入门案例(Struts2的配置和页面跳转,以及对页面输入的信息进行判断)

Struts2--result页面跳转forward--get方式和post方式的获取参数

SSH框架整合遇到的错误——Struts2.5 action跳转出现错误