本实例主要是解释在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.测试