昨天和今天学习了XML和JSON型在struts2中的用法,当然,这需要与ajax结合起来使用,在项目中可以用到用户注册验证用户唯一性、无需刷新页面即可刷新部分数据等操作。
虽然就目前来说,JSON要比XML流行,但是可以预见的是,未来一段时间内,还是会有不少的企业依然会用到XML文件,故这里同时讲解了XML文件的生成和在JS中的解析。
我想熟悉Web的人大多数应该都会使用AJAX来与服务器进行异步的交互数据而不影响前台用户的使用,改善了用户体验。
关于用于生成XML和JSON格式数据的原理,我没有详细研究,后面随着学习的深入,我想我会进一步进行研究学习的。
下面开始说明原理:
前台页面通过ajax发请求到后台,根据请求数据创建要返回到前台的对象,然后将对象组装成XML或则JSON格式的数据,送回到前台,在JS中对返回的数据进行解析并显示到页面上。
这两个东西是一起进行学习的,所以对XML和JSON数据格式的学习,放到了同一个工程内。
第一步,新建web工程struts2-ajax,首先加入对应的jar包,总体工程结构及jar包如下:
第二步,配置web.xml文件,指定struts2的filter,配置文件信息如下:
<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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>*.action</url-pattern>
</filter-mapping>
</web-app>
第三步,写界面,我这里为了省事期间,就直接在index.jsp中进行修改,代码如下:
index.jsp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="scripts/jquery-1.4.4.js"></script>
<script type="text/javascript">
function getInfo(){
$.post("getXMLAction.action",
{
name: $("#name").val()
},function(returnedData, status)
{
alert(returnedData + "," + status);
var name = $(returnedData).find("name").text();
var age = $(returnedData).find("age").text();
var height = $(returnedData).find("height").text();
var address = $(returnedData).find("address").text();
var html = "<table width='60%' border='1'>" +
"<tr><td>name</td>" +
"<td>age</td>" +
"<td>height</td>" +
"<td>address</td></tr><tr><td>" + name + "</td><td>" + age + "</td><td>" + height + "</td><td>" + address + "</td></tr></table>";
$("body table:eq(0)").remove();
$("body").append(html);
});
}
function getJsonInfo() {
$.post("getJSONAction.action", {name:$("#name").val()}, function(returnedData, status) {
alert(returnedData);
var html = "<table width='60%' border='1'>" +
"<tr><td>name</td>" +
"<td>age</td>" +
"<td>height</td>" +
"<td>address</td></tr><tr><td>" + returnedData.name + "</td><td>" + returnedData.age + "</td><td>" + returnedData.height + "</td><td>" + returnedData.address + "</td></tr></table>";
$("body table:eq(0)").remove();
$("body").append(html);
});
}
</script>
</head>
<body>
<select id="name">
<option value="zhangsan">zhangsan</option>
<option value="lisi">lisi</option>
</select>
<input type="text" id="address"/>
<input type="button" value="getXMLinformation" onclick="getInfo();"><br>
<input type="button" value="getJsonInformation" onclick="getJsonInfo();"/>
</body>
</html>
第四部,写对应的Action,由于在Action中用到了pojo类,故先编写pojo类,
People.java:
import java.io.Serializable;
public class Person implements Serializable {
/**
*
*/
private static final long serialVersionUID = 4533675673212332584L;
private String name;
private int age;
private int height;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
然后,XML的Action,GetXmlAction.java
package com.ajax.action;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import com.ajax.pojo.Person;
import com.opensymphony.xwork2.ActionSupport;
/**
* 通过AJAX获取xml文件的Action
* @author xiaoyun 2013-07-29
*/
public class GetXMLAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 4049585162336088777L;
private String name;
public String execute() {
try {
Person person = null;
if("zhangsan".equalsIgnoreCase(name)) {
person = new Person();
person.setName("zhangsan");
person.setAge(20);
person.setHeight(160);
person.setAddress("北京");
} else {
person = new Person();
person.setName("lisi");
person.setAge(11);
person.setHeight(170);
person.setAddress("山东菏泽");
}
HttpServletResponse response = ServletActionContext.getResponse();
// 指定response返回类型为xml格式,并以utf-8格式编码
response.setContentType("text/xml;charset=utf-8");
response.setHeader("cache-control", "no-cache");
PrintWriter pw = response.getWriter();
// 组织文档结构
Document doc = this.orderDoc(person);
// 规定文件传输格式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
// 将doc以指定格式放到输出流(通过XMLWriter)
XMLWriter xw = new XMLWriter(pw, format);
// 写出到输入流
xw.write(doc);
// 刷新缓冲
pw.flush();
// 将流关闭并释放其关联的所有系统资源
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 根据People对象创建xml文件
* @param person
* @return
* @throws UnsupportedEncodingException
*/
private Document orderDoc(Person person) throws UnsupportedEncodingException {
// 创建doc文档
Document doc = DocumentHelper.createDocument();
// 创建根节点
Element rootElement = doc.addElement("persons");
// 增加注释说明
rootElement.addComment("This is comment,这是注释说明");
// 增加二级子节点
Element e = rootElement.addElement("person");
// 为二级子节点增加子节点(属性)
Element nameElement = e.addElement("name");
Element ageElement = e.addElement("age");
Element heightElement = e.addElement("height");
Element addressElement = e.addElement("address");
// 为三级子节点赋值
nameElement.setText(person.getName());
ageElement.setText(Integer.toString(person.getAge()));
heightElement.setText(Integer.toString(person.getHeight()));
//String add = new String(person.getAddress().getBytes("utf-8"), "ISO8859-1");
addressElement.setText(person.getAddress());
return doc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
接着,组装JSON数据的Action,GetJSONAction.java
package com.ajax.action;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.ajax.pojo.Person;
import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;
/**
* 传输JSON格式的字符串
*
* @author XiaoYun 2013-07-30
*/
public class GetJSONAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = -8368751107393347647L;
private String name;
@Override
public String execute() throws Exception {
// 实例化person对象
Person person = new Person();
person.setName(name);
person.setAge(10);
person.setHeight(160);
person.setAddress("中国人名");
// 通过Gson将对象转换为json字符串
Gson gson = new Gson();
String result = gson.toJson(person);
// 获取response对象
HttpServletResponse response = ServletActionContext.getResponse();
// 指定文件格式为json类型,编码类型为utf-8
response.setContentType("application/json; charset=utf-8");
response.setHeader("cache-control", "no-cache");
PrintWriter pw = response.getWriter();
pw.write(result);
pw.flush();
pw.close();
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第五步,写struts.xml配置文件
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="ajax" extends="struts-default">
<action name="getXMLAction" class="com.ajax.action.GetXMLAction">
</action>
<action name="getJSONAction" class="com.ajax.action.GetJSONAction">
</action>
</package>
</struts>
好,总体文件就配置完毕,接着部署到tomcat5.5,启动,运行,没有问题,运行截图如下所示,我这里使用的是火狐浏览器,使用web控制台查看的返回信息。
下面个这个是xml类型的数据,红色的框框中为返回的报文:
下面这个是json类型的数据,红色框框中为返回的报文:
至此,项目告一段路,当然了,其实在struts2中也有与json类型整合的插件,在返回类型中指定返回类型type=result,如果要指定要出去的成员变量,可以使用<param name="excludeProperties">xxx,xxx</param>,当然也可以指定返回的变量,这个你可以自行查看源代码,使用struts2提供的插件时,struts.xml继承的struts-defalut要变为json-default。
以上者前几天学习的内容,有不完整和讲解不透彻的地方请各位同行批评指正。下次将发表使用spring在一个工程中连接多个数据库的方法。
相关推荐
总的来说,"struts2+json"资源涉及到了Struts2框架中的Action设计、拦截器机制、结果类型的配置,以及AJAX和JSON在Web应用中的使用。理解这些知识点对于开发动态、交互性强的Java Web应用至关重要。
综上所述,Struts2和Ajax的结合使用,能够实现高效的前后端数据交互,通过JSON数据格式,使数据传输更加便捷和高效。在实际项目中,开发者应熟练掌握这两种技术的结合,以提高Web应用的用户体验。
在这个实例中,“整合jquery+json+struts2异步提交”是一个典型的前端与后端交互的示例,利用了jQuery的Ajax功能和Struts2框架处理JSON数据。下面我们将详细探讨这些技术及其相互配合的工作原理。 **jQuery** 是一...
- **配置Struts2 XML**:在`struts.xml`中定义一个包`ajax`,并扩展`json-default`,设置`result`类型为`json`,这样处理的动作类会返回JSON格式的结果。 4. **AjaxAction.java**: 这是一个Struts2动作类,负责...
通过JavaScript(通常是jQuery库)创建异步请求,我们可以向Struts2 Action发送JSON数据,同时接收返回的JSON数据。例如,使用jQuery的`$.ajax`或`$.getJSON`方法,构建一个请求,将JSON对象作为数据发送,并设置...
具体来说,插件中的`struts-plugin.xml`配置文件定义了一个名为`json-default`的包,其中包含了`JSONResult`和`JSONInterceptor`两种结果类型和拦截器,它们是处理JSON数据的核心组件。 #### 2. 配置Struts2的XML...
2. **配置Struts2的struts.xml**:在项目的配置文件中,你需要为你的Action添加一个条目,指定其访问路径、结果类型等信息。确保已经配置了JSON插件,以便Struts2能够正确地序列化Java对象为JSON格式。 3. **前端...
总结,Struts2和jQuery的Ajax JSON数据交换涉及以下几个关键步骤:配置Struts2的JSON插件,编写返回JSON数据的Action,使用jQuery发起Ajax请求并处理返回的JSON数据。通过这种方式,可以实现客户端与服务器之间的...
在这个过程中,我们通常会用到`json2.js`库来处理JSON数据在JavaScript端的解析和序列化,以及Struts2的`jsonplugin`来支持JSON响应。 首先,让我们详细了解一下`json2.js`。这个JavaScript库是由Douglas Crockford...
- **AJAX请求**:使用jQuery或其他库的AJAX功能发送异步请求,获取JSON数据并更新页面。 6. **安全考虑**: - **Content-Type**:确保HTTP响应的`Content-Type`设置为`application/json`,以指示浏览器处理响应...
在这个例子中,前端通过Ajax请求获取到Struts Action返回的JSON数据,然后根据数据状态显示相应的提示信息。这就是Struts、jQuery、Ajax和JSON在实际应用中的典型整合,实现了前后端的无刷新通信,提高了用户体验。
在Struts2 JSON应用中,jQuery常用来发送AJAX请求并处理返回的JSON数据。 5. **[原创]Struts2 + JQuery + JSON实现AJAX - Struts - Java - ITeye论坛.mht**:这个文件可能是一个论坛帖子,详细介绍了如何结合Struts...
7. **JSP和jQuery模板**:可能包含JSP页面,使用jQuery动态加载和更新由JSON数据驱动的内容。jQuery模板可以方便地将JSON数据结构化地展示在页面上。 这个实例教程可能涵盖了如何设置Struts2的JSON支持,编写jQuery...
在Struts2框架中,JSON(JavaScript Object Notation)支持是至关重要的,它允许应用程序通过HTTP协议交换数据,常用于创建AJAX(异步JavaScript和XML)驱动的用户界面。本知识点将详细介绍如何在Struts2项目中集成...
对于异步调用,我们可能需要配置一个能返回JSON或XML数据的结果类型,这些数据可以被JavaScript解析并用于更新页面。 6. **客户端逻辑**:在浏览器端,JavaScript代码需要监听用户触发的事件(如按钮点击),然后...
在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种技术,它允许我们在不刷新整个页面的情况下与服务器进行异步数据交换。而Struts2是一个基于MVC(Model-View-Controller)架构的Java Web框架,它极大地...
总结,使用Ajax和Struts框架,我们可以构建一个高效的Web应用,实现在不刷新整个页面的情况下,获取和处理服务器返回的JSON数据,从而提升用户体验。通过实践和研究这个项目实例,你将能深入掌握这一技术的运用。
对于Struts2,这个库使得应用程序能够轻松地处理JSON数据,例如在AJAX请求和响应中。 2. **struts2-json-plugin-2.1.8.1.jar**: 这是Struts2的一个插件,专为处理JSON请求和响应而设计。通过集成这个插件,开发者...
Struts2和jQuery是两种非常流行的开源技术,它们在Web开发中有着广泛的应用。Struts2作为MVC框架,主要用于处理后端业务逻辑,而jQuery则是一个强大的JavaScript库,简化了前端DOM操作、事件处理以及AJAX交互。在这...