Struts2之—集成Json插件实现Ajax

   上篇博客介绍了Struts2中自定义结果集实现Ajax,也分析了它的缺点:这样自定义的结果集,写死了,不能做到客户端需要什么数据就传什么数据;Struts2之—自定义结果集实现ajax

本篇博客提出Struts2的集成Json插件,很好的解决了自定义结果集带来的问题。

一,引题

1,Json数据格式简介

因为JSON是脱离语言的理想的数据交换格式,所以它被频繁的应用在客户端与服务器的通信过程中,这一点是毋庸置疑的。而在客户端与服务器的通信过程中,JSON数据的传递又被分为服务器向客户端传送JSON数据,和客户端向服务器传送JSON数据,前者的核心过程中将对象转换成JSON,而后者的核心是将JSON转换成对象,这是本质的区别。另外,值得一提的是,JSON数据在传递过程中,其实就是传递一个普通的符合JSON语法格式的字符串而已,所谓的“JSON对象”是指对这个JSON字符串解析和包装后的结果

2,Struts2返回JSON数据到客户端

这是最常见的需求,在AJAX大行其道的今天,向服务器请求JSON数据已成为每一个WEB应用必备的功能。抛开Struts2暂且不提,在常规WEB应用中由服务器返回JSON数据到客户端有两种方式:一是在Servlet中输出JSON串,二是在JSP页面中输出JSON串。上文提到,服务器像客户端返回JSON数据,其实就是返回一个符合JSON语法规范的字符串,所以在上述两种方法中存在一个共同点,就是将需要返回的数据包装称符合JSON语法规范的字符串后在页面中显示。

3StrutsAction使用传统方式返回json数据

省略。。。。。

4Struts集成Json插件,配置json格式结果集,返回json数据

JSON插件是Structs 2 的Ajax插件,通过利用JSON插件,开发者可以很方便,灵活的利用Ajax进行开发。

Json是一种轻量级的数据交换格式,JSon插件提供了一种名为json的Action ResultType 。

使用此结果集的好处:将转换JSON数据的工作交给Struts2来做,与Action中以传统方式输出JSON不同的是,Action只需要负责业务处理,而无需关心结果数据是如何被转换成JSON被返回客户端的——这些
工作通过简单的xml配置及jar包引用,Struts2会帮我们做的更好。

二,一,4的实现步骤:

1,引入Struts包、StrutsJson集成的jar包;struts-plugin.xml配置文件

——

——struts-plugin.xml:配置了集成的Json插件的信息(定义了名为"json"的结果集,和名为"json"的拦截器;注:具体json类型的结果集和拦截器Struts的json插件已经实现了,我们只需在配置文件中将了实现类配置上即可);

<struts>
    <package name="json-default"extends="struts-default">
        <result-types>
             <!--名为"json"的结果集-->
            <result-typename="json" class="org.apache.struts2.json.JSONResult"/>
        </result-types>
        <interceptors>
            <!--名为"json"的拦截器-->
            <interceptorname="json"class="org.apache.struts2.json.JSONInterceptor"/>
        </interceptors>
    </package>
</struts>

2Web.xml

——配置Struts2的核心的过滤器

<web-appversion="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!-- 配置Struts2的核心的过滤器 -->
<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.jsp</welcome-file>
  </welcome-file-list>
</web-app>

3,用户User类——实体类

private Long uid;//用户id
private String username;//用户名
private String sex;//性别

/************get/set方法*******************************************/</span>

publicLong getUid() {
returnuid;
}
publicvoid setUid(Long uid) {
this.uid= uid;
}
publicString getUsername() {
returnusername;
}
publicvoid setUsername(String username) {
this.username= username;
}
publicString getSex() {
returnsex;
}
publicvoid setSex(String sex) {
this.sex= sex;
}

4UserAction.java——处理业务,获取用户

importcom.opensymphony.xwork2.ActionSupport;

public classUserAction extends ActionSupport{
privateLong uid;
privateString username;
privateString password;
privateString sex;
privateString phone;
/**
 * 获取用户
 * @return
 */
publicString showUser(){
User user = new User();//创建一个User对象
user.setUid(1L);
user.setUsername("学敏");
   user.setSex("女");
user.setPassword("123");
user.setPhone("15466554589");

this.uid=user.getUid();
this.sex=user.getSex();
this.password=user.getPassword();
this.phone=user.getPhone();
this.username=user.getUsername();

returnSUCCESS;
}
/*******get/set方法**************************/
publicLong getUid() {
returnuid;
}

publicvoid setUid(Long uid) {
this.uid= uid;
}

publicString getUsername() {
returnusername;
}

publicvoid setUsername(String username) {
this.username= username;
}

publicString getPassword() {
returnpassword;
}

publicvoid setPassword(String password) {
this.password= password;
}

publicString getSex() {
returnsex;
}

publicvoid setSex(String sex) {
this.sex= sex;
}

publicString getPhone() {
returnphone;
}

publicvoid setPhone(String phone) {
this.phone= phone;
}
}

5,配置Strut2的配置文件Struts.xml

——继承json-default,指定Action返回的结果集的类型为:json;

<struts>
      <packagename="userjson" namespace="/"extends="json-default">
           <actionname="userJSONAction_*" method="{1}"class="cn.itcast.oa0909.struts2.action.UserAction">
                    <!--指定返回的结果集的类型为:json -->
                  <resulttype="json"></result>
         </action>
     </package>
