众所周知,在web2.0时代,哪个web框架要是不跟AJAX沾点边,都不好意思说自己的框架有多么多么NB,当然struts也不例外,从 struts1开始到现在的struts2也都对AJAX有支持。AJAX的传输过程中的数据格式有很多(eg:xml,html,纯文本,json), 在这里所演示的是通过json格式来传输。有的朋友可能看多相关的技术博客,有的是通过struts2的插件(e.g., JSON plugin, jQuery plugin)来实现的,这种方法从理论上来说肯定开发效率要高些,但是针对一些从来没有接触过AJAX的开发人员来说,理解起来有点难,而笔者是在 struts2的基本jar上,通过json-lib.jar来当做java对象和json对象的桥梁,前端的网页时用的jQuery实现AJAX的收 发。

笔者构建项目是通过Maven来创建的,项目所需的依赖如下:

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.</modelVersion>
<groupId>com.hzc</groupId>
<artifactId>struts_2400_AJAX_jQuery</artifactId>
<packaging>war</packaging>
<version>0.0.-SNAPSHOT</version>
<name>struts_2400_AJAX_jQuery Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.</version>
</dependency> <dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier><!-- 获取json-lib的jar包,必须要指定jdk,是需要区分jdk版本的 -->
</dependency> </dependencies>
<build>
<finalName>struts_2400_AJAX_jQuery</finalName>
</build>
</project>

首我们把思路理一下,试想client对xxx.action发送一个请求, 需要将一个java对象传输到client,struts2根据struts.xml的配置帮我们截获到这个请求,执行execute()方法,一般情况 我们是返回一个页面,但是要做到AJAX就不能进行页面的跳转,所以就通过I/O来输出。struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- Add packages here -->
<constant name="struts.devMode" value="true" /><!--这个标签是设置struts2为debug模式,随时更新改变的编码--> <package name="registration" namespace="/" extends="struts-default">
<action name="login" class="com.hzc.action.UserAction">
<result type="stream">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
</action>
</package> </struts>

指定result的类型为stream,并配置stream的相关参数,需要说明的是<param name="inputName">inputStream</param>,inputStream是action中的成员变量,我们输出的json数据,就是到这个对象中。

UserAction.java:

package com.hzc.action;

import java.io.ByteArrayInputStream;
import java.io.InputStream; import net.sf.json.JSONObject; import com.hzc.model.User;
import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String jsonStr;
private User user;
private InputStream inputStream; public String getJsonStr() {
return jsonStr;
} public void setJsonStr(String jsonStr) {
this.jsonStr = jsonStr;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public InputStream getInputStream() {
return inputStream;
} public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
} @Override
public String execute() throws Exception {
//System.out.println(user.getId());
JSONObject myjJsonObject = new JSONObject().fromObject(jsonStr);
System.out.println( JSONObject.toBean(myjJsonObject, User.class));
User user = new User();
user.setName("hzc");
user.setAge();
JSONObject jsonObject = new JSONObject().fromObject(user);
inputStream = new ByteArrayInputStream(jsonObject.toString().getBytes("UTF-8"));
return SUCCESS;
} }

对于jsonStr这个变量先不要管它,后面再说!

user这个对象先把转换为json字符串(),JSONObject jsonObject = new JSONObject().fromObject(user); 在调用toString()方法就可以往我们创建好的inputStream写json字符串了,当然最后别忘了return SUCCESS;

json输出字符串:{"age":22,"id":0,"name":"hzc"}

在前端,网页通过jquery的底层的$.ajax()方法来发送json到服务器,然后服务器根据前端传来的数据进行相关的业务逻辑,最后再把结果以 json字符串输出。在ajax函数中success:就是回调成功后执行的方法,这里只是简单的把服务器传来的json解析后,填充到文本框中!

$(document).ready(function() {
$("#sendButton").click(function() {
var jsonAttr = $("#userName").attr('name');
var jsonData = $("#userId").val(); $.ajax({
type : "post",
url : "http://192.168.80.1:8080/struts_2400_AJAX_jQuery/login.action",
data : "jsonStr={'id':"+jsonData+"}",
success : function(msg) {
var jsonObject = $.parseJSON(msg);
$("#userName").attr('value', jsonObject[jsonAttr]);
},
error : function(e) {
alert(e);
}
});
}); });
<body>
id:<input type="text" id="userId" /><button id="sendButton">ajax</button><br/>
name:<input type="text" name="name" id="userName"/>
</body>

这里我最后想说一点的是,因为笔者也是初学者,只想到通过在url后面加参数的方法来传递json字符串给服务器(也就是struts2),jsonStr就是对应action中成员变量。如有读者有更好的办法请留下你的想法,写这博客的用意就是抛砖引玉。

