这篇文章其实是我参考了众多博客(给与突出贡献的有五个)然后实践成功的。由于我在实现的时候遇到了很多错误(所以才会参考了那么多博客),无法一一记下,但我会把注意的地方我会指出。有些对不起大家的地方是我不给出完整的例子了,我只说注意的地方。

我是用struts2做的,顺便还练习了一下 package 的namespace的使用

前台:

<%String path=request.getContextPath(); %>//得到网站的的位置
$.ajax({
	type:"post",
	url:"<%=path%>/ajax/ajaxTagLx",//  /ajax 是命名空间,ajaxTagLx是要访问的函数

	data:{ //要传的JSON参数
		name3:"aa"
		age:21
	},

	dataType:"json",//设置需要返回的数据类型
	//contentType: "application/json;charset=utf-8",  这个不可以加,与我之前用的ASP的不一样
	success:function(data){

		//var d = eval("("+data+")");//将数据转换成json类型
		var d=JSON.parse(data);  //这种也行                
		//得到的是js的对象,然后我们就可以用 d.name,d.age了
	},

	error:function(){

		alert("与服务器连接失败");

	}
});



一般上面的代码包含在函数中调用。

后台部分:

private String name3; //action 会自动映射数据到名字一模一样的,只要有get set方法
	
	 private String result;//要返回的参数,这个是在strut.xml中可以看出
	
	 public String ajaxTagLx(){
		 System.out.println(name3); // 第一种得到传来参数的方法
		 try {
			 	HttpServletResponse response;
				HttpServletRequest request;
				HttpSession session;
				response = ServletActionContext.getResponse();
				request =ServletActionContext.getRequest();

		        String name2 = request.getParameter("name3");  //第二种得到传来参数的方法
		        String age = request.getParameter("age");
		        //将数据存储在map里,再转换成json类型数据,也可以自己手动构造json类型数据
				//感觉用map是必须的。
		        Map<String,Object> map = new HashMap<String,Object>();
		        map.put("name", name2);
		        map.put("age",age);
		        JSONObject json = JSONObject.fromObject(map);//将map对象转换成json类型数据  
				//我在上面这个地方调试了很久,后来增加几个jar包就没错了 ******
		        result = json.toString();//给result赋值,传递给页面
		    } catch (Exception e) {
		        e.printStackTrace();
		    }
		    return SUCCESS;  //必须有这个要不然不行。
			//我觉得如果用 PrintWriter 那么就不用 result 和这个 返回值为String的函数了
	 }
	 /*
	 get set 方法
	 */



我 的部分出错地方都在注释中。


struts部分:

<?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>
 	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8"></constant>
	
 	<package name="synonympkg" namespace="/" extends="struts-default">
 	
		<!--package bg -->
		 <action name="initdatabase" 
			  class="showDemo" method="initdatabase">
				<result name="success">index.jsp</result>
		 </action>
		
		<!--package ed   -->
	</package>
	 <!-- 由于要 extends="json-default" 我又弄了个package 而且为了学习加了个namespace(必须以'/'开头) -->
	<package name="ajax" namespace="/ajax" extends="json-default">
		<!--class 为 src中你的.jAVA文件-->
		<action name="ajaxTagLx" class="code.action.LxAction" method="ajaxTagLx">
			<result type="json">  
                <!--name必须为root,result是Action中的要返回给前台的属性名  小心上面还有 type="json"
				让我奇怪的是 result 不加 name="success" 也可以,完全不懂
				-->  
                <param name="root">result</param>  
			</result>  
		</action>
    </package>
	
</struts>



我 的部分出错地方都在注释中。



最后说明一下一定要有的jar包,当然不是struts2必须有的,而是实现 JSON必须有的。我就是这里一直错。这些包貌似不能少一个。

另外注意不要有 jsonplugin-0.34.jar


jsp直接返回java方法的返回值 jsp返回json数据_json

写一下方便搜

commons-beanutils-1.8.0.jar

commons-collections-3.2.1.jar

commons-lang-2.4.jar

commons-logging-1.1.1.jar

ezmorph-1.0.6.jar

json-lib-2.1.jar

struts2-json-plugin-2.1.8.1.jar


结束了。本来打算学ajaxTags可是怎么也弄不好。