struts2控制器及拦截器返回JSON格式数据
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格式数据相关推荐
- Spring MVC--使用Jackson返回JSON格式数据
使用Jackson返回JSON格式数据 index.jsp <%@ page language="java" contentType="text/html; cha ...
- 使用jQuery发送POST,Ajax请求返回JSON格式数据
问题: 使用jQuery POST提交数据到PHP文件, PHP返回的json_encode后的数组数据,但jQuery接收到的数据不能解析为JSON对象,而是字符串{"code" ...
- 返回json格式数据乱码
本文为博主原创,未经允许不得转载: 原本返回json格式数据的代码: @ResponseBody@RequestMapping(value = "getListByTime", m ...
- Flask设置返回json格式数据
https://blog.csdn.net/angus_17/article/details/80455838 from flask import Flask, jsonifyapp = Flask( ...
- django mysql返回json_Django 1.8.11 查询数据库返回JSON格式数据
Django 1.8.11 查询数据库返回JSON格式数据 和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式 环境 Win10 Python2.7 Django 1.8.11 返回多 ...
- ajax返回数据输出成表,javascript代码实例教程-ajax请求返回Json格式数据如何循环输出成table形式...
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过. 首先,Ajax请求数据,(用的是Jquery的Ajax) [javascript] $(function(){ ...
- java 返回 json格式_java 如何返回json格式数据,需要技巧
今天上午给同事调了半个小时的程序,最后发现是在后台代码的java返回json格式的数据出了个错误.因此就想到了广大的初学者一开始学习jquery的时候可能会遇到这个问题.现在我就把我的给大家分享一下, ...
- (八): 查询结果直接返回Json格式数据
Bee简单易用:单表操作.多表关联操作,可以不用写sql,极少语句就可以完成SQL操作:10分钟即可学会使用. Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化. ...
- JAVA中返回json格式数据
1. 返回json格式 package com.demo.util;import com.alibaba.fastjson.JSONObject;import java.util.HashMap; i ...
最新文章
- 关于查询ios的app更新的历史版本记录
- (十)mybatis之配置(mybatis-config.xml)
- Script:找出ASM中的Spfile参数文件
- 徐艳 中国科学院成都计算机,互动、碰撞!精彩纷呈!成都市中职计算机专业菜单培训在双流建校举行!...
- SAP UI5 初学者教程之三:开始接触第一个 SAP UI5 控件 试读版
- java正则表达 w_正则表达式[\s\S] 与[\w\W]这样的用法,比较.
- Kubernetes的Device Plugin设计解读
- 判断五个分数等级划分_压力表精度等级怎么算?压力表精度等级划分及检验项目...
- 支付,造就金融科技生态契机——保险科技生态建设...
- 电梯控制系统设计(PLC及组态)
- 金蝶k3 与用友ncc凭证同步
- Linux下简单的木马查杀
- 今天讲一下完整的前端模块化,很实用
- php捉迷藏,查看“蘑菇捉迷藏!”的源代码
- 产品分析报告-思维导图
- GIF录制器之-ScreentoGif--非常好用
- POJ 1830 开关问题 高斯消元
- 怎么提高图片分辨率dpi?电脑图片怎么修改分辨率?
- iOS 开发 AVPlayer 深入浅出
- linux三台机器互相免密登录
热门文章
- bugfree安装mysql_安装搭建BugFree_CentOS安装搭建BugFree-云栖社区-阿里云
- ad域 禁用账号_AD域策略如何限制软件运行
- python编程实践-简单淘宝秒杀程序
- 内网渗透学习 day1
- BindingException: Invalid bound statement (not found): dao.UserDao.getUserList()
- 基于DM642 RAW采集格式的视频驱动开发及应用
- Python写日志文件
- 【JAVA学习笔记】你知道的越多,你不知道的越多系列一
- 赛效:怎么用转转大师快捷转换文件格式
- DAO 中存在的不足和优化方案