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 ...
随机推荐
- Oracle LOB类型
一.Oracle中的varchar2类型1.我们在Oracle数据库存储的字符数据一般是用VARCHAR2.VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Dat ...
- 【编程思想】【设计模式】【行为模式Behavioral】Publish_Subscribe
Python版 https://github.com/faif/python-patterns/blob/master/behavioral/publish_subscribe.py #!/usr/b ...
- 2、Redis的安装
一.Windows下Redis安装 下载地址 Redis中文网站 Github地址 1.将下载下来的文件解压到目录 2.双击redis-server.exe运行 出现如下界面证明运行成功 3.双击 ...
- Jenkins视图管理
目录 一.简介 二.视图维护 创建视图 将项目加入视图中 三.状态图标变绿 四.看板 一.简介 在现在的编程中,公司往往采用的是模块化的编程方式,也就是说将一个项目拆分成许多模块,每个小项目组往往只负 ...
- 时间同步——TSN协议802.1AS介绍
前言之前的主题TSN的发展历史和协议族现状介绍了TSN技术的缘起,最近一期的主题TSN协议导读从定时与同步.延时.可靠性.资源管理四个方面,帮助大家了解TSN协议族包含哪些子协议,以及这些子协议的作用 ...
- <转>C++继承中虚函数的使用
转自:http://blog.csdn.net/itolfn/article/details/7412364 一:继承中的指针问题. 1. 指向基类的指针可以指向派生类对象,当基类指针指向派生类对 ...
- 网络安全:关于SecOC及测试开发实践简介
前言 我们知道,在车载网络中,大部分的数据都是以明文方式广播发送且无认证接收.这种方案在以前有着低成本.高性能的优势,但是随着当下智能网联化的进程,这种方案所带来的安全问题越来越被大家所重视. 为了提 ...
- w4sp-lab安装
扯淡 i春秋有个答题活动,苟了个奖品,我选了一本书:<wireshark与metasploit实战指南>,里面有个配套环境,本来看着书上说使用docker搭建的,以为很简单,只需要pull ...
- .NET Core工程应用系列(1) 定制化Audit.NET实现自定义AuditTarget
需求背景 最近在项目上需要增加对用户操作进行审计日志记录的功能,调研了一圈,在.net core生态里,用的最多的是Audit.NET.浏览完这个库的文档后,觉得大致能满足我们的诉求,于是建立一个控制 ...
- IDEA 无法显示 Run Dashboard 的解决方法
前言 最近开始接触微服务的项目,项目很多有时候本地调测需要启动多个项目,看到同事都是使用dashboard管理项目,服务和端口排列的整整齐齐.但是我dashboard里面啥都没有,一顿百度最后解决问题 ...