- 浏览: 514541 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
jxq0816:
请问博主task:executortask:scheduler ...
Spring任务调度器之Task的使用 -
eithree:
thanks you so much! This proble ...
解决ECShop transport.js与jQuery冲突 -
周聪龙:
按照你的配置,点击登录按钮没反应呀,所有的Ip都改为自己的了呀 ...
自定义客户端登录CAS服务器-iframe实现 -
周聪龙:
denglihong 写道shangliuyan 写道我点击提 ...
自定义客户端登录CAS服务器-iframe实现 -
nihaonihao1987:
...
Spring任务调度器之Task的使用
1.导入jsonplugin包
Struts2.1.6:导入jsonplugin-0.34.jar包(下载包)和commons-logging-1.0.4.jar(Struts2 lib下有)
Struts2.1.8导入struts2-json-plugin-2.1.8.1.jar(Struts2 lib下有)
Struts2.2.1导入struts2-json-plugin-2.2.1.jar(Struts2 lib下有)
2.struts.xml中package 中extends="json-default"
- <package name="json" namespace="/json" extends="json-default">
3.result 中type="json"
- <!-- 封装所有的get开头的方法 -->
- <result type="json" name="user">
- </result>
- <!-- 只包含user.id属性 -->
- <result type="json" name="user">
- <param name="includeProperties">
- user\.id
- </param>
- </result>
- <!-- 返回user的JSON List列表,其中userInfosList是action中的一个List类型的属性,userInfosList \[\d+\]\. userName表示,userInfosList中存储的对象0..end的userName属性(list中存储的对象必须有userName属性)
- -->
- <result name="success" type="json">
- <param name="includeProperties">
- userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
- </param>
- </result>
- <!-- 不包含user属性 -->
- <result type="json" name="list">
- <param name="excludeProperties">
- user
- </param>
- </result>
- <!-- 根对象只包含user -->
- <result type="json">
- <param name="root">
- user
- </param>
- </result>
- <!-- "root"对象中父类的field(属性)不会(会?) 默认存放到 JSON数据中,如果不想这样做,需要在配置时指定 ignoreHierarchy 为 false: -->
- <result type="json">
- <param name="ignoreHierarchy">false</param>
- </result>
4.避免使用get开头的action方法
在属性get方法上面加
@JSON(name="newName")json中的名称
@JSON(serialize=false) 该属性不被加入json
@JSON(format="yyyy-MM-dd") 格式化日期
5.在action中赋值,返回对应的result字符串
说明:
为什么要用includeProperties或excludeProperties 参数:主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回 。如果不用<param name="includeProperties">或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callback function,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、includeProperties 和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。
总结:
action中避免使用get开头的action方法,去掉action中的接口的get方法。 为json类型的result配置includeProperties, excludeProperties等参数.
JSON 是一个插件,它允许我们在JavaScript中异步调用Action,它提供了一个json的返回结果类型(ResultType),只要为Action指定类型为
json返回结果类型,那么这个响应结果不需要返回给任何视图层,JSON会将Action里的状态信息序列化为JSON指定格式的数据,并将该数据返回
给JAVASCRIPT,这样可以完成AJAX的应用交互.
要应用 JSON 插件,首先需要到
http://code.google.com/p/jsonplugin/downloads/list
下载最新JSON插件,我这里下载的是jsonplugin-
0.33.jar ,将该文件拷到WEB工程的LIB目录,当然还需要下载Struts2 类库,可以到http://struts.apache.org/download.cgi#struts2014
这里去下载,下载完后解压缩,将JAR拷到WEB工程的LIB目录,不能少于以下几个JAR文件(struts2-api-2.0.5.jar、struts2-core-2.0.5.jar、
ognl-2.6.9.jar、xwork-2.0.0.jar、commons-logging-1.1.jar、freemarker-2.3.8.jar,具体文件名视版本而定),接下来我们可以写个应用
来试验,本例程分为二步来写,第一步实现返回一个结果对象,第二步实现返回一个结果列表,首先来看下返回结果对象的实现.
我们需要先建立一个JavaBean 为值对象,用来将用户的基本数据封装进去,该实体在结果对象和结果列表中都会使用到
Users.java 代码如下:
- package com.jsontostruts2.vo;
- /**
- * <p>
- * 创 建 人:ChenTao
- * <p>
- * 创建日期:2009-5-18 下午05:24:48
- * <p>
- */
- public class Users {
- private Integer userId;
- private String userName;
- private String sex;
- public Users() {
- }
- // get... set.... 略......
- }
实现 UserAction.java 源码如下:
- package com.jsontostruts2.action;
- import com.googlecode.jsonplugin.annotations.JSON;
- import com.jsontostruts2.vo.Users;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * <p>
- * 创 建 人:ChenTao
- * <p>
- * 创建日期:2009-5-18 下午05:22:50
- * <p>
- */
- @SuppressWarnings("serial")
- public class UserAction extends ActionSupport {
- private Users users;
- @JSON(name="USER")
- public Users getUsers() {
- return users;
- }
- public void setUsers(Users users) {
- this.users = users;
- }
- @Override
- public String execute() throws Exception {
- users = new Users();
- users.setUserId(1);
- users.setUserName("ctojxzsycztao");
- users.setSex("男人");
- return SUCCESS;
- }
- }
接下来我们需要配置 struts.xml 文件,为了在现下面不再重复写该文件,这里我将结果对象和列表的请求控制一并贴上来,文件内容:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <!-- 注意这里扩展不再是 struts-default,而是 json-default -->
- <package name="jsonManager" extends="json-default">
- <!-- 返回结果类型为 json -->
- <action name="userJson" class="com.jsontostruts2.action.UserAction">
- <result type="json"/>
- </action>
- <!-- 该action在返回列表时添加进来的 -->
- <action name="jsonlist" class="com.jsontostruts2.action.UserListAction">
- <result type="json"/>
- </action>
- </package>
- </struts>
能后创建web.xml 和 userjson.jsp:
- web.xml :
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="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">
- <filter>
- <filter-name>Struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>Struts2</filter-name>
- <url-pattern>*.action</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>Struts2</filter-name>
- <url-pattern>*.jsp</url-pattern>
- </filter-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
userjson.jsp :
- <%@ page language="java" contentType="text/html;charset=UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>json 返回对象处理</title>
- <script language="javascript">
- var xmlHttp = false;
- try{
- xmlHttp = new ActiveXObject("msxml2.XMLHTTP");
- }catch(e1){
- try{
- xmlHttp = new ActiveXObject("microsoft.XMLHTTP");
- }catch(e2){
- try{
- xmlHttp = new XMLHttpRequest();
- }catch(e3){
- xmlHttp = false;
- }
- }
- }
- if(!xmlHttp){
- alert("create xmlHttpRequest fail");
- }
- function jsonResult(){
- xmlHttp.onreadystatechange = function(){
- if(xmlHttp.readyState == 4) {
- // 将 JSON 对象转换为JSON字符串,需要注意调用eval函数时必须使用"("和")"将JSON字符串括起来,否
- 则会出错
- var userObj = eval('(' + xmlHttp.responseText + ')');
- var userStr = "<table border=0>";
- userStr += '<tr><td><b>userId</b></td><td>' + userObj.USER.userId + '</td></tr>';
- userStr += ('<tr><td><b>userName</b></td><td>' + userObj.USER.userName + '</td></tr>');
- userStr += ('<tr><td><b>sex</b></td><td>' + userObj.USER.sex + '</td></tr>');
- userStr += "</table>";
- document.getElementById('jsonDiv').innerHTML = userStr;
- }
- }
- xmlHttp.open("POST","userJson.action",true);
- xmlHttp.send(null);
- }
- </script>
- </head>
- <body>
- <div id="jsonDiv"></div>
- <input type="button" value="show" onclick="jsonResult();">
- </body>
- </html>
现在你可以将应用发布到你的容器当中输入 http://localhost:8080/struts2ToJson/userjson.jsp 点show,这个时候你可以看到你想要的结
果,接来实现下返回列表的做法,当然与返回对象会有所不同,我们需要将一个List对象转换为一个JSON规范的字符串,能后发送给客户端的JS,
首先建立一个将List 转换为指定字符串的工具类,该工具是在一个无意间从网上看到就拿来用了,经过少许修改,为了减少代码行数我将只贴
出适用于本示例的代码:
JsonUtil.java :
- package com.jsontostruts2.util;
- import java.beans.IntrospectionException;
- import java.beans.Introspector;
- import java.beans.PropertyDescriptor;
- import java.util.List;
- /**
- * <p>
- * @author ChenTao
- * <p>
- * @Date 2009-5-18 下午05:47:27
- * <p>
- */
- public class JsonUtil {
- /**
- * @param object
- * 任意对象
- * @return java.lang.String
- */
- public static String objectToJson(Object object) {
- StringBuilder json = new StringBuilder();
- if (object == null) {
- json.append("\"\"");
- } else if (object instanceof String || object instanceof Integer) {
- json.append("\"").append((String)object).append("\"");
- } else {
- json.append(beanToJson(object));
- }
- return json.toString();
- }
- /**
- * 功能描述:传入任意一个 javabean 对象生成一个指定规格的字符串
- *
- * @param bean
- * bean对象
- * @return String
- */
- public static String beanToJson(Object bean) {
- StringBuilder json = new StringBuilder();
- json.append("{");
- PropertyDescriptor[] props = null;
- try {
- props = Introspector.getBeanInfo(bean.getClass(), Object.class)
- .getPropertyDescriptors();
- } catch (IntrospectionException e) {
- }
- if (props != null) {
- for (int i = 0; i < props.length; i++) {
- try {
- String name = objectToJson(props[i].getName());
- String value = objectToJson(props[i].getReadMethod().invoke(bean));
- json.append(name);
- json.append(":");
- json.append(value);
- json.append(",");
- } catch (Exception e) {
- }
- }
- json.setCharAt(json.length() - 1, '}');
- } else {
- json.append("}");
- }
- return json.toString();
- }
- /**
- * 功能描述:通过传入一个列表对象,调用指定方法将列表中的数据生成一个JSON规格指定字符串
- *
- * @param list
- * 列表对象
- * @return java.lang.String
- */
- public static String listToJson(List<?> list) {
- StringBuilder json = new StringBuilder();
- json.append("[");
- if (list != null && list.size() > 0) {
- for (Object obj : list) {
- json.append(objectToJson(obj));
- json.append(",");
- }
- json.setCharAt(json.length() - 1, ']');
- } else {
- json.append("]");
- }
- return json.toString();
- }
- }
UserListAction.java:
- package com.jsontostruts2.action;
- import java.util.ArrayList;
- import java.util.List;
- import com.googlecode.jsonplugin.annotations.JSON;
- import com.jsontostruts2.util.JsonUtil;
- import com.jsontostruts2.vo.Users;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * <p>
- * 创 建 人:ChenTao
- * <p>
- * 创建日期:2009-5-18 下午05:45:42
- * <p>
- */
- @SuppressWarnings("serial")
- public class UserListAction extends ActionSupport {
- /* 用于存放JSON生成后的字符串结果 */
- private String jsonResult;
- @JSON(name="JSONRESULT")
- public String getJsonResult() {
- return jsonResult;
- }
- public void setJsonResult(String jsonResult) {
- this.jsonResult = jsonResult;
- }
- @Override
- public String execute() throws Exception {
- List<Users> userList = new ArrayList<Users>();
- Users users = new Users();
- users.setUserId(1);
- users.setUserName("ctojxzsycztao");
- users.setSex("男人");
- userList.add(users);
- users = null;
- users = new Users();
- users.setUserId(2);
- users.setUserName("rain");
- users.setSex("女人");
- userList.add(users);
- users = null;
- users = new Users();
- users.setUserId(3);
- users.setUserName("mimi");
- users.setSex("女人");
- userList.add(users);
- jsonResult = JsonUtil.listToJson(userList);
- System.out.println(jsonResult);
- return SUCCESS;
- }
- }
接下来将要写一个jsonList.JSP页面来将结果承现给用户
- <%@ page language="java" contentType="text/html;charset=UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>json 返回列表处理</title>
- <script language="javascript">
- var xmlHttp = false;
- try{
- xmlHttp = new ActiveXObject("msxml2.XMLHTTP");
- }catch(e1){
- try{
- xmlHttp = new ActiveXObject("microsoft.XMLHTTP");
- }catch(e2){
- try{
- xmlHttp = new XMLHttpRequest();
- }catch(e3){
- xmlHttp = false;
- }
- }
- }
- if(!xmlHttp){
- alert("create xmlHttpRequest fail");
- }
- function jsonListResult(){
- xmlHttp.onreadystatechange = function(){
- if(xmlHttp.readyState == 4) {
- var userList = eval('(' + xmlHttp.responseText + ')');
- var user = eval(userList.JSONRESULT);
- var result = "<table border=0>";
- result += "<tr><td>userId</td><td>userName</td><td>sex</td></tr>";
- for(var i=0;i<user.length;i++) {
- result += "<tr>";
- result += "<td>"+user[i].userId +"</td>";
- result += "<td>"+user[i].userName+"</td>";
- result += "<td>"+user[i].sex+"</td>";
- result += "</tr>";
- }
- result += "</table>";
- document.getElementById('jsonDiv').innerHTML = result;
- }
- }
- xmlHttp.open("POST","jsonlist.action",true);
- xmlHttp.send(null);
- }
- </script>
- </head>
- <body>
- <div id="jsonDiv"></div>
- <input type="button" value="show list" onclick="jsonListResult();">
- </body>
- </html>
现在将工程重复部署到WEB容器,启动:在浏览器中输入 http://localhost:8080/struts2ToJson/jsonList.jsp 点 show list按钮,看看结果
首先在http://code.google.com/p/jsonplugin/downloads/list下载jsonplugin-0.34.jar
之后将jsonplugin-0.34.jar放入WEB-INF/lib中
之后使用prototype.js
Action代码
- package com.platform.Action.SDCategory;
- import java.util.HashMap;
- import java.util.Map;
- import com.googlecode.jsonplugin.annotations.JSON;
- import com.opensymphony.xwork2.ActionSupport;
- public class JsonExampleAction extends ActionSupport
- {
- private String field1;
- private transient String field2;
- private String field3;
- private int[] ints = {10,20};
- private Map map = new HashMap();
- private String customName = "fini";
- public String getField1()
- {
- return field1;
- }
- public void setField1(String field1)
- {
- this.field1 = field1;
- }
- public String getField2()
- {
- return field2;
- }
- public void setField2(String field2)
- {
- this.field2 = field2;
- }
- public String getField3()
- {
- return field3;
- }
- public void setField3(String field3)
- {
- this.field3 = field3;
- }
- public int[] getInts()
- {
- return ints;
- }
- public void setInts(int[] ints)
- {
- this.ints = ints;
- }
- public Map getMap()
- {
- return map;
- }
- public void setMap(Map map)
- {
- this.map = map;
- }
- @JSON(name="newName")
- public String getCustomName()
- {
- return customName;
- }
- public void setCustomName(String customName)
- {
- this.customName = customName;
- }
- public String execute() throws Exception
- {
- map.put("name", "fuck");
- return SUCCESS;
- }
- }
struts.xml
- <package name="json" extends="json-default">
- <action name="QueryChildCategory" class="QueryChildCategoryAction">
- <result type="json"></result>
- </action>
- </package>
jsp页面
- <script src="prototype.js" type="text/javascript"></script>
- <script type="text/javascript">
- function gotClick()
- {
- var url = 'JsonExample.action';
- var params = Form.serialize('form1');
- var myAjax = new Ajax.Request(url,{method:'post',parameters:params,onComplete:processResponse,asynchronous:true});
- }
- function processResponse(request)
- {
- var json = request.responseText
- var jsonData = eval("("+json+")");
- document.getElementById("show").innerHTML=jsonData["field1"]; }
- </script>
- <form id="form1" name="form1" method="post">
- <input type="text" name="field1" id="field1"/><br>
- <input type="text" name="field2" id="field2"/><br>
- <input type="text" name="field3" id="field3"/><br>
- <input type="button" value="提交" onClick="gotClick();"/>
- </form>
- <div id="show"></div>
或链接调用
- script src="prototype.js" type="text/javascript"></script>
- <script type="text/javascript">
- function gotClick()
- {
- var url = 'JsonExample.action?no-cache='+Math.random();
- var params = "";
- var myAjax = new Ajax.Request(url,{method:'get',parameters:params,onComplete:processResponse});
- }
- function processResponse(request)
- {
- var json = request.responseText
- var jsonData = eval("("+json+")");
- //document.getElementById("show").innerHTML=jsonData["fuck"];
- document.getElementById("show").innerHTML=request.responseText;
- }
- </script>
- <a href="javascript:void(0)" onclick="gotClick();">afafa</a>
- <div id="show"></div>
var url = 'JsonExample.action?no-cache='+Math.random();无缓存
由于json-plugin会把action中的所有getter方法的属性序列化成json串,所以在整合spring开发时,需要将action中service对象的getter方法去掉,或者在前面增加@JSON(serialize=false),否则页面会报错com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException
发表评论
-
【转】Struts2 result返回类型(type)小结
2012-08-06 11:42 1519在struts2的返回结果配置中,我们大部分情况使用默认 ... -
自定义struts2的url标签的生成
2012-05-08 17:36 2838本文是针对struts2的struts-tags中的s:url ... -
【转】OGNL表达式struts2标签说明
2011-12-26 22:57 1482一、什么是OGNL,有什么特点? OGNL(Objec ... -
浅谈Struts2数据下载和AJAX服务端接口的实现
2011-12-04 21:13 4016在struts2中实现文件或特 ... -
分享struts2做的一个分页按钮样式
2011-06-03 01:00 1883首先是分页内容的辅助类 package cn.com. ... -
【转】Struts2+Spring的UnitTest编写(使用StrutsTestCase的子类StrutsSpringTestCase)
2011-01-16 00:37 8905我们都知道struts2有自己的对象工厂即obe ...
相关推荐
学习`struts2-json-plugin`的源码可以帮助开发者了解Struts2如何处理JSON数据,如何进行自定义扩展,以及如何优化JSON相关的性能。同时,对于理解MVC框架的工作流程和JSON在网络应用中的应用也有很大帮助。深入研究...
Struts2、JSON和AJAX是Web开发中的关键技术,它们的整合可以实现高效的数据交互和动态页面更新。本文将深入探讨这些技术以及如何在实际项目中整合它们。 **Struts2** 是一个基于MVC(Model-View-Controller)设计...
Struts2是一个非常流行的Java Web框架,它极大地简化了企业级应用的开发。在这个"Struts2 Json示例...通过学习这个例子,开发者可以更好地理解Struts2与JSON的集成,以及如何利用Maven来简化Java项目的构建流程。
通过查看和学习这些代码,可以更直观地理解Struts2、JSON和jQuery在联动效果实现中的具体应用。 总的来说,"联动(struts2+json+jquey)"是一种高效且实用的技术方案,它结合了后台处理、数据传输和前端渲染的优点,...
最后,`课堂笔记20151107-json.txt`可能是学习过程中的笔记,记录了如何配置和使用Struts2的JSON功能,可能包括了如何在JSP页面中使用AJAX请求JSON数据,以及如何解析和显示这些数据。 总结来说,这个“struts2_...
总的来说,Struts2与JSON的结合使用,让Java Web开发更加灵活和高效。通过学习和掌握这部分知识,开发者可以创建更富交互性的Web应用,提高用户体验。同时,理解JSON Lib库如何工作,也有助于在其他Java项目中处理...
Struts2是一个流行的Java web框架,它主要用于构建和维护可扩展、模块化且易于管理的企业级应用程序。在Struts2中,与JSON...通过学习和实践这个案例,可以更好地掌握Struts2与JSON的集成,提升后端开发技能。
Struts1是一个经典的Java Web框架,它为...通过学习这个实例,你可以掌握Struts1的MVC模式,理解数据库设计,以及掌握JSON和Ajax在实际项目中的应用。实践这些知识点,对于提升你的Java Web开发技能是非常有帮助的。
在Web开发中,jQuery、Struts2、Ajax和JSON是常见的技术组合,它们协同工作以实现动态、异步的数据交互。本示例将探讨如何利用jQuery的Ajax功能向Struts2框架发送请求,并以JSON格式接收响应数据。下面我们将详细...
本篇将深入探讨`JsonUtils.java`源代码,以及Struts2与JSON插件的结合使用。 首先,`JsonUtils`是Struts2 JSON插件中的核心工具类,主要负责将Java对象转换为JSON格式的字符串。在`JsonUtils.java`中,我们可以看到...
在Android开发中,与服务器进行数据交互是常见的需求,JSON作为一种轻量级的数据交换格式,被广泛用于客户端和服务器之间的通信...通过这两个示例,你可以更直观地学习和理解Android与Struts2之间JSON数据交换的过程。
Struts2JQueryJson是一个基于Struts2框架的项目,主要展示了如何在前端使用JQuery库来处理...通过学习这个项目,开发者可以深入理解JSON在Web开发中的作用,以及如何利用Struts2和JQuery提高应用程序的性能和用户体验。
2. **JSON与Struts2的结合**:Struts2 Action执行后返回一个JSON字符串,这个字符串被jQuery AJAX请求接收。通过Struts2的插件,如struts2-json-plugin,可以在Action类中直接返回一个包含JSON数据的对象,Struts2会...
Struts2是一个流行的Java web开发框架,它提供了一种组织和控制MVC(模型-视图-控制器)架构的方式,使开发者能够构建可...通过分析和理解这个示例,开发者可以学习到如何有效地在Struts2应用中集成和使用JSON功能。
在"struts2返回json格式的数据练习"这个实例中,我们将学习如何配置Struts2框架以支持JSON输出,并创建一个简单的示例来展示这一过程。 首先,我们需要在Struts2项目的`pom.xml`文件中添加JSON插件依赖。Struts2的...
在"struts2jsonajax"项目中,我们看到Struts2与JSON和AJAX进行了整合。Struts2通过Action和Result来处理用户的请求,并返回响应。在这个整合中,Struts2 Action将处理业务逻辑后,会以JSON格式返回数据,而非传统的...
这个"Struts2 Tiles JSON jQuery Convention"的资料包可能是为了展示如何在Struts2框架下结合Tiles、JSON和jQuery实现高效、灵活的Web应用开发。下面将详细解释这些技术的结合以及它们如何协同工作。 1. **Struts2*...
Struts2、JSON和jQuery是Web开发中的三个关键组件,它们在构建动态、交互式的Web应用程序中发挥着重要作用。...通过学习和实践这个实例,开发者可以更好地理解和掌握Struts2、JSON和jQuery在实际项目中的运用。
在这个实例中,SSH2与jQuery结合,实现了基于Ajax的JSON数据通信。 jQuery是一个流行的JavaScript库,它简化了DOM操作、事件处理以及AJAX交互。在JSON与Struts2的结合中,jQuery可以发送异步请求到服务器,以JSON...
总的来说,"Struts2Json example"是一个帮助开发者理解并实践Struts2框架与JSON集成的项目。通过学习这个示例,你可以掌握如何在服务器端生成JSON响应,以及如何在客户端消费这些响应,从而提升你的Web应用的交互性...