下載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.jarhtml
commons-io-2.5.jarjava
commons-lang3-3.6.jarweb
freemarker-2.3.23.jarajax
javassist-3.20.0-GA.jarapache
ognl-3.1.15.jarjson
struts2-core-2.5.13.jarsession
commons-collections-3.2.2.jarapp
commons-lang-2.4.jarwebapp
ezmorph-1.0.6.jar異步
json-lib-2.3-jdk15.jar
struts2-json-plugin-2.5.13.jar
commons-benautils-1.8.3.jar
(配置文件內容能夠在下載的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>
(配置文件內容能夠在下載的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>
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; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
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就能夠了。