Struts2之—集成Json插件实现Ajax

时间:2021-08-18 22:04:50

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

本篇博客提出Struts2的集成Json插件,非常好的攻克了自己定义结果集带来的问题。

一,引题

1,Json数据格式简单介绍

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

2。Struts2返回JSON数据到client

这是最常见的需求,在AJAX大行其道的今天。向server请求JSON数据已成为每个WEB应用必备的功能。抛开Struts2暂且不提,在常规WEB应用中由server返回JSON数据到client有两种方式:一是在Servlet中输出JSON串,二是在JSP页面中输出JSON串。上文提到。server像client返回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被返回client的——这些
工作通过简单的xml配置及jar包引用,Struts2会帮我们做的更好。

二。一,4的实现步骤:

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

——

Struts2之—集成Json插件实现Ajax

——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格式的数据。 并返回给client物理视图的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

结果:

Struts2之—集成Json插件实现Ajax

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFueHVlbWluMTIzNDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

Struts2之—集成Json插件实现Ajax

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFueHVlbWluMTIzNDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

四。总结

使用集成Json插件实现Ajax的优点

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

  1. struts2中使用json插件实现ajax交互

    json插件可以简单的实现ajax交互,避免了使用struts2-dojo-plugin.jar包时带来的struts2.x版本冲突问题.并且减少了使用ajax标签时需要的繁琐的配置包括web.xml ...

  2. Struts2:Json插件&lowbar;Ajax

    lib中加入包 struts2-json-plugin-2.3.20.jar json插件有自己的过滤器.返回类型 WebRoot下新建js文件夹 放入json2.js json2.js是一个著名开源 ...

  3. 【转】Struts2中json插件的使用

    配置注意点: 在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar) 在struts.xml配置文件中,包需要继承js ...

  4. Struts2之Json插件的使用

    时间:2017-1-15 02:27 --普通方式处理异步请求:    ServletActionContext.getResponse().getWriter().print("aa&qu ...

  5. 【Struts2】Json插件使用

    一.使用步骤 1.1 引入依赖 1.2 在struts.xml文件中配置 一.使用步骤 1.1 引入依赖 <!-- https://mvnrepository.com/artifact/org. ...

  6. 关于Strut2内置Json插件的使用

    配置注意点: 在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar) 在struts.xml配置文件中,包需要继承js ...

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

    上一篇说到怎样在struts2中进行上传下载.我们使用了struts的标签通过表单提交的方式,但大家知道表单提交会造成页面总体的刷新,这样的方式很不友好,那我们今天就来说说怎样结合ajax方式进行异步 ...

  8. &lbrack;jQuery&rsqb;jQuery DataTables插件自定义Ajax分页实现

    前言 昨天在博客园的博问上帮一位园友解决了一个问题,我觉得有必要记录一下,万一有人也遇上了呢. 问题描述 园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分 ...

  9. JQuery 插件之Ajax Autocomplete(ajax自动完成)搜索引擎自动显示下拉框

    平时用百度,谷歌搜索的时候 会有一个下 拉列表进行提示 这是一个非常好的功能 本文要介绍的这个JQuery 插件 名叫Ajax Autocomplete 顾名思义 ajax 也就是用ajax的方式获取 ...

随机推荐

  1. &quot&semi;&lowbar;OBJC&lowbar;CLASS&lowbar;&dollar;&lowbar;AddFriendPageItem&quot&semi;&comma; referenced from&colon;

    该出错是指:有些头文件没有导入到  TARGETS  中的Build Phases - Compile Sources 中

  2. Model-View-Controller&lpar;MVC&rpar; is an architectural pattern that frequently used in web applications&period; Which of the following statement&lpar;s&rpar; is&lpar;are&rpar; correct&quest;

    Model-View-Controller(MVC) is an architectural pattern that frequently used in web applications. Whi ...

  3. 【操作系统】linux创建子进程--fork&lpar;&rpar;方法

    (1)fork()的定义 fork()函数是Unix中派生新进程的唯一方法,声明如下: #include <unistd.h> pid_t fork(void); 我们需要理解的是,调用一 ...

  4. Mac下一个svn提交&period;a文件

    Mac在版本控制工具Versions非常方便.一些库有.a文件必须提交svn,commit它发现被忽略的,不能提交没有这个文件.然后通过设置.VEIW->SHOW IGNORED ITEMS选, ...

  5. ios navigationController代码创建

    1.新建类文件FirstViewController,subClass of:UIViewController 2.新建类文件MYNavigationController,subClass of:UI ...

  6. 【开发技术】Get请求和Post请求区别

    a.Get请求是通过URL请求来提交表单数据的:Post是通过HTTP中的POST机制将表单中的数据提交到Action所定制的程序,如果有附件需要用Post方式. b.Get适用于传输数据量小于1K数 ...

  7. Studio 一些使用

    1,配置: W:\android_tools\AndroidStudio2.1.3_SDK\android-studio-ide-141.2456560-windows\android-studio\ ...

  8. Linux管线命令 - cut&comma;grep&comma;sort&comma;uniq&comma;wc&comma;tee&comma;tr&comma;col&comma;join&comma;paste&comma;expand&comma;split&comma;xargs

    在每个管线后面接的第一个数据必定是『命令』喔!而且这个命令必须要能够接受 standard input 的数据才行,这样的命令才可以是为『管线命令』,例如 less, more, head, tail ...

  9. 001&lowbar;a记录和canme的区别

    1.什么是域名解析? 域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程.IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址.域名的解 ...

  10. ASP&period;NET MVC显示UserControl控件&lpar;扩展篇&rpar;

    昨晚Insus.NET有怀旧一下<念念不忘,ASP.NET MVC显示WebForm网页或UserControl控件>http://www.cnblogs.com/insus/p/3641 ...