1.     JSON插件

想要使用json必定会用到jquery。

1.1        导入相关的Ajax-jar包-01资料中ajax文件中。

commons-beanutils-1.8.0.jar

commons-collections-3.1.jar

commons-lang-2.4.jar

commons-logging-1.1.3.jar

ezmorph-1.0.6.jar

jackson-core-asl-1.9.2.jar

jackson-mapper-asl-1.9.2.jar

json-lib-2.3-jdk15.jar

struts2-json-plugin-2.3.24.jar

还要有struts2的相关jar包。

1.2        创建对应的页面。Success.jsp

<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>

<script type="text/javascript">

$(function(){

/* 使用ajax技术进行提交 */

$.ajax({

type:"post",

url:"/07struts2/getAll.action",

dataType:"json",

success:function(data){

/* 回调函数将data对象中的数据循环添加到页面中 */

for(var i = 0 ; i < data.length; i++){

var con = "<tr><td>"+data[i].id+"</td><td>"+data[i].name+"</td><td>"+data[i].pwd+"</td></tr>";

// 添加con

$("#tab").append(con);

}

}

})

})

</script>

1.3        要完成对应的Action-- getAll.action

//     模拟数据库为user对象添加数据

private List<User> userList;

public String getAll(){

//      需要给user赋予数据 模拟的是数据库。从服务层取得到的数据。

userList = new ArrayList<>();

userList.add(new User(1, "高圆圆", "2345"));

userList.add(new User(2, "宋慧乔", "32345"));

userList.add(new User(3, "唐嫣", "12345"));

userList.add(new User(4, "陈乔恩", "24345"));

userList.add(new User(5, "赵丽颖", "25345"));

userList.add(new User(6, "陈冠希", "256345"));

return SUCCESS;

}

1.4        编写struts.xml—将getAll.action 添加

<!-- Struts 要想使用json技术,必须继承json-default: 才可以使用json技术

      struts 继承多个命名空间的时候,要使用,隔开即可!

-->

<package name="default" namespace="/" extends="struts-default,json-default">

<action name="getAll" class="com.bjsxt.action.LoginAction" method="getAll">

<!-- 表示该方法返回一个json -->

<result type="json">

<!-- param:给userList属性从新装备

root:表示根,直接将userList可以转化为json

-->

<param name="root">userList</param>

</result>

</action>

1.5        测试成功!

2.     拦截器

1.只能拦截Action类,2.在Action类后端控制器的前面或后面执行一些操作(AOP)3.Struts2已提供了多个拦截器4.默认使用struts2提供的拦截器5.使用自定义拦截器会覆盖掉struts2提供的拦截器6.在使用自定义拦截器时使用struts2提供的拦截器,需要引用struts2提供的默认拦截器Struts2 同拦截器栈interceptor-stack定义了很多内部实现好的拦截器。拦截器栈通过<interceptor-ref name="exception"/> 引用了内部定义的多个拦截器。

2.1定义单个拦截器:

2.1.1自定义拦截器继承AbstractInterceptor

2.1.2在struts.xml中添加<interceptors>标签引用拦截器

2.1.3在Action标签中直接引用拦截器<interceptor-ref name="myInter"></interceptor-ref>

单个拦截器执行的顺序:intercept方法中可以定义在走Action之前的一些操作。arg0.invoke(); 判断是否有其他拦截器,如果有则执行其他拦截器,如果没有则走具体的Action。执行完Action之后,也可以自定义一些操作。

InterCeptor

public class MyInterceptor extends AbstractInterceptor{@Overridepublic String intercept(ActionInvocation arg0) throws Exception {System.out.println("-----------执行之前--------");//  invoke();动态代理:arg0.invoke();  // 如果有下一个拦截器,则invoke方法会继续执行下一个拦截器。如果没有,就执行当前。System.out.println("----------执行之后----------");return null;}
}

Struts.xml

2.2定义多个拦截器:

2.2.1自定义拦截器继承AbstractInterceptor

2.2.2在struts.xml中添加<interceptors>标签引用多个拦截器

2.2.3 添加拦截器栈<interceptor-stackname="myStack">

2.2.4在Action标签中直接引用拦截器<interceptor-ref name="myStack"></interceptor-ref>

追加内容:可以用param标签来区分哪些方法被拦截,哪些方法不被拦截

<interceptor-ref name="myStack"><param name="includeMethod">execute</param>//要拦截的方法<param name="excludeMethod">myfun</param>//不拦截的方法。</interceptor-ref>

结论:多个拦截器的顺序---先进后出:多个拦截器执行的顺序!跟配置文件中配置属性有直接关系跟springmvc一样!

2.3 struts---全局默认拦截器。

指的是struts-default.xml 中<default-interceptor-refname="defaultStack"/>

2.3.1 解决值没有传递过来的问题!

Interceptor:

拦截器中可以创建作用域对象:request,session,application。

2.4登录拦截器:

2.4.1 在登录的Action中将用户存入到session中

