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 ...
随机推荐
- 集合类——Map集合、Properties属性文件操作
1.Map集合 Collection集合的特点是每次进行单个对象的保存,若要对一对对象来进行保存就只能用Map集合来保存.即Map集合中一次可以保存两个对象,且这两个对象的关系是key = value ...
- ORACLE 服务器验证
位于$ORACLE_HOME/network/admin/sqlnet.oraSQLNET.AUTHENTICATION_SERVICES=none|all|ntsnone:关闭操作系统认证,只能密码 ...
- Linux:ps -ef命令
ps命令将某个进程显示出来 grep命令是查找 中间的|是管道命令 是指ps命令与grep同时执行 PS是LINUX下最常用的也是非常强大的进程查看命令 检查java 进程是否存在:ps -ef |g ...
- promise ,async 小记
Promise Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值. 摇色子游戏,随机1-6的一个整数,并且将其返回. function fn() { retur ...
- Socket通信和多线程的总结
1.ServerSocket进行多线程接收 package com.yh.chat; import java.io.IOException; import java.net.ServerSocket; ...
- 【Github】如何下载csv文件/win10如何修改txt文件为csv文件
csv文件:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号) 右键点击raw按钮,选择目标另存为,下载的是txt文件 win10如何 ...
- 关于synchronize与lock的区别
参考文献:https://www.cnblogs.com/cloudblogs/p/6440160.html 一.synchronize修饰不同代码都是锁住了什么? 大家都知道synchronize可 ...
- 基于Github Actions + Docker + Git 的devops方案实践教程
目录 为什么需要Devops 如何实践Devops 版本控制工具(Git) 学习使用 配置环境 源代码仓库 一台配置好环境的云服务器 SSH远程登录 在服务器上安装docker docker技术准备工 ...
- Python matplotlib绘图设置坐标轴的标题
一.语法简介 plt.xlabel("销售月份",fontsize=16,color='red',fontweight='bold',loc='center',background ...
- 统计图—柱状图可视化(python)
# 柱状图 import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif']=['Fan ...