根据上一篇文章,我们已经struts2的包了,那么下面我们配置struts2,并完成一个登录的小例子。因为网上这类JSP的例子已经非常的多了,那么,我在这里提供一下ajax请求json数据的struts2的小例子。下面请看代码!!!
给大家看一下我的目录结构:
首先是web.xml的配置,在这里我们需要配置struts2的拦截器,因为我用的是最新版本2.3.15.3,拦截器跟以前的版本不同了,并且配置方法,供前台调用的方式也有所区别了。
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>webapp</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<!-- struts2拦截器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.convention.package.locators" value="action" />
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts-default,json-default" namespace="/">
<!-- 这里请注意了,这里的写法跟以前的是不同的 -->
<action name="login_*" class="com.zls.login.LoginAction" method="{1}">
<result type="json">
<!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
<param name="root">dataMap</param>
</result>
</action>
</package>
</struts>
LoginAction.java:
package com.zls.login;
import java.util.HashMap;
import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
import com.zls.login.interfaces.User;
public class LoginAction extends ActionSupport{
private String name;
private String password;
private Map<String, Object> dataMap;
/**
* 得到前台传过来的name值
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 得到前台传过来的password值
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 构造方法
*/
public LoginAction() {
//初始化Map对象
dataMap = new HashMap<String, Object>();
}
/**
* 如果没有指定执行action里的哪个方法时,会默认执行此方法
*/
public String execute() throws Exception {
System.out.println("come in 1!");
return SUCCESS;
}
public Map<String, Object> getDataMap() {
return dataMap;
}
/**
* 通过action以Struts2默认方式返回JSON数据
* @return
*/
public String checkLogin() {
// dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据
dataMap.clear();
System.out.println("name:" + name);
System.out.println("password:" + password);
System.out.println("come in2 !");
if (name.compareTo("admin") == 0 && password.compareTo("admin") == 0) {
User user = new User();
user.setGender("1");
user.setName("admin");
user.setPassword("admin");
dataMap.put("user", user);
dataMap.put("success", true);
System.out.println("come in3 !");
} else {
User user = new User();
user.setGender("0");
user.setName("other");
user.setPassword("other");
dataMap.put("user", user);
dataMap.put("success", true);
}
return SUCCESS;
}
}
User.java
package com.zls.login.interfaces;
public class User {
private String name; //姓名
private String password; //密码
private String gender; //性别
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
好了,到这一步后台基本完成了,那么让我们写一个前台的ajax来访问他.
首先是index.html:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<header>
<nav>
<ul>
<li><a href="login_checkLogin">手机版</a></li>
<li><a href="#" class="logininfo">登录</a></li>
</ul>
</nav>
</header>
<div class="main">
<div class="login_box">
<table>
<tbody>
<tr>
<td>用户名</td>
<td><input type="text" name="name" id="name"/></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password" id="password"/></td>
</tr>
<tr>
<td></td>
<td><button class="login_btn">登录</button></td>
</tr>
</tbody>
</table>
</div>
</div>
<footer>@版权所有,禁止乱扔</footer>
<script type="text/javascript" src="ui/js/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="ui/js/login/login.js"></script>
</body>
</html>
login.js
(function() {
var _this = {
_unbindEvent : function() {
$('.login_btn').unbind();
},
_bindEvent : function() {
$('.login_btn').bind('click', function() {
var name = $("#name").val();
var password = $("#password").val();
$.ajax({
type : "post",
url : "login_checkLogin",
dataType : "json",
data : {
name : name,
password : password
},
success : function(data) {
$(".logininfo")[0].textContent = "退出";
console.log(data);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
console.log(errorThrown);
}
});
});
},
_initialize : function() {
_this._unbindEvent();
_this._bindEvent();
}
};
_this._initialize();
})();
jquery-1.10.2.min.js就各位自己去下了。
整个工程,我上传了,有兴趣的可以去下载:
http://download.youkuaiyun.com/detail/wfwfwf128/6472193