 //   需要自定义方法public String doLogin(){HttpServletRequest request = ServletActionContext.getRequest();HttpSession session = request.getSession();System.out.println("点我带你飞!轻松上王者");if ("admin".equals(user.getName())) {session.setAttribute("user", user);return SUCCESS;}else{return ERROR;}}

2.4.2 创建一个拦截器,判断用户是否登录成功!

public class MyInterceptor extends AbstractInterceptor{@Overridepublic String intercept(ActionInvocation arg0) throws Exception {HttpServletRequest request = ServletActionContext.getRequest();HttpSession session = request.getSession();User user = (User) session.getAttribute("user");System.out.println(user+"------------");if (user!=null) {System.out.println("登录成功!");return arg0.invoke();}else{return "error";}}
}

2.4.3 配置拦截器。struts.xml

<!-- 配置拦截器 --><interceptors><interceptor name="myInter" class="com.bjsxt.interceptor.MyInterceptor"/><!-- 拦截器的执行顺序拦截器栈 --><interceptor-stack name="mystack"><interceptor-ref name="myInter"/></interceptor-stack></interceptors><!-- 配置全局error --><global-results><result name="error">/error.jsp</result></global-results>配置要拦截的方法<action name="getAll" class="com.bjsxt.action.DoLoginAction" method="getAll"><interceptor-ref name="mystack"><param name="includeMethod">getAll</param></interceptor-ref><result type="json"><param name="root">userList</param></result></action>

2.4.4 测试

2.4.4 测试

--------------------- 
作者:孟庆祥 
来源:CSDN 
原文:https://blog.csdn.net/m_q_x/article/details/78084696 
版权声明:本文为博主原创文章,转载请附上博文链接!

其他内容补充:

Strust2 拦截器处理返回自定义json格式数据

注意如果要使用拦截器返回json字符串时,需要使用反射内容调用action类调用返回值(属性变量set方法进行设置),否则变量将使用属性默认值作为JSON返回值字符串:

struts2拦截器配置文件代码:

<package name="/testServices/" extends="struts-default,json-default"><!-- 配置拦截器 --><interceptors>    <interceptor name="myInterceptor" class="com.MyInterceptor" /><interceptor-stack name="myDefault"><interceptor-ref name="defaultStack" /><interceptor-ref name="myInterceptor" /></interceptor-stack></interceptors><default-interceptor-ref name="myDefault" /><!-- 配置全局跳转结果 error , 拦截器中错误信息以JSON格式方式返回 --><global-results><!-- 拦截器中return ‘error’ 字符串时,指定返回json格式,responseData为需要转换json格式的类属性(即当前拦截的action类),在action类中已定义--><result name="error" type="json"><param name="root">responseData</param></result></global-results><action name="getTestService" class="com.TestAction" method="getTestService"><result name="success" type="json"><!-- responseData为需要转换json格式的类属性,需在action类中定义 --><param name="root">responseData</param></result></action></package>

拦截器类文件代码:

public class MyInterceptor extends AbstractInterceptor{@Overridepublic String intercept(ActionInvocation arg0) throws Exception {HttpServletRequest request = ServletActionContext.getRequest();String requestMethod = request.getMethod();System.out.println("当前客户端请求方式: " + requestMethod);if(requestMethod.equalsIgnoreCase(Constants.REQUEST_METHOD_POST)){System.out.println("POST请求");return arg0.invoke();}else{System.out.println("GET请求");Response responseData = new Response();responseData.setCode(Constants.CODE_5002);responseData.setDesc(Constants.DESC_5002);//通过反射设置数据Method method = arg0.getProxy().getAction().getClass().getMethod("setResponseData", Response.class);method.invoke(arg0.getProxy().getAction(), responseData);return "error";}}}

转载:Struts2+Jquery实现ajax并返回json类型数据

struts2控制器及拦截器返回JSON格式数据相关推荐

