本文内容主要来自创智博客学习视频的整理
http://v.itcast.cn/course/212.html
1.全局结果与局部结果页面
当很多提交请求跳转到相同的页面,这个时候,这个页面就可以成为全局的页面。在 struts2 中提供了全局页面的配置方法。
struts文件如下,
当输入网址为:
http://127.0.0.1:8080/strutslearn2All/book时,跳转到HelloBook.jsp页面,这个是全局结果页面。
当输入网址为:
http://127.0.0.1:8080/strutslearn2All/orders时,跳转到HelloOrder.jsp页面,由于同时存在全局结果页面设置和局部结果页面设置,以局部为准。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo1" extends="struts-default" namespace="/">
<!-- 全局结果页面配置 -->
<global-results>
<result name="success">/HelloBook.jsp</result>
</global-results>
<action name="book" class="action.BookAction">
</action>
<action name="orders" class="action.OrdersAction">
<!-- 局部结果页面配置,当全局结果页面配置和局部结果页面配置同时存在时,以局部为准 -->
<result name="success">/HelloOrder.jsp</result>
</action>
</package>
</struts>
2.转发
chain结果类型:表示将多个Action作为一个链来处理
只转发到对应的网页,不改变网址。注意此时可能会调用缓存中的数据,要用ctrl+F5进行刷新。一般不使用chain属性。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo1" extends="struts-default" namespace="/">
<action name="book" class="action.BookAction">
<!-- chain: 转发 ,页面会发生改变,网址不发生改变,仍然为
http://127.0.0.1:8080/strutslearn2All/book -->
<result name="success" type="chain">orders</result>
</action>
<action name="orders" class="action.OrdersAction">
<result name="success">/HelloOrder.jsp</result>
</action>
</package>
</struts>
3.重定向
redirect:处理完当前Action之后,重定向到另外一个实际的物理资源。
redirectAction:也是重定向,但它重定向到的是另外一个Action。
只要是重定向,那么之前凡是保存在request里面的东西就全都消失了。
因为重定向实际是发送第二个请求,故请求中的东西也就不会出现在第二个请求里面了。
也就是说重定向是不共享request的东西,重定向后的页面中无法接收request里的东西 。
(1)redirectAction用法:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo1" extends="struts-default" namespace="/">
<action name="book" class="action.BookAction">
<!-- redirectAction:重定向到orders的action,此处action访问名称是orders,重定向后,网址和页面都会发生改变,网址会变成
http://127.0.0.1:8080/strutslearn2All/orders.action-->
<result name="success" type="redirectAction">orders</result>
</action>
<action name="orders" class="action.OrdersAction">
<result name="success">/HelloOrder.jsp</result>
</action>
</package>
</struts>
(2)redirect用法:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo1" extends="struts-default" namespace="/">
<action name="book" class="action.BookAction">
<!-- redirectAction:重定向到orders的action,此处action访问名称是orders,
重定向后,网址和页面都会发生改变 -->
<result name="success" type="redirectAction">orders</result>
</action>
<action name="orders" class="action.OrdersAction">
<!-- 重定向到OrderAction后,再重定向到HelloOrder.jsp页面,此时网直也是
http://127.0.0.1:8080/strutslearn2All/HelloOrder.jsp -->
<result name="success" type="redirect">/HelloOrder.jsp</result>
</action>
</package>
</struts>
4.“请求转发”和“重定向”之间的区别
让浏览器获得另外一个URL所指向的资源可以使用请求转发(RequestDispatcher.forward)或则是重定向技术(HttpServletResponse.sendRedirect),但是两者的内部机制有很大的区别:
1 请求转发只能将请求转发给同一个WEB应用中的组件,而重定向还可以重新定向到同一站点不同应用程序中的资源,甚至可以定向到一绝对的URL。
2 重定向可以看见目标页面的URL,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。
3 请求响应调用者和被调用者之间共享相同的request对象和response对象,重定向调用者和被调用者属于两个独立访问请求和响应过程。
4 重定向跳转后必须加上return,要不然页面虽然跳转了,但是还会执行跳转后面的语句,转发是执行了跳转页面,下面的代码就不会在执行了。
5.其他相关代码
(1)整体代码架构
(2)HelloBook.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>hello book</h1>
</body>
</html>
(3)HelloOrder.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>hello order</h1>
</body>
</html>
(4)BookAction
package action;
import com.opensymphony.xwork2.ActionSupport;
public class BookAction extends ActionSupport {
@Override
public String execute() throws Exception{
System.out.println("bookAction");
return "success";
}
}
(5)OrdersAction
package action;
import com.opensymphony.xwork2.ActionSupport;
public class OrdersAction extends ActionSupport {
@Override
public String execute() throws Exception{
System.out.println("orderAction");
return "success";
}
}
(6)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>strutslearn2</display-name>
<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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>