Struts2中通过Ajax传递json数据

时间:2023-02-11 17:05:22

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");
}
});
}

在调试过程中,一直提示一些错误,如下图所示:

Struts2中通过Ajax传递json数据

当struts.devMode设置为true时,html表单数据中出现和action中属性名不匹配的参数名时就会提示错误,这个没有什么影响,只是为了便于使用者调试。

可以在strust.xml文件中将struts.devMode属性设置为false就可以了。

Struts2中通过Ajax传递json数据的更多相关文章

  1. Ajax传递json数据简介和一个需要注意的小问题

    Ajax传递json数据 Ajax操作与json数据格式在实际中的运用十分广泛,本文为大家介绍一个两者相结合的小案例: 项目结构 我们新建一个Django项目,在里面创建一个名为app01的应用: p ...

  2. boke例子: freermarker:在使用ajax传递json数据的时候多出冒号

    boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...

  3. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)

    form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...

  4. ThinkPHP中使用ajax接收json数据的方法

    本文实例讲述了ThinkPHP中使用ajax接收json数据的方法.分享给大家供大家参考.具体分析如下: 这里通过ThinkPHP+jquery实现ajax,扩展了下,写了个查询,前台代码如下: 首先 ...

  5. Struts2&period;5 利用Ajax将json数据传值到JSP

    AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...

  6. ajax传递json数据,springmvc后台就收json数据

    1.ajax数据的封装 var json = {"token":token};//封装json数据 $.ajax({ url:'', data:JSON.stringify(jso ...

  7. MVC中利用ViewBag传递Json数据时的前端处理方法

    用viewBag传递Json字符串到前端时,json字符串中的“会被转义为& quot,前端处理方法为@Html.Raw(Json.Encode(ViewBag.Data)),再用eval() ...

  8. springMVC中前台ajax传json数据后台controller接受对象为null

    在jquery的ajax中,如果没加contentType:"application/json",那么data就应该对应的是json对象,反之,如果加了contentType:&q ...

  9. springMVC中使用ajax传递json数组

    解决方法 去www.json.org下载JSON2.js 再调用JSON.stringify(JSONData)将JSON对象转化为JSON串. var people = [{ "UserN ...

随机推荐

  1. C&plus;&plus;库(Google Breakpad)

    Google Breakpad是什么? 一个开源的多平台崩溃报告系统. Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,它支持Windows,Linux和Mac和Solari ...

  2. PHP设计模式-策略模式 转

    策略模式(Strategy Pattern) 策略模式是对象的行为模式,用意是对一组算法的封装.动态的选择需要的算法并使用. 策略模式指的是程序中涉及决策控制的一种模式.策略模式功能非常强大,因为这个 ...

  3. OpenGL矩阵类&lpar;C&plus;&plus;&rpar;

    概述 创建&初始化 存取器 矩阵运算 变换函数 实例:模型视图矩阵 实例:投影矩阵 概述 OpenGL固定功能管线提供4个不同类型的矩阵(GL_MODELVIEW.GL_PROJECTION. ...

  4. Html笔记&lpar;九&rpar;头标签

    头标签: <head> 头标签都放在 <head> </head> 头部分之间.包括:title base meta link <title> :指定浏 ...

  5. Java study 1&colon;The note of studying Socket which based UDP

    UDP concept: UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参 ...

  6. kaggle之电影评论文本情感分类

    电影文本情感分类 Github地址 Kaggle地址 这个任务主要是对电影评论文本进行情感分类,主要分为正面评论和负面评论,所以是一个二分类问题,二分类模型我们可以选取一些常见的模型比如贝叶斯.逻辑回 ...

  7. ArcSde for Oracle服务注册

    1.首先安装ArcSde,安装完成之后在dos命令窗口运行如下命令: sdeservice -o create -d oracle,instance -p sde -i port; 参数说明: ins ...

  8. Python 3 Anaconda 下爬虫学习与爬虫实践 (1)

    环境python 3 anaconda pip 以及各种库 1.requests库的使用 主要是如何获得一个网页信息 重点是 r=requests.get("https://www.goog ...

  9. kangle请求控制添加的add&lowbar;header怎么查看

    请求控制里添加的add header不会显示在浏览器的请求里,因为是发送给源的,你们要查看可以用phinfo查看.回应控制里添加的会显示在浏览器的回应里

  10. Android 的一些提示框

    1.在测试时,如何实现一个提示 可以使用 Toast.makeText(this, "这是一个提示", Toast.LENGTH_SHORT).show(); //从资源文件str ...