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;
}
@Override
public 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就可以了。
Struts2中通过Ajax传递json数据的更多相关文章
- Ajax传递json数据简介和一个需要注意的小问题
Ajax传递json数据 Ajax操作与json数据格式在实际中的运用十分广泛,本文为大家介绍一个两者相结合的小案例: 项目结构 我们新建一个Django项目,在里面创建一个名为app01的应用: p ...
- boke例子: freermarker:在使用ajax传递json数据的时候多出冒号
boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...
- Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...
- ThinkPHP中使用ajax接收json数据的方法
本文实例讲述了ThinkPHP中使用ajax接收json数据的方法.分享给大家供大家参考.具体分析如下: 这里通过ThinkPHP+jquery实现ajax,扩展了下,写了个查询,前台代码如下: 首先 ...
- Struts2.5 利用Ajax将json数据传值到JSP
AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...
- ajax传递json数据,springmvc后台就收json数据
1.ajax数据的封装 var json = {"token":token};//封装json数据 $.ajax({ url:'', data:JSON.stringify(jso ...
- MVC中利用ViewBag传递Json数据时的前端处理方法
用viewBag传递Json字符串到前端时,json字符串中的“会被转义为& quot,前端处理方法为@Html.Raw(Json.Encode(ViewBag.Data)),再用eval() ...
- springMVC中前台ajax传json数据后台controller接受对象为null
在jquery的ajax中,如果没加contentType:"application/json",那么data就应该对应的是json对象,反之,如果加了contentType:&q ...
- springMVC中使用ajax传递json数组
解决方法 去www.json.org下载JSON2.js 再调用JSON.stringify(JSONData)将JSON对象转化为JSON串. var people = [{ "UserN ...
随机推荐
- Linux基础命令---mail邮件管理程序
mail mail是一个邮件的管理程序,可以用来发送或者接收邮件. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 mail [选项] ...
- [学习总结]9、Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影. 可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚 ...
- ORACLE 数据块PCTFREE和PCTUSED
PCTFREE表示一个数据块可用空间小于PCTFREE时,该数据块不在被记录在FREELIST中,即不能插入新数据. PCTUSED表示一个数据块已经用空间如果小于PCTUSED时,该数据块才会被重新 ...
- 连接 MySQL 数据库出现问题:The server time zone value ‘�й���ʱ��‘ is unrecogni....
出现问题 The server time zone value '�й���ʱ��' is unrecogni.... 解决方案 在 URL 后面加上 ?serverTimezone=UTC 如下: ...
- Dubbo多协议支持
除了Dubbo服务暴露协议Dubbo协议外,Dubbo框架还支持另外8种服务暴露协议:RMI协议.Hessian协议.HTTP协议.WebService协议.Thrift协议.Memcached协议. ...
- 12月第二周bug总结
1.bug总结 复制 别人的依赖和依赖指定类型 报错 解决:依赖还没加载完成,你就指定了版本型号,所以报错,所以先让他加载依赖,后指定该型号 eureka(优瑞卡) 注册服务 控制台没有显示出来的话 ...
- JAVA日志发展史
JAVA日志发展史 第一阶段 2001年以前,Java是没有日志库的,打印日志全凭System.out和System.err 缺点: 产生大量的IO操作同时在生产环境中无法合理的控制是否需要输出 输出 ...
- 05 - Vue3 UI Framework - Button 组件
官网基本做好了,接下来开始做核心组件 返回阅读列表点击 这里 目录准备 在项目 src 目录下创建 lib 文件夹,用来存放所有的核心组件吧.然后再在 lib 文件夹下创建 Button.vue 文件 ...
- java多线程2:Thread中的方法
静态方法: Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程". 为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面 ...
- 严重危害警告!Log4j 执行漏洞被公开!
12 月 10 日凌晨,Apache 开源项目 Log4j2 的远程代码执行漏洞细节被公开,漏洞威胁等级为:严重. Log4j2 是一个基于 Java 的日志记录工具.它重写了 Log4j 框架,引入 ...