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就可以了。

时间: 2024-12-13 02:34:22

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

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

form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multipart/form-data"> {# 这里必须要请求头格式才能把上传文件的对象传过去 enctype="multipart/form-data"#} 姓名 <input type="text" name="user">

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

本文实例讲述了ThinkPHP中使用ajax接收json数据的方法.分享给大家供大家参考.具体分析如下: 这里通过ThinkPHP+jquery实现ajax,扩展了下,写了个查询,前台代码如下: 首先需要引入jquery.js,主要代码如下: 1 function ajax(id,pic){ 2 3 //由于ThinkPHP不解析JavaScript里的ThinkPHP常量,所以需要先在这里定义. 4 5 var URL='__URL__'; 6 7 $.ajax({ 8 9 url: URL+

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

AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面. JSON JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范

前端Ajax传递Json数据,后端处理两种方式

在这里只讨论在前端通过Ajax远程传输Json数据的,不讨论通过form的形式传递数据 第一种方式: 前端传递过来的数据刚好和我们的bean实体对象属性一致,则可以使用对象的形式接受. 前端写法: 1 $().ready(function(){ 2 var obj = JSON.stringify({'userNo':'121589','processId':'15','processName':'测试审批','description':'这是一个测试'}); 3 alert(obj); 4 5

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

1.ajax数据的封装 var json = {"token":token};//封装json数据 $.ajax({ url:'', data:JSON.stringify(json),//封装成json dataType:"JSON", type:"POST", async:false, cache:false, contentType:'application/json;charset=UTF-8',//必须添加 success:functi

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

用viewBag传递Json字符串到前端时,json字符串中的“会被转义为& quot,前端处理方法为@Html.Raw(Json.Encode(ViewBag.Data)),再用eval()函数解析得到json对象:var data=eval("(" + @Html.Raw(Json.Encode(ViewBag.Data)) + “)”); 如何传递的是json对象则前端使用用 jsonData=eval( @Html.Raw(ViewBag.jsonData)); 原文地

MVC中使用ajax传递json数组

解决方法 去www.json.org下载JSON2.js再调用JSON.stringify(JSONData)将JSON对象转化为JSON串. var people = [{ "UserName": "t1", "PassWord": "111111", "Sex": "男" }, { "UserName": "t2", "PassWor

ASP.NET Web 前台Ajax传递JSON

Json 作为一种轻量级的数据交换格式,主要用于和服务器之间进行交换数据,其数据格式类似于 键值组合形式的数组. 在Web 中使用Ajax传递Json数据时候,就不得不先提一提Form表单,web前台界面中使用的控件默认是嵌在 form中的,而在form下使用asp:button控件,被HTML编译后默认类型为Submit,如此就先于Ajax一步提交了表单,导致Json数据无法正常传递到后台,合理的解决办法是 给Button 设置 OnClientClick="return false;&quo

通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中  先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面中有所体现,这里不再赘述,此篇文章主要介绍:我是如何通过js从前台获取数