struts2框架通过jQuery实现AJAX应用的更多相关文章

  1. Struts2处理(jQuery)Ajax请求

    1. Ajax     Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)时一种创建交互式网页应用的网页开发技术,它并不是一项新的技术,其产生 ...

  2. yii框架下jquery在ajax更新后失效问题

    解决方案,以live的形式重新绑定一次, /***回复隐藏收起效果***/ $(".btn-reply").live('click',function(event){ var da ...

  3. 让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求

    这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前端使用jquery ajax与接口进行交互,使用POST与GET请求时都正常,而Request Meth ...

  4. struts2:使用JQuery、JSON和AJAX处理请求

    目的 在struts2中使用JQuery.JSON.AJAX等技术处理用户请求,并返回结果.返回结果可以是以JSONObject的方式返回,也可以是以JSONArray方式返回结果. 实现 1. 创建 ...

  5. Struts2 整合jQuery实现Ajax功能(1)

    技术领域非常多东西流行,自然有流行的道理.这几天用了jQuery,深感有些人真是聪明绝顶,能将那么多技术融合的如此完美. 首先明白个概念: jQuery是什么:是使用javascript语言开发的,用 ...

  6. 份-城市,基于jQuery的AJAX二级联动,用Struts2整合AJAX【非数据库版】

    package loaderman.provincecity; import java.io.IOException; import java.util.LinkedHashSet; import j ...

  7. Struts2 使用jQuery实现Ajax

    在jQuery中将Ajax相关的操作进行封装,使用时只需在合适的地方调用Ajax相关的方法即可,相比而言,使用jQuery实现Ajax更加简洁,方便 1.$.Ajax()可以通过发送Http请求加载远 ...

  8. 原生态AJAX详解和jquery对AJAX的封装

    AJAX: A :Asynchronous [eI`sinkrenes] 异步 J :JavaScript    JavaScript脚本语言 A: And X :XML 可扩展标记语言 AJAX现在 ...

  9. jquery中ajax的使用

    Java软件开发中,后台中我们可以通过各种框架,像SSH等进行对代码的封装,方便我们对Java代码的编写,例如,Struts,SpringMVC对从前台到action的流程进行封装控制,使我们只需要进 ...

随机推荐

  1. iscsi介绍及iscsi target配置

    iSCSI 主要是透过 TCP/IP 的技术,将储存设备端透过 iSCSI target (iSCSI 目标) 功能,做成可以提供磁盘的服务器端,再透过 iSCSI initiator (iSCSI ...

  2. [转] 在React Native中使用ART

    http://bbs.reactnative.cn/topic/306/%E5%9C%A8react-native%E4%B8%AD%E4%BD%BF%E7%94%A8art 前半个月捣腾了一下Rea ...

  3. Bginfo软件在域的部署和应用

    在企业的IT管理中,很多用户都不知道怎么去查看自己计算机的IP地址.登陆帐户.而对于网络管理人员来说,他们可能需要知道用户在域中登录的一些信息,如那些用户登录过,在什么时间登录,IP和MAC地址是多少 ...

  4. Svg图片在asp网站上的使用

    最近需要做一个动态的根据后台的返回数据而动态显示的导航图,然后我就采用了jquery+ajax+SVG矢量图来实现这个功能. 首先,客户给了个ai的矢量图,我对这一块不懂就找以前同事帮我转成了svg图 ...

  5. 实训第二天早上--hibernate之配置文件映射和注解

    hibernate 逐步优化第一步 只按照步骤来提取的jre包导入错误第二步 继续封装,把增删改查提取出来,同时进行代码的封装HQL语句  be stranger in the code .be fo ...

  6. 关于Entity Framework 5 从数据库生成模型时没有字段注释的解决方法!

    目前用到了EF5进行模型创建,发现从数据库生成过来的实体中并没有包含字段的说明信息(鄙视下微软,这么简单的问题都不给解决下,太粗枝大叶了),网上找到了EFTSQLDocumentation.Gener ...

  7. PTHREAD_MUTEX_INITIALIZER问题

      PTHREAD_MUTEX_INITIALIZER 与 expected expression before ‘{’ token 在进行 Posix thread 编程时,出现以下编译错误:err ...

  8. 关于C#中的DateTime类型的技巧

    * datetime.now.tostring()方法默认的你是无法得到全部的时间的格式的,只能得到日期,得不到具体时间,如果要具体时间,就应该使用 datetime的tostring()重载,dat ...

  9. 测测你适合从事Web前端开发吗

    一般初创的互联网公司最烧钱的时候往往都是刚刚获得风投或融资的时候,因为他们要把钱砸向前端,因为那时候没有客户访问,对于企业来说只有先做好前端技 术.做好客户体验一切才有可能.用户体验做好,才有人访问, ...

  10. Use StringBuilder instead of String as possible as you can.

    If you are care a littile about the time your algorithm cost,you should notice that,you my use Strin ...