初学structs2,结果类型简单示例

一、自定义结果处理类,structs.xml中package节点下加result-types节点,在result-types节点下配置result-type的属性。然后在配置的action中的result属性type为resul-type的name属性值

如,自定义服务端重定向Dispatcher类

structs.xml配置:

<structs>
<package name="resulttype" namespace="/resulttype" extends="structs-default">
<result-types>
<result-type name="MyDispathcer" class="cn.hjp.resulttypes.MyDispatcher"></result-type>
</result-types>
<action name="HelloAction" class="cn.hjp.action.HelloAction">
<result name="Success" type="MyDispathcer">/Index.jsp</result>
</action>
</package>
</structs>

java中的实现代码为:

//自定义服务端页面跳转类
public class MyDispatcher extends StrutsResultSupport {

    @Override
    protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
        // TODO Auto-generated method stub
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        request.getRequestDispatcher(finalLocation).forward(request, response);
    }
}

//cn.hjp.action下的类
public class HelloAction implements Action {
    @Override
    public String execute() throws Exception {
        System.out.println("自定义服务端页面重定向测试");
        return "Success";
    }
}

二、配置result节点type属性为dispatcher,实现页面在服务端重定向

<structs>
<package name="hello" namespace="/aaa" extends="structs-default">
<action name="HelloAction" class="cn.hjp.action.HelloAction">
<result name="success" type="dispatcher">/Index.jsp</result>
</action>
</package>
</structs>

java代码:

//cn.hjp.action下的类
public class HelloAction implements Action {
    @Override
    public String execute() throws Exception {
        System.out.println("服务端页面重定向测试");
        return SUCCESS;
    }
}

三、配置result节点type属性为redirect,实现页面在客户端重定向

<structs>
<package name="hello" namespace="/aaa" extends="structs-default">
<action name="HelloAction" class="cn.hjp.action.HelloAction">
<result name="success" type="redirect">/Index.jsp</result>
</action>
</package>
</structs>

java代码:

//cn.hjp.action下的类
public class HelloAction implements Action {
    @Override
    public String execute() throws Exception {
        System.out.println("客户端页面重定向测试");
        return SUCCESS;
    }
}

四、配置result节点type属性为plainText,显示纯文本,及参数注入

<structs>
<package name="hello" namespace="/aaa" extends="structs-default">
<action name="HelloAction" class="cn.hjp.action.HelloAction">
<result name="success" type="plainText">
<!--参数注入,其中的参数属性为plainText对应的类及其父类中属性-->
<param name="location">/Index.jsp</param>
<!--编码不一致会乱码-->
<param name="charSet">UTF-8</param>
</result>
</action>
</package>
</structs>

java代码:

//cn.hjp.action下的类
public class HelloAction implements Action {
    @Override
    public String execute() throws Exception {
        System.out.println("纯文本测试");
        return SUCCESS;
    }
}

五、配置result节点type属性为stream,实现文件下载

<structs>
<package name="hello" namespace="/aaa" extends="structs-default">
<action name="HelloAction" class="cn.hjp.action.HelloAction">
<result name="success" type="stream">
<param name="contentType">application/zip</param>
<!--如下zip,此处大小写不区分,但是对应action中的getZip()方法,返回InputStream类型-->
<param name="inputName">zip</param>
<!--filename自定义下载文件名-->
<param name="contentDisposition">attachment;filename="Mapping123.zip"</param>
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</structs>

java代码:

public class HelloAction extends ActionSupport {
    public InputStream getZip() {
        // 读取文件流
        ServletContext context = ServletActionContext.getServletContext();
                //在WebContent下新建文件夹file,里面有Mapping.zip文件
        InputStream inputStream = context.getResourceAsStream("/file/Mapping.zip");
        return inputStream;
    }

}

调用方式:http://localhost:8080/structs2-demo1/aaa/HelloAction.action。直接下载文件

六、配置result节点type属性为redirectAction,实现重定向到指定Action。其实该方式是对type="redirect"变相重写,通过查源码可知,ServletActionRedirectResult继承了ServletRedirectResult类,通过ServletActionRedirectResult中的execute方法执行到ServletRedirectResult中的doexecute方法,实现跳转