</struts>     

(注:一旦为Action指定了该结果处理类型,JSON插件就会自动将Action里的数据序列化成JSON格式的数据, 并返回给客户端物理视图的JavaScript。简单的说,JSON插件允许我们在JavaScript中异步的调用Action, 而且Action不需要指定视图来显示Action的信息显示。 而是由JSON插件来负责具体将Action里面具体的信息返回给调用页面。)

6test.html页面

<html>
  <head>
    <title>tree.html</title>
    <meta http-equiv="keywords"content="keyword1,keyword2,keyword3">
    <meta http-equiv="description"content="this is my page">
    <metahttp-equiv="content-type" content="text/html;charset=UTF-8">
  </head>

  <!--引入js文件 -->
  <scriptsrc="js/jquery-1.4.2.js"></script>
  <scriptsrc="js/test.js"></script>

  <body>
       This is my HTML page.
  </body>
</html>

7test.js文件

//页面加载执行
$().ready(function(){

load();//调用load()函数

});
functionload(){
 $.post("userJSONAction_showUser.action",null, function(data){
            //弹出服务端返回的数据
 alert("编号:"+data.uid+",姓名:"+data.username+",性别:"+data.sex);

     });
  }      

8,运行

地址:http://localhost:8080/Struts2+Ajax/test.html

结果:

三,json插件执行原理时序图

.......待续....

四,总结

使用集成Json插件实现Ajax的好处:

.......待续.......

时间: 2024-10-13 16:06:47

Struts2之—集成Json插件实现Ajax的相关文章

Struts2使用JSON插件实现异步刷新功能

1.说起这个Json插件实现异步刷新的功能折腾了我两天了,本想使用Juery来实现,可是在Jsp页面中始终无法获取json数据,最终无奈之下只能选择了最原始的方式. 2.首先是需要加载struts2-json-plugin-2.3.20.1.jar(因为我用的struts的版本是2.3.20.1)到项目中,接下来就是配置struts.xml配置文件了,而在这个过程中我有遇到一个非常烦恼的事,就是在我配置json的时候,需要继承json-default,始终都报错,这个问题已经在我之前的博客"SS

【转】struts2如何返回json和处理json

以下是小弟的一点研究成果,拿来和大家分享,我用了3到4中struts2操作json找了一种我认识最合理和最简单的,最下面有引用网上的资料,因为都一样就没有必要赘述了,上面都是我自己的实例,如有错误请大家指正. 需要的jar包是struts2.1.8,json插件就是2.1.8的struts2-json-plugin-2.1.8.1,因为json的第三方插件有很多,例如json-lib-2.4-jdk15和json虽然说可以实现json的处理,但是相对来说可能是有点麻烦,而S2自带的插件为简单一点

struts2之json插件

1.引入json插件包 <!-- 引入struts2的json插件 -->     <dependency>         <groupId>org.apache.struts</groupId>         <artifactId>struts2-json-plugin</artifactId>         <version>${struts.version}</version>     </

【Struts2】Json插件使用

一.使用步骤 1.1 引入依赖 1.2 在struts.xml文件中配置 一.使用步骤 1.1 引入依赖 <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-json-plugin --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</arti

13-struts2中json插件使用

struts2中怎样处理异步提交(ajax) 1.原始: HttpServletResponse response = ServletActionContext.getResponse(); response.getWriter().write("hello " + msg); response.getWriter().close(); 2.可以使用struts2中提供的json插件 1.导入json插件包 在struts2的lib包下 struts2-json-plugin-2.3.

Struts2学习(四)利用ajax异步上传

上一篇说到怎样在struts2中进行上传下载.我们使用了struts的标签通过表单提交的方式,但大家知道表单提交会造成页面总体的刷新,这样的方式很不友好,那我们今天就来说说怎样结合ajax方式进行异步上传. 此例中须要的文件能够点击这里下载:struts2异步所需文件 文件说明: ajaxfileupload.js : jquery不支持上传,所以使用这个ajax插件,和 jquery 中的ajax使用方法差点儿相同,从以下代码能够看到. json2.js : 对ajax中的回调參数进行json

关于Strut2内置Json插件的使用

配置注意点: 在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar) 在struts.xml配置文件中,包需要继承json-default,然后把result的类型改为json <package name="xxx" extends="json-default"> <result name="success" type="json&quo

JQuery 插件之Ajax Autocomplete(ajax自动完成)

平时用百度,谷歌搜索的时候 会有一个下 拉列表进行提示 这是一个非常好的功能 本文要介绍的这个JQuery 插件 名叫Ajax Autocomplete 顾名思义 ajax 也就是用ajax的方式获取搜索提示信息然后返回呈现出来 上效果图 闲话不多说直接上代码 本文使用到的文件有: 1,点击 Ajax Autocomplete for jQuery, version 1.1.3  下载 引用文件: <script type="text/javascript" src="

bshare分享插件的ajax应用

在做新浪某个项目的时候,在ajax动态加载的时候,想增加分享功能,采用bshare插件.怎么办呢,看API?可是采用方法调用的时候,不是会重复绑定事件,就是会丢失事件,原因我想在于异步加载的原因. 后来联系客服,不断地调配,终于成功了.分享一下方法 function makeActives(activePage,activeClass)//theClassify为分类参数,在condition里面定义 { //GET请求地址 var category=activeClass, page=acti