struts2框架通过jQuery实现AJAX应用

众所周知,在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.0</modelVersion>
    <groupId>com.hzc</groupId>
    <artifactId>struts_2400_AJAX_jQuery</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-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.16</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(22);
        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中成员变量。如有读者有更好的办法请留下你的想法,写这博客的用意就是抛砖引玉。

时间: 2024-10-13 09:19:16

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

struts2+jquery 实现ajax登陆

一.新建一个web项目:test,配置好struts2的环境(详细配置见:http://www.cnblogs.com/wuweidu/p/3841297.html)       导入Jquery的js文件到项目 二.在com.action包下,新建一个loginAction.java loginAction.java的代码如下 package com.action; import org.apache.struts2.convention.annotation.Action; import o

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

技术领域很多东西流行,自然有流行的道理,这几天用了jQuery,深感有些人真是聪明绝顶,能将那么多技术融合的如此完美. 首先明确个概念: jQuery是什么:是使用javascript语言开发的,用于满足项目前台各种操作需要的js程序文件.也就是说,jQuery基本上就是个js程序集,基础核心是jQuery.js文件. l        当然根据不同的版本具体的表现形式: jQuery.1.6.js或者jquery-1.5.1.js 这个是版本号的不同,具体有哪些区别,还没发现. l      

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

这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前端使用jquery ajax与接口进行交互,使用POST与GET请求时都正常,而Request Method使用PUT或DELETE请求时,直接爆“HTTP Error 405: Method Not Allowed”错误.而ajax提交的Request Method值DELETE也变成了OPTIONS了. 度娘了好多答案,要么说是浏览器不支持,要么说自己重新封装jquery,还有其他的一些方法...

Struts2 整合jQuery实现Ajax功能(2)

1.1.1   Action利用struts2-json-plugin-X.X.X.jar响应Json格式信息: 1.      function removerecordbyid(recordid){ 2.              $("#showallrecord table tr").each( 3.              function(){ 4.                var seq=parseInt($( this ).children( "td&

Struts2+Jquery+实现Ajax无刷新验证用户名是否存在

小弟之前一直搞不明白Struts2+Jquery+实现Ajax无刷新验证用户名该怎么弄,后来经过努力,终于搞定了,应注意struts配置文件的内容,好了直接上代码了 页面代码 <body> <s:form action="registAction" method="post" namespace="/user"> <table> <tr> <td>UserName</td>

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

package loaderman.provincecity; import java.io.IOException; import java.util.LinkedHashSet; import java.util.Set; import com.opensymphony.xwork2.ActionSupport; /** * 控制器 * @author AdminTC */ public class ProvinceCityAction extends ActionSupport{ priv

JQuery中Ajax的操作

Java软件开发中,后台中我们可以通过各种框架,像SSH等进行对代码的封装,方便我们对Java代码的编写,例如,Struts,SpringMVC对从前台到action的流程进行封装控制,使我们只需要进行一些简单配置就可以实现:而Spring进行了对各种对象的管理进行封装,提供了AOP编程的方式,大大方便了我们:而Hibernate和IBatis则是对JDBC代码进行封装,不需要我们每次都写那些重复而繁杂的JDBC代码. 前台呢,对于页面一些效果,验证等,我们都是通过JavaScript语言进行完

JQuery使用Ajax内存溢出问题总结

最近做一个项目,环境是struts2.3.16,spring3.0,mybatis2.3 当我使用JQuery的ajax方法提交请求返回个对象时,遇到了内存泄露的问题,这个问题困扰了我一个多星期: 开始调用ajax方法,反应比较慢,大概4~5秒之后才会出现效果. 重复几次调用之后,浏览器直接崩溃,系统开始卡,一步一卡... 打开cpu监视情况发现,当调用ajax方法,内存从百分之56直接飞到87.. 随之MyEclipse后台爆出java.lang.OutOfMemoryError: PermG

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

AJAX: A :Asynchronous [eI`sinkrenes] 异步 J :JavaScript    JavaScript脚本语言 A: And X :XML 可扩展标记语言 AJAX现在貌似已经无处不在了,其实自从web2.0的广泛发展带来了AJAX的发展.我们目前的客户端可以分为胖客户端(C/S).廋客户端(B/S), PS:胖客户泛指客户端承担一部分计算工作减轻服务器压力.典型应用 :C / S架构的客户端.瘦客户泛指客户端不承担任何计算工作,完全依赖服务器端计算.典型应用:B