<structs>
<package name="hello" namespace="/aaa" extends="structs-default">
<action name="HelloAction1" class="cn.hjp.action.HelloAction1">
<result name="success" type="redirectAction">
<param name="actionName">HelloAction</param>
<!--如果不配置namespace,则默认当前namespace-->
<param name="namespace">/aaa</param>
</result>
</action>
</package>
</structs>

java代码:

public class HelloAction1 extends ActionSupport {

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("重定向到指定Action测试");
        return SUCCESS;
    }
}

访问路径:http://localhost:8080/structs2-demo1/aa/HelloAction1.action

时间: 2024-11-05 21:55:42

初学structs2,结果类型简单示例的相关文章

spring-servlet.xml简单示例

spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 1 <!-- springMVC简单配置 --> 2 <?xml version="1.0" encoding="UTF-8"?> 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://w

关于Ajax实现的简单示例

一.代码示例 关于Ajax的基本概念(包括XMLHttpRequest对象及其相关方法属性)移步这里(w3school中文版)学习了解. <!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title>使用Ajax异步加载数据</title> <script type = "text/javasc

Node.js操作Redis的简单示例

Redis是一个key-value类型的数据库,而key全部都是字符串,value可以是集合.hash.list等等. Redis是通过MULTI/DISCARD/EXEC/WATCH这4个命令来实现事务功能.对事务,我们必须知道事务安全性是一个非常重要的. 事务提供了一种"将多个命令打包,然后一次性.按顺序执行"的机制,并且在事务执行期间不会中断--意思就是在事务完成之前,客户端的其他命令都是阻塞状态. var redis = require("redis");

RPC学习----Thrift快速入门和Java简单示例

一.什么是RPC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易. 二.什么是Thrift? thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和

Mybatis的简单示例

首先新建一个JavaWeb项目并导入mybatis依赖的jar包,同时Mybatis是对数据库的操作所以我们需要在数据库中新建一个表user用来演示. 新建完表之后我们还需要建立相对应的实体类User.java并添加set和get方法: 1 public class User { 2 private String username; 3 private String password; 4 private int age; 5 public String getUsername() { 6 re

xcode江湖录-第04章 风水宝地--界面生成器之StoryBoard简单示例 与 约束

第04章风水宝地--界面生成器之StoryBoard简单示例 ??如何设置转场动画?? ??如何在参与到转场动作中?? ??如何让页面跳转到自定义VC?? ??如何设置自定义跳转模式?? ??如何用StoryBoard中的VC生成对象?? 01:新建SingleViewApplication,命名为StoryBoardTest. 02:打开Main.Storyboard,如下: 03:通过Object Library选中View Controller(A controller that mana

HTML-003-模拟IDE代码展开收起功能简单示例

当先我们在日常的编程开发工作中使用编程工具(例如 Eclipse.Sublime 等等)都有相应的代码折叠展开功能,如下图所示,极大的方便了我们的编码工作. 同时,我们在日常的网页,尤其的广大的博客网站的源码展示部分,都采用了此种显示方式,如下图所示(示例引用位置:008-Selenium 操作下拉列表实例-Select): 这么做的意义何在呢?我觉得其实际应用有如下两种: 内容的展示和隐藏:将用户最关心.感兴趣的内容展示给用户,若用户想继续深入了解,则可通过点击展示或隐藏按钮达到查看.隐藏内容

图形统计简单示例

1). 加入 jar 包: Struts2中的包: struts2-jfreechart-plugin-2.3.15.3.jar jfreechart-1.0.13中的包: jcommon-1.0.16.jar jfreechart-1.0.13.jar iText-2.1.5.jar 2). 具体使用参见: struts-2.3.15.3-all/struts-2.3.15.3/docs/WW/docs/jfreechart-plugin.html I:在目标action中加入以下代码 pri

LVS的简单示例(一)

LVS的简单示例 1.使用NAT模型的TCP协议类型的lvs服务负载均衡一个php应用,如Discuz!论坛或者phpMyAdmin: 必要条件:三台主机(一个调度器两个服务器) 声明:172.16.1.11作为调度器,192.168.100.2和192.168.100.3作为服务器 第一步:给调度器配置一个网络适配器,配置其IP地址为192.168.100.1 第二步: 服务器配置(Real Server即RS): 配置两个RS的为同一网关: # route add default gw 19