  1. Spring MVC--使用Jackson返回JSON格式数据

    使用Jackson返回JSON格式数据 index.jsp <%@ page language="java" contentType="text/html; cha ...

  2. 使用jQuery发送POST,Ajax请求返回JSON格式数据

    问题: 使用jQuery POST提交数据到PHP文件, PHP返回的json_encode后的数组数据,但jQuery接收到的数据不能解析为JSON对象,而是字符串{"code" ...

  3. 返回json格式数据乱码

    本文为博主原创,未经允许不得转载: 原本返回json格式数据的代码: @ResponseBody@RequestMapping(value = "getListByTime", m ...

  4. Flask设置返回json格式数据

    https://blog.csdn.net/angus_17/article/details/80455838 from flask import Flask, jsonifyapp = Flask( ...

  5. django mysql返回json_Django 1.8.11 查询数据库返回JSON格式数据

    Django 1.8.11 查询数据库返回JSON格式数据 和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式 环境 Win10 Python2.7 Django 1.8.11 返回多 ...

  6. ajax返回数据输出成表,javascript代码实例教程-ajax请求返回Json格式数据如何循环输出成table形式...

    小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过. 首先,Ajax请求数据,(用的是Jquery的Ajax) [javascript] $(function(){ ...

  7. java 返回 json格式_java 如何返回json格式数据,需要技巧

    今天上午给同事调了半个小时的程序,最后发现是在后台代码的java返回json格式的数据出了个错误.因此就想到了广大的初学者一开始学习jquery的时候可能会遇到这个问题.现在我就把我的给大家分享一下, ...

  8. (八): 查询结果直接返回Json格式数据

    Bee简单易用:单表操作.多表关联操作,可以不用写sql,极少语句就可以完成SQL操作:10分钟即可学会使用. Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化. ...

  9. JAVA中返回json格式数据

    1. 返回json格式 package com.demo.util;import com.alibaba.fastjson.JSONObject;import java.util.HashMap; i ...

最新文章

  1. 关于查询ios的app更新的历史版本记录
  2. (十)mybatis之配置(mybatis-config.xml)
  3. Script:找出ASM中的Spfile参数文件
  4. 徐艳 中国科学院成都计算机,互动、碰撞!精彩纷呈!成都市中职计算机专业菜单培训在双流建校举行!...
  5. SAP UI5 初学者教程之三:开始接触第一个 SAP UI5 控件 试读版
  6. java正则表达 w_正则表达式[\s\S] 与[\w\W]这样的用法,比较.
  7. Kubernetes的Device Plugin设计解读
  8. 判断五个分数等级划分_压力表精度等级怎么算?压力表精度等级划分及检验项目...
  9. 支付,造就金融科技生态契机——保险科技生态建设...
  10. 电梯控制系统设计(PLC及组态)
  11. 金蝶k3 与用友ncc凭证同步
  12. Linux下简单的木马查杀
  13. 今天讲一下完整的前端模块化,很实用
  14. php捉迷藏,查看“蘑菇捉迷藏!”的源代码
  15. 产品分析报告-思维导图
  16. GIF录制器之-ScreentoGif--非常好用
  17. POJ 1830 开关问题 高斯消元
  18. 怎么提高图片分辨率dpi?电脑图片怎么修改分辨率?
  19. iOS 开发 AVPlayer 深入浅出
  20. linux三台机器互相免密登录

热门文章

  1. bugfree安装mysql_安装搭建BugFree_CentOS安装搭建BugFree-云栖社区-阿里云
  2. ad域 禁用账号_AD域策略如何限制软件运行
  3. python编程实践-简单淘宝秒杀程序
  4. 内网渗透学习 day1
  5. BindingException: Invalid bound statement (not found): dao.UserDao.getUserList()
  6. 基于DM642 RAW采集格式的视频驱动开发及应用
  7. Python写日志文件
  8. 【JAVA学习笔记】你知道的越多,你不知道的越多系列一
  9. 赛效:怎么用转转大师快捷转换文件格式
  10. DAO 中存在的不足和优化方案