struts2下通过ajax返回json的两种方式

      本实例主要是解释在struts2下通过jquery的ajax从后台获取json数据,返回前台进行显示,记录学习的脚步!

前台 index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <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="js/jquery-1.9.1.js"></script>
	
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	
	<script type="text/javascript">
	<!--
		$(function(){
		
			//使用response直接返回json数据		
			$("#send1").on("click",function(){
				console.log("按钮的单击事件");
				console.log("开始ajax");
				$.ajax({
					url:"json_test/json_jsonStream",
					type:"get",
					dataType:"json",
					success:function(data){
					console.log(data);
					},
					error:function(){
						console.log("ajax出错");
					}
				});
			});
			
			//使用json插件返回,即设置result的type="json"
			$("#send2").on("click",function(){
				console.log("按钮2的单击事件");
				console.log("开始ajax");
				$.ajax({
					url:"json_test/json_jsonStreamResult",
					type:"get",
					dataType:"json",
					success:function(data){
						console.log(data);
					},
					error:function(){
						console.log("ajax出错");
					}
				});
			});
		});
	
	//-->
	</script>
	
  </head>
  
  <body>
    <div id="disContent">
    	显示未发起ajax的信息
    </div>
    <input type="button" value="发起ajax1" id="send1" /><br/>
    <input type="button" value="发起ajax2" id="send2" /><br/>
  </body>
</html>

很简单 只是两个按钮 分别绑定单击事件 发起两个ajax


配置文件 struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
   
  <!-- 	 打开开发者模式 -->
 	<constant name="struts.devMode" value="true"></constant>
	<constant name="struts.configuration.xml.reload" value="true"></constant>


	<!-- 本实例用于测试struts2通过ajax返回json的两种方式 -->
	<package name="json" namespace="/json_test" extends="struts-default,json-default">
		<action name="json_*" class="com.undergrowth.action.JsonTest" method="{1}">
		  <result type="json">
		   <param name="root">returnJsonString</param>
		  </result>
		</action>
	</package>
</struts>    

中间的Action  JsonTest.java

package com.undergrowth.action;

import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.struts2.ServletActionContext;

public class JsonTest {
	
	//用于使用json插件来返回的值
	private String returnJsonString;
	
	
	public String getReturnJsonString() {
		return returnJsonString;
	}

	public void setReturnJsonString(String returnJsonString) {
		this.returnJsonString = returnJsonString;
	}

	//ͨ通过response的输出流来返回json数据
	public  void jsonStream()
	{
		try {
			//获取响应response
			HttpServletResponse response=ServletActionContext.getResponse();
			//设置响应的内容类型
			response.setContentType("application/json;charset=utf-8");
			//获取输出流
			PrintWriter pw=response.getWriter();
			String jsonString = fillJsonData();
			
			pw.write(jsonString);
			pw.flush();
			pw.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	//通过使用json插件来返回json
	public String jsonStreamResult()
	{
		returnJsonString=fillJsonData();
		return "success";
	}
	
	
	//填充json的数据
	private String fillJsonData() {
		Map<String, Object> jsonMap=new HashMap<String, Object>();
		jsonMap.put("姓名", "李彦宏");
		jsonMap.put("薪水", "20k");
		JSONObject jsonObject=JSONObject.fromObject(jsonMap);
		String jsonString=jsonObject.toString();
		return jsonString;
	}
	
}	

2.测试 



posted on 2014-02-18 16:28  liangxinzhi  阅读(215)  评论(0编辑  收藏  举报