Struts 2三种方式实现Ajax

来源:互联网 发布:线切割锥度3b编程 编辑:程序博客网 时间:2024/06/05 07:46
 http://blog.csdn.net/xiao__gui/article/details/21933349

Struts 2三种方式实现Ajax

标签: Struts2AjaxAction方法json
 4245人阅读 评论(1) 收藏 举报
 分类:

Ajax本质上和普通的HTTP请求是一样的,只不过普通的HTTP请求是给人看的,而Ajax请求是给JS代码去用的。

所以Ajax请求的页面一般比普通的HTTP请求的响应内容还要简单,可能是一个页面的一部分,也可能是xml、json等结构化的数据,还可能是一个简单的字符串。

所以,在Struts 2中使用Ajax,Action一般就不会调用一个jsp视图来显示了(如果Ajax请求内容是页面的一部分也可能调用jsp视图),而是通过一些其他的方式。

下面介绍了三种方法,用于Action实现Ajax请求。

方法1:依赖Servlet API

[java] view plain copy
  1. public class HelloAction extends ActionSupport {  
  2.   
  3.     public String execute() throws Exception {  
  4.         HttpServletResponse response = ServletActionContext.getResponse();  
  5.         response.setCharacterEncoding("UTF-8");  
  6.         response.setContentType("text/html; charset=utf-8");  
  7.         PrintWriter out = response.getWriter();  
  8.         out.print("HelloWorld");  
  9.         out.flush();  
  10.         out.close();  
  11.         return NONE; // 或return null  
  12.     }  
  13.   
  14. }  
[html] view plain copy
  1. <package name="main" namespace="/" extends="struts-default">  
  2.     <action name="hello" class="com.xxg.HelloAction" method="execute">  
  3.     </action>  
  4. </package>  
在Action的方法中return NONE或return null表示直接用Action来处理,而不需要调用result,所以在配置文件的action标签中也没有result标签。

这里直接获取到Servlet中的HttpServletResponse对象,通过response的输出流写一个字符串,和不使用Struts 2直接用Servlet类似。

方法2:使用result type="stream"

在Struts 2的文档中推荐了一个比上一个方法更简单的方式,使用type为stream的result。通过这种方法,可以不依赖于Servlet API,所以单元测试会更方便。

[java] view plain copy
  1. public class HelloAction extends ActionSupport {  
  2.   
  3.     private InputStream inputStream;  
  4.   
  5.     public InputStream getInputStream() {  
  6.         return inputStream;  
  7.     }  
  8.   
  9.     public String execute() throws Exception {  
  10.         String str = "HelloWorld";  
  11.         inputStream = new ByteArrayInputStream(str.getBytes("UTF-8"));  
  12.         return SUCCESS;  
  13.     }  
  14.   
  15. }  
[html] view plain copy
  1. <package name="main" namespace="/" extends="struts-default">  
  2.     <action name="hello" class="com.xxg.HelloAction" method="execute">  
  3.         <result name="success" type="stream">  
  4.             <param name="contentType">text/html; charset=utf-8</param>  
  5.             <param name="inputName">inputStream</param>  
  6.         </result>  
  7.     </action>  
  8. </package>  
在struts配置文件中,result的type设为stream。其中包含两个参数,第一个是contentType,表示响应的类型,如果有中文的话最好设置一下编码,第二个参数是用来指定Action中的对应的输入流,它的默认值就是inputStream,所以可以省略。

方法3:struts 2 json插件

上面两种方法可以返回的内容很随意,可以是任何字符串。

在很多Ajax请求会用到json字符串,因为它可以很方便的转换成JavaScript对象。

使用struts2-json-plugin可以很方便的生成json(用上面的两种方法调用json工具生成json也是不错的选择,这样可以不用使用这个插件)。

此时需要添加一个jar文件:struts2-json-plugin-x.x.x.x.jar。

[java] view plain copy
  1. public class HelloAction extends ActionSupport {  
  2.   
  3.     private String name;  
  4.       
  5.     private int age;  
  6.       
  7.     private List<String> friends;  
  8.       
  9.     public String getName() {  
  10.         return name;  
  11.     }  
  12.   
  13.     public int getAge() {  
  14.         return age;  
  15.     }  
  16.   
  17.     public List<String> getFriends() {  
  18.         return friends;  
  19.     }  
  20.   
  21.     public String execute() throws Exception {  
  22.         this.name = "xxg";  
  23.         this.age = 22;  
  24.         this.friends = new ArrayList<String>();  
  25.         this.friends.add("姚明");  
  26.         this.friends.add("林丹");  
  27.         return SUCCESS;  
  28.     }  
  29.   
  30. }  
[html] view plain copy
  1. <package name="main" namespace="/" extends="json-default">  
  2.     <action name="hello" class="com.xxg.HelloAction" method="execute">  
  3.         <result name="success" type="json"></result>  
  4.     </action>  
  5. </package>  
在package中extends应该改为json-default而不是struts-default,result的type设为json。

通过浏览器打开这个页面可以看到这个json:

{"age":22,"friends":["姚明","林丹"],"name":"xxg"}




其实struts2通过action返回json挺简单的,但是就是老要忘,所以索性写在博客上。好的,开始。

首先是引入必须的jar包:

  struts2-json-plugin-2.3.24.jar

然后我们再写一个简单的action

复制代码
package com.mz.action;import com.mz.entity.User;import com.opensymphony.xwork2.ActionSupport;public class JsonAction extends ActionSupport{        private User user;    public String execute() {        user = new User();        user.setId(123);        user.setUsername("Irasel");        return SUCCESS;    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }        }
复制代码

 

就是一个很简单的action,给user对象赋值然后传回然后返回success。

User类里面有两个属性,一个id一个username,以及对应的get和set方法。

主要是配置配置文件:

复制代码
 <!-- 配置一个返回json字符串的action -->    <package name="resultJson" namespace="/" extends="json-default">        <action name="resultJson" class="com.mz.action.JsonAction">            <result name="success" type="json">                <!--root是ognl表达式的一部分不能更换  -->                <param name="root">user</param>            </result>        </action>    </package>
复制代码

 

这里的root是ognl表达式的一个属性,不能换!不能换!不能换!(重要的事情说三遍)

启动tomcat,访问:http://localhost:8080/spring-struts/resultJson(这里的路径可能不一样)

如图所示:

 

这样子就算成功在前台返回json对象了,ok!


原创粉丝点击