java web从零单排第九期《struts2》action的转发与重定向

1.转发操作:

转发操作本质上是request的共享可以在request作用域中存入对象,最终在jsp页面中显示。

我们以上一节为例,只需更改struts.xml文件即可:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtd/struts-2.0.dtd">
<struts>

   <package name="Maybe" extends="struts-default">
   
     <action name="login" class="controller.Login">
       <result name="success" type="dispatcher">/true.jsp</result>
       <result name="false">/false.jsp</result>
       <result name="input">/login.jsp</result>
   </action>
   </package>
</struts>


这个result标与前面的配置文件相比,多了一个type属性:dispatcher。意味着这个操作是一个“foward”操作,即转发操作,其实这里dispatcher加的比较多余,因为struts2默认的type就是dispatcher,所以有无dispatcher都一样的。

 

2.更改true.jsp文件:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE body PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <body>
     ${logininfo.username} 
     <br>
     <s:property value="logininfo.username"/>
  </body>
</html>

${logininfo.username} 是EL表达式,可以输出logininfo.username的值

 <s:property value="logininfo.username"/>是struts2标签,也是用来输出值用的,关于struts2标签,在后续的学习中将会学到,这里给同学们演示一下struts2标签的作用,再用标签之前,一定要加上:

<%@ taglib uri="/struts-tags" prefix="s"%>


 

3.运行结果:

java web从零单排第九期《struts2》action的转发与重定向_第1张图片

 

4.有关result属性type值,在struts2底层配置文件,struts-default.xml中的results-types节点下的相关配置:

<result-types>
            <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
            <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
            <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
            <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
            <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
            <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
            <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
            <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
            <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
        </result-types>


 

result-types是可以返回的种类。dispatcher有一个属性default,且值为true,含义是如果在result标记中不注明type,则默认就是dispatcher转发操作。

上面列表中有几个result对象是开发中经常使用到的,例如,result的类型是redirect时,通常由action重定向到1个jsp页面是使用,而redirectAction通常在重定向到一个action。

 

5.由action重定向到action-无参数

上一节介绍action转发到jsp页面并显示action中属性的例子,下面介绍在项目中应用中最常见的技术点:从一个action重定向到另一个action。

在电子商务的项目中,经常遇到的场景就是:登陆成功后,则显示全部的书籍列表。这种情况就是一个典型的从登陆的action重定向到另一个列表的action。

 

下面我们把上一节的struts.xml代码改变一下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtd/struts-2.0.dtd">
<struts>

   <package name="Maybe" extends="struts-default">
   
     <action name="login" class="controller.Login">
       <result name="success" type="redirect">/true.jsp</result>
       <result name="false">/false.jsp</result>
       <result name="input">/login.jsp</result>
   </action>
   </package>
</struts>


运行程序,输入正确的用户名密码,点击提交之后并没有显示任何数据,说明数据并没有传过来,也就是说经过redirect之后,并没有共用一个request对象。

 

下面介绍一个展示图书列表的重定向操作:

7.创建起始控制层Login.java

(1) 新建登陆验证类,代码如下:

package controller;

public class Login {
	
	public String execute(){
	return "list";
	}
}

代码return “list”在本里要实现的是1个“重定向”的操作,目的是改变浏览器的URL地址,执行List.action而列出图书列表。重定向的操作为:由Login.action转发到List.action。

8.创建目的控制层List.java

package controller;

import java.util.ArrayList;

public class List {
	private ArrayList booklist = new ArrayList();

	public ArrayList getBooklist() {
		return booklist;
	}

	public void setBooklist(ArrayList booklist) {
		this.booklist = booklist;
	}
	
	public String execute()
	{
		booklist.add("book1");
		booklist.add("book2");
		booklist.add("book3");
		booklist.add("book4");
		booklist.add("book5");
		
		return "bookListJsp";
	}

}


上述代码声明了1个ArrayList变量booklist,然后使用execute方法向这个booklist存放书籍的名称,return “bookListJsp”表示转发到一个用于显示书籍列表的JSP页面。

9.在struts文件中进行配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtd/struts-2.0.dtd">
<struts>

   <package name="Maybe" extends="struts-default">
   
     <action name="login" class="controller.Login">
       <result name="list" type="redirectAction">
         <param name="actionName">List</param>
       </result>       
     </action>
     
     <action name="List" class="controller.List">
       <result name="bookListJsp">/bookListJsp</result>
     </action>
   </package>
</struts>


下列标记的功能是从当前的action,即login重定向到List这个action,其中重定向的关键操作是type的属性值:redirectAction。

<result name="list" type="redirectAction">
         <param name="actionName">List</param>
       </result>    


10.创建显示列表的JSP页面

用于显示书籍列表的bookListJsp.jsp的代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

  <body>
    <s:iterator value="booklist" var="list">
      <s:property value="list"/>
      <br>
    </s:iterator>
  </body>
</html>

这里使用了struts2标签来进行遍历输出,value属性是被循环的集合包括List,Set,数组,Map。

11.直接运行login.action     地址立即变为List.action结果:



 

 

 

 

你可能感兴趣的:(java,jsp,Web,struts2,iterator)