Struts2中通过Ajax传递json数据
1、導入Struts2所需要的jar包
下載Struts2的jar包時,可以下載struts-2.5.13-min-lib.zip,然后放到項目的/WebContent/WEB-INF/lib路徑下
struts-2.5.13-min-lib只包含以下jar包:
commons-fileupload-1.3.3.jar
commons-io-2.5.jar
commons-lang3-3.6.jar
freemarker-2.3.23.jar
javassist-3.20.0-GA.jar
ognl-3.1.15.jar
struts2-core-2.5.13.jar
2、導入操作json數據所需要的jar包
commons-collections-3.2.2.jar
commons-lang-2.4.jar
ezmorph-1.0.6.jar
json-lib-2.3-jdk15.jar
struts2-json-plugin-2.5.13.jar
commons-benautils-1.8.3.jar
?
3、在web.xml文件中添加filter
(配置文件內容可以在下載的struts2文件的\struts-2.5.13-all\struts-2.5.13-all-lib\src\apps\showcase\src\main\webapp\WEB-INF路徑下找到示例文件web.xml)
?
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID" version="3.1"><filter><filter-name>struts-prepare</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter</filter-class></filter><filter><filter-name>struts-execute</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts-prepare</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>struts-execute</filter-name><url-pattern>/*</url-pattern></filter-mapping> </web-app>
?4、在src目錄下創建struts.xml文件
(配置文件內容可以在下載的struts文件的\struts-2.5.13-all\struts-2.5.13-all-lib\src\apps\showcase\src\main\resources下找到示例文件struts.xml)
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"> <struts><package name="Login" extends="struts-default,json-default"> <!-- 需要繼承struts-default和json-default --><action name="login"><result>/login.jsp</result></action><action name="loginaction" class="com.hpe.struts.LoginAction"><result type="json"><!-- 返回的數據類型為json --><param name="res">data</param><!-- 這個地方的data就是在LoginAction中定義的data,它必須要有getter、setter,這樣就可以將data傳遞到前臺頁面上,LoginAction類中所有具有getter的字段都會被封裝到一個類中,傳遞到前臺 {"data":"{\"msg\":\"登錄成功!\",\"status\":\"1\"}","mmp":2000} --></result></action></package> </struts>5、LoginAction類
public class LoginAction extends ActionSupport implements ServletRequestAware {private HttpServletRequest request;private Map<String, String> map = new HashMap<String, String>();private String data;public String getData() {return data;}public void setData(String data) {this.data = data;}public Map<String, String> getMap() {return map;}public void setMap(Map<String, String> map) {this.map = map;}UserService service = new UserService();public String execute() throws IOException {// 獲取HttpSession對象HttpSession session = ServletActionContext.getRequest().getSession();
// 獲取用戶輸入的驗證碼 String veryCode = request.getParameter("veryCode").toString();try {// 判斷驗證碼
// 獲取session中的驗證碼Object code = session.getAttribute("verycode");if (code == null || !veryCode.toLowerCase().equals(code.toString().toLowerCase())) {
// 保存狀態碼和狀態信息map.put("status", "0");map.put("msg", "驗證碼錯誤!");
// 將Map對象裝換為JSONObject對象,然后轉換為String類型,保存,并傳遞至前臺頁面data = JSONObject.fromObject(map).toString();
return SUCCESS;}// 判斷用戶名和密碼
String name = request.getParameter("name").toString();
String pwd = request.getParameter("pwd").toString();
User u = service.login(name, pwd);if (u != null) {session.setAttribute("user", u);map.put("status", "1");map.put("msg", "登錄成功!");data = JSONObject.fromObject(map).toString();} else {map.put("status", "-1");map.put("msg", "用戶名或密碼錯誤!");data = JSONObject.fromObject(map).toString();}} catch (SQLException e) {map.put("status", "-2");map.put("msg", "登錄異常:" + e.getMessage());data = JSONObject.fromObject(map).toString();}return SUCCESS;}@Overridepublic void setServletRequest(HttpServletRequest request) {this.request = request;} }
?6、通過JQuery實現異步訪問
function login() {var name = $('#name').val();var pwd = $('#pwd').val();var vcode = $('#vcode').val();$.ajax({url : "/MyEasyBuy/loginaction",type : "post",data : {"name" : name,"pwd" : pwd,"veryCode" : vcode},dataType : "json",success : function(res) {// 此時獲取到的res是一個Object類型的對象// 將對象轉化為json字符串alert(JSON.stringify(res));// {"data":"{\"msg\":\"登錄成功!\",\"status\":\"1\"}"}// res對象的data屬性alert(res.data);// {"msg":"登錄成功!","status":"1"}// 將res對象的data屬性轉化為json對象var obj = eval("(" + res.data + ")");alert(obj.msg);// 登錄成功!// 錯誤// var obj2 = eval("{" + res.data + "}");// alert(obj2.msg);// alert(res.data.msg); // undefined// alert(JSON.parse(res.data).msg);// 登錄成功!// res已經是一個對象,不能再次將其轉換為json對象// alert(JSON.parse(res)); // 將json字符串轉換為json對象 },err : function() {alert("error");}});}?在調試過程中,一直提示一些錯誤,如下圖所示:
當struts.devMode設置為true時,html表單數據中出現和action中屬性名不匹配的參數名時就會提示錯誤,這個沒有什么影響,只是為了便于使用者調試。
可以在strust.xml文件中將struts.devMode屬性設置為false就可以了。
?
轉載于:https://www.cnblogs.com/cs569/p/7594112.html
總結
以上是生活随笔為你收集整理的Struts2中通过Ajax传递json数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在虚拟机中的Ubuntu搭建java开发
- 下一篇: [js高手之路] html5 canva