Struts框架之转发和重定向

原创 2015年07月07日 13:27:01

转发

转发操作是服务端的行为,在Servlet中使用request.getRequestDispatcher("jsp").forward(request,response)。在Struts中需要在配置文件中对result的属性type定义为dispatcher。但是在struts-default.xml中,如果result标签的type属性默认为dispatcher。使用了default=true。转发操作由于是服务器端的行为,所以是一次请求,因此可以在request中传递值。

    <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-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
        </result-types>

新建ActionOperatorService.java类,此类主要进行转发和重定向的处理。

package com.struts.service;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @TODO 本文中进行转发和重定向的操作
 * @author Administrator
 * @date 2015年7月7日 下午1:41:04
 * @version 1.0
 */
@SuppressWarnings("serial")
public class ActionOperatorService extends ActionSupport{

    @Override
    public String execute(){
        ActionContext.getContext().put("request_dispatcher", "转发操作的request请求");
        return Action.SUCCESS;
    }
}

配置文件修改如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="action" extends="struts-default">
        <action name="dispatcher" class="com.struts.service.ActionOperatorService">
            <!-- 转发操作dispatcher操作 -->
            <!-- <result name="success">/actionOperator.jsp</result> -->
            <result name="success" type="dispatcher">/actionOperator.jsp</result>
        </action>
    </package>
</struts>

actionOperator.jsp页面使用EL表达式:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@page isELIgnored="false" %>
<!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>转发和重定向操作</title>
</head>
<body>
    <!--获取转发操作中request -->
    转发操作中的request:${request.request_dispatcher }<br/>
</body>
</html>

重定向

重定向是发生在客户端的行为。在Servlet中使用response.sendRedirect("jsp")。重定向由于是客户端的行为,每次服务器响应完毕后,都需要客户端重新发送一次请求,因此对于request范围内的值时无法通过重定向传递的。

重定向到jsp

在struts中实现重定向有两种方式:一是重定向到jsp,一种是重定向到Action。其中重定向到jsp页面需要在result中定义type=redirect,重定向到Action需要在result中定义为type=redirectAction。
配置文件如下:

<action name="redirect" class="com.struts.service.ActionOperatorService">
            <!-- 重定向操作redirect操作 -->
            <result name="success" type="redirect">/actionOperator.jsp</result>
        </action>
重定向到Action(无参数)

在配置文件中配置result的属性type=redirectAction。重定向到Action是从一个Action转到另外一个Action。代码如下:

        <action name="redirectAction" class="com.struts.service.ActionOperatorService">
            <!-- 重定向操作redirectAction操作 -->
        <!--    <result name="success" type="redirectAction">ognl</result> -->
            <result name="success" type="redirectAction">
                <param name="actionName">ognl</param>
                <param name="namespace">/</param>
            </result>
        </action>
重定向到Action(带参数)

在重定向到Action不带参数中,使用了标签<param/>,因此可以使用此标签进行参数的传递。代码如下:

<!-- 重定向操作redirectAction操作传递参数 -->
            <result name="success" type="redirectAction">
                <param name="actionName">ognl</param>
                <param name="namespace">/</param>
                <!-- <param name="redirectActionParam">redirectActionParam</param> -->
                <param name="redirectActionParam">${message}</param>
            </result>

其中${message}中的message为ActionOperatorService中的成员变量。另外在ognl.action中接受参数需要定义成员变量或者使用request获取传递的参数。由于传递的参数为中文,因此在后台中输出为乱码,需要使用进行转码。

System.out.println(new String(redirectActionParam.getBytes("ISO-8859-1"),"UTF-8"));
System.out.println(new String(ServletActionContext.getRequest().getParameter("redirectActionParam").getBytes("ISO-8859-1"),"UTF-8"));

Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping

上篇讲述了struts控制器Action和DispatchAction以及LookupDispatchAction,本篇主要说说struts中的页面转发控制,struts提供了ActionForwar...

struts2中转发和重定向详解

Struts2的ResultType和Action处理链 Struts2的结果类型 在struts-default.xml中定义了Struts2内置的所有可用的 所有的Struts2结果处理类...

Struts2从一个action转到另一个action的两种方法

在Struts2中,Action处理完用户请求后,将会返回一个字符串对象,这个字符串对象就是一个逻辑视图名。Struts 2通过配置逻辑视图名和物理视图之间的映射关系,一旦系统收到Action返回的某...
  • chenssy
  • chenssy
  • 2012年09月09日 16:42
  • 49240

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

struts1重定向 浅谈ActionForward的三种重定向

ActionForward是 Struts的核心类之一,其基类仅有4个属性name / path / redirect / classname。在基于Struts的Web应用程序开发过程中,Actio...

Struts2中转发和重定向的区别

结果类型中redirect和redirectAction的区别: redirect是在处理完当前Action之后,重定向到另外一个实际的物理资源。redirectAction也是重定向,但它重定向到的...

Struts2转发类型

Action中result的各种转发类型, action name="helloworld" class="cn.itcast.action.HelloWorldAction">  /WEB-INF/...

struts2重定向传参问题

sitecolumnList.jsp                     sitecolumnEdit.jsp             中,如果传静态参数siteid=%{siteid...
  • hsliwei
  • hsliwei
  • 2011年10月25日 15:59
  • 14756

struts2 中请求转发与请求重定向方法

一。Chain Result: 这个result调用另外的一个action,连接自己的拦截器栈和result。 actionName (默认) - 被调用的action的名字namespace - ...

介绍new Thread的弊端及Java四种线程池的使用

1、new Thread的弊端 执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts框架之转发和重定向
举报原因:
原因补充:

(最多只允许输入30个字)