json+struts实例

网上有许多关于Struts2与JSON的文章,Google加百度,查阅了许多,有各种各样的做法。其中,大部分的文章都说要加进一个叫jsonplugin的插件,在Google Code可以下载。以前我有做过测试,也是用它,但着实麻烦,要让Struts2的package继承一个叫“json-default”的父package。网上的文章,大部分都是说从Struts的Action如何把JSON数据发送回浏览器端(Ajax),而我想要一个跟它们相反的过程(即从Ajax端发送数据到服务器端的Action并解析出来),却找不到合适的答案。摸索了三个晚上,未果。今天终于让我找到了思路。 其中,不管是从浏览器端(JS,Ajax,Jquery等)发送给服务器端,还是从服务器端(Struts的Action,Servlet等)发送回客户端,都要识别一点:发送的都应该是JSON格式的字符串。 下面,我们先来重写登录模块中的loginform.jsp文件,原来的代码,请看Struts 2.1.6 精简实例系列教程(2):用户登录模块的实现,现在修改的代码如下: 01.<%@ page language="java" contentType="text/html; charset=UTF-8" 02. pageEncoding="UTF-8"%> 03.<%@ taglib prefix="s" uri="/struts-tags" %> 04.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 05.<html> 06.<head> 07.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 08.<title>登录页</title> 09.<mce:script type="text/javascript" src="js/jquery-1.3.2.min.js" mce_src="js/jquery-1.3.2.min.js"></mce:script> 10.<mce:script type="text/javascript"><!-- 11. $(function(){ 12. 13. $("#submit").click(function(){ 14. var loginName1 = $("input[name='loginName']").val(); //获取账号 15. var password1 = $("input[name='password']").val(); //获取密码 16. 17. var jsonUser = {loginName:loginName1, password:password1}; //JSON对象 18. 19. //注意:jsonUser.toString()这种方法错误,javaScript中的toString是用于布尔型变量的,而应用以下方法 20. var strUser = JSON.stringify(jsonUser); //将JSON对象转变成JSON格式的字符串, 21. 22. $.post("login!valid.action", {json: strUser}, callback, "json"); 23. }); 24. 25. function callback(json){ 26. alert(json.msg); //显示反馈信息 27. if(json.suc == 1){ //如果返回"登录成功" 28. window.location.href = "admin/index.action"; //跳转到后台主页 29. } 30. } 31. 32. }); 33. // --></mce:script> 34.</head> 35.<body> 36. 37.<form action="login.action" method="post"> 38. 账号<input type="text" name="loginName"/><br/> 39. 密码<input type="password" name="password"><br/> 40. <input type="button" id="submit" value="登录"/> 41.</form> 42. 43.</body> 44.</html> 键的两句是: 01.var jsonUser = {loginName:loginName1, password:password1}; 02.var strUser = JSON.stringify(jsonUser); 第(1)句是组装JSON对象,关于JSON对象的格式,建议大家到http://www.json.org/网站上学习一下,要验证你写的JSON对象是否正确,可在http://json.bloople.net/网站上验证。上面写的JSON对象其实是非常简单的一种,jsonUser对象里有两个属性,分别是loginName和password,而表示这两个属性,用key-value的形式,loginName1和password1分别是接收表单中的账号、密码的值。 第(2)句,相当重要,通过JavaScript内置对象JSON的stringify方法,将JSON对象转换成字符串。因为,我们传送给服务器端的要是JSON格式的字符串。 01.$.post("login!valid.action", {json: strUser}, callback, "json"); 这一句,Jquery用POST方法向服务器端发送数据,login!valid.action是我们要发送到的目的URI,也即直达loginAction的valid方法。而{…}是我们要发送的数据(data),{json:strUser},其实也是一个JSON对象,Key:value的形式,大家注意,我们把strUser这个json串发过去,在Action那里接收时,要接收“json”这个变量,这个变量的值就是我们发送的strUser字符串。 回调函数(callback)是指服务器端成功发回时,在JS端执行的函数。最后一个参数“json”是返回数据类型的一种,另外,还有”text”、“xml”等。而function callback函数体的内容,大家看完LoginAction类后,自然会明白。 好,Show一下修改后的LoginAction.java,代码如下: 01.package cn.simple.action; 02. 03.import java.io.IOException; 04.import javax.servlet.http.HttpServletResponse; 05.import org.apache.struts2.ServletActionContext; 06.import org.apache.struts2.convention.annotation.Result; 07.import org.apache.struts2.convention.annotation.Results; 08.import org.json.JSONObject; 09.import cn.simple.manager.UserManager; 10.import cn.simple.pojo.User; 11.import com.opensymphony.xwork2.ActionSupport; 12. 13.//@Results({ 14.// @Result(name="success", location="admin/index.action", type="redirect"), 15.// @Result(name="input", location="loginform.jsp", type="dispatcher") 16.//}) 17.public class LoginAction extends ActionSupport { 18. 19. private String json; //JSON字符串,JS与Action传递数据的载体 20. public String getJson() { 21. return json; 22. } 23. public void setJson(String json) { 24. this.json = json; 25. } 26. 27. /** *//** 28. * 登录验证 29. * @throws Exception 30. */ 31. public void valid() throws Exception { 32. 33. JSONObject jsonObj = new JSONObject(json); //将JSON格式的字符串构造成JSON对象 34. String loginName = jsonObj.getString("loginName"); //获取JSON对象中的loginName属性的值 35. String password = jsonObj.getString("password"); //获取JSON对象中的password属性的值 36. 37. User user = UserManager.selectUserByLoginName(loginName); //查询是否有用户名存在 38. 39. if(user==null){ 40. //此时的JSON对象,有两个属性suc和msg,其中suc表示是否登录成功的状态 41. json = "{suc:0, msg:'用户名不存在'}"; //构造JSON格式的字符串 42. } else if( ! password.equals(user.getPassword())){ 43. json = "{suc:0, msg:'密码不正确!'}"; 44. } else { 45. json = "{suc:1, msg:'登录成功!'}"; 46. } 47. sendMsg(json); //发送JSON格式的字符串回JS端 48. } 49. 50. /** *//** 51. * 向客户端的JS发送字符串 52. * @param content 发送的内容 53. * @throws IOException 54. */ 55. public void sendMsg(String content) throws IOException{ 56. HttpServletResponse response = ServletActionContext.getResponse(); 57. response.setCharacterEncoding("UTF-8"); 58. response.getWriter().write(content); 59. } 60. 61.}

你可能感兴趣的:(json,struts,String,input,action,callback)