Struts2 处理AJAX请求
Struts2整合AJAX有2种方式:
- 使用type="stream"类型的<result>
- 使用JSON插件
使用type="stream"类型的<result> 获取text
前端
- <body>
- <form>
- 学号:<input type="text" id="no"><br />
- 姓名:<input type="text" id="name"><br />
- <button type="button" id="btn">查询成绩</button>
- </form>
- <p id="score"></p>
- <script src="js/jquery-3.4.1.min.js"></script>
- <script>
- $("#btn").click(function () {
- $.ajax({
- url:"HandlerAction",
- type:"get",
- data:{"no":$("#no").val(),"name":$("#name").val()},
- dataType:"text",
- error:function () {
- console.log("ajax请求失败!")
- },
- success:function (data) {
- $("#score").text(data);
- }
- })
- });
- </script>
- </body>
url要和struts.xml中action的name、包的namespace对应。
action
- public class HandlerAction extends ActionSupport {
- private int no;
- private String name;
- private InputStream inputStream;
- public int getNo() {
- return no;
- }
- public void setNo(int no) {
- this.no = no;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public InputStream getInputStream() {
- return inputStream;
- }
- public void setInputStream(InputStream inputStream) {
- this.inputStream = inputStream;
- }
- @Override
- public String execute() throws Exception {
- //此处缺省连接数据库查询总分
- String result = name + "同学,你的总分是:680";
- //设置要返回的数据。我们传给浏览器的数据含有中文,需要设置utf-8编码,来解决中文乱码
- inputStream=new ByteArrayInputStream(result.getBytes("utf-8"));
- return SUCCESS;
- }
- }
前端向后台发送了2个字段:no、name
action需要设置2个同名的成员变量,并提供对应的getter、setter方法,才能接收到前端传来的数据。
需要一个InputStream类型的成员变量,并提供对应的getter、setter,用于向浏览器返回数据。
需要一个处理请求的方法(execute),设置返回给浏览器的数据。
struts.xml
- <struts>
- <package name="action" namespace="/" extends="struts-default">
- <action name="HandlerAction" class="action.HandlerAction">
- <result name="success" type="stream">
- <!-- 设置返回给浏览器的数据类型 -->
- <param name="contentType">text/html</param>
- <!--指定获取InputStream的方法,getInputStream(),约定:去掉get,后面部分使用camel写法 -->
- <param name="inputName">inputStream</param>
- </result>
- </action>
- </package>
- </struts>
流程分析
- 前端向后台发送ajax请求,传递no、name2个字段
- JVM创建action实例,调用no、name对应的setter方法把前端传过来的值赋给成员变量(会自动转换为目标类型),完成action的初始化
- JVM调用action处理业务的方法execute,设置向浏览器返回的数据
- JVM根据struts.xml中<result>指定的方法(getInputStream),获取InputSteam,将里面的数据传给浏览器。
使用type="stream"类型的<result> 获取json
前端
- <body>
- <form>
- 学号:<input type="text" id="no"><br />
- <button type="button" id="btn">查询学生信息</button>
- </form>
- <div id="show"></div>
- <script src="js/jquery-3.4.1.min.js"></script>
- <script>
- $("#btn").click(function () {
- $.ajax({
- url:"HandlerAction",
- type:"post",
- data:{"no":$("#no").val()},
- dataType:"json",
- error:function () {
- console.log("ajax请求失败!")
- },
- success:function (data) {
- $("#show").append("姓名:" + data.name+",");
- $("#show").append("年龄:" + data.age+",");
- $("#show").append("成绩:" + data.score+"。");
- }
- })
- });
- </script>
- </body>
action
- public class HandlerAction extends ActionSupport {
- private int no;
- private InputStream inputStream;
- public int getNo() {
- return no;
- }
- public void setNo(int no) {
- this.no = no;
- }
- public InputStream getInputStream() {
- return inputStream;
- }
- public void setInputStream(InputStream inputStream) {
- this.inputStream = inputStream;
- }
- @Override
- public String execute() throws Exception {
- //此处缺省连接数据库查询得到学生信息
- Student student = new Student(1, "张三", 20, 100);
- String jsonStr = JSON.toJSONString(student);
- //设置要返回的数据
- inputStream=new ByteArrayInputStream(jsonStr.getBytes("utf-8"));
- return SUCCESS;
- }
- }
使用了阿里的fastjson.jar,需要自己下载引入。
struts.xml
配置同上
使用JSON插件实现AJAX
前端
- <body>
- <form>
- 学号:<input type="text" id="no"><br />
- <button type="button" id="btn">查询学生信息</button>
- </form>
- <div id="show"></div>
- <script src="js/jquery-3.4.1.min.js"></script>
- <script>
- $("#btn").click(function () {
- $.ajax({
- url:"HandlerAction",
- type:"post",
- data:{"no":$("#no").val()},
- dataType:"json",
- error:function () {
- console.log("ajax请求失败!")
- },
- success:function (data) {
- $("#show").append("姓名:" + data.student.name+",");
- $("#show").append("年龄:" + data.student.age+",");
- $("#show").append("成绩:" + data.student.score+"。");
- }
- })
- });
- </script>
- </body>
action
- public class HandlerAction extends ActionSupport {
- private int no;
- private Student student;
- public int getNo() {
- return no;
- }
- public void setNo(int no) {
- this.no = no;
- }
- public Student getStudent() {
- return student;
- }
- public void setStudent(Student student) {
- this.student = student;
- }
- @Override
- public String execute() throws Exception {
- //此处缺省连接数据库查询得到学生信息
- student = new Student(1, "张三", 20, 100);
- return SUCCESS;
- }
- }
需要设置同名的成员变量,并提供getter、setter方法,来接收前端传来的数据。
此种方式是由JSON插件把action对象序列化为一个JSON格式的字符串,传给浏览器。浏览器可以直接访问action的所有成员变量(实质是调用对应的getter方法)。
我们只需要把ajax要请求的数据封装为action的成员变量,并提供对应的getter、setter方法。需要在主调方法(execute)的return语句之前对请求的数据赋值。
- success:function (data) {
- $("#show").append("姓名:" + data.student.name+",");
- $("#show").append("年龄:" + data.student.age+",");
- $("#show").append("成绩:" + data.student.score+"。");
- }
浏览器接受到的数据data本身就是action实例,可通过.访问成员变量。
struts.xml
- <struts>
- <package name="example" namespace="/" extends="json-default">
- <action name="HandlerAction" class="action.HandlerAction">
- <!--type="json"的result,可以缺省name属性,当然写上也行-->
- <result type="json">
- <param name="noCache">true</param>
- <!-- 设置返回给浏览器的数据类型 -->
- <param name="contentType">text/html</param>
- </result>
- </action>
- </package>
- </struts>
json-default包继承了struts-default包的配置,所以不必再继承struts-default。
说明
需要手动添加JSON插件 struts2-json-plugin.jar 。
上面的压缩包含有struts的所有jar包,其中就包括了struts2-json-plugin.jar。
下面的压缩包只有struts核心的8个jar包。
Struts2 处理AJAX请求的更多相关文章
- extjs ajax请求与struts2进行交互
sencha extjs 5 增加一个struts2的配置,这样可以在设置好前台布局之后,与后台交互获取数据显示.现在有一个问题是struts2对于url的跳转action支 持比较良好,但是对于像E ...
- Struts2处理(jQuery)Ajax请求
1. Ajax Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)时一种创建交互式网页应用的网页开发技术,它并不是一项新的技术,其产生 ...
- Struts2 在登录拦截器中对ajax请求的处理
前言: 由于ajax请求不像http请求,可以直接进行页面跳转,你返回的所有东西,ajax都只会识别为一个字符串. 之前尝试的方法是在拦截器中返回一个标识给ajax,然后再在每一个ajax请求成功之后 ...
- struts2响应AJAX
1发送ajax请求使用stream进行响应 Result的type属性的stream取值. 1.1定义Action public class UserAction { private String u ...
- 关于struts2中action请求会执行两次的问题
关于struts2中action请求会执行两次的问题 在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...
- Struts2之ajax初析
Web2.0的随波逐流,Ajax那是大放异彩,Struts2框架自己整合了对Ajax的原生支持(struts 2.1.7+,之前的版本可以通过插件实现),框架的整合只是使得JSON的创建变得异常简单, ...
- Jquery progressbar通过Ajax请求获取后台进度演示
项目源代码下载:http://download.csdn.net/detail/nuptboyzhb/6262253 1.简介 本文主要演示Jquery progressbar的进度条功能.js通过a ...
- Struts2结合Ajax实现登录
前言:Struts2作为一款优秀的MVC框架,和Ajax结合在一起,用户就会有良好的体验,本篇博文我们来模拟一个简单的登录操作,实现Ajax的异步请求,其中Struts2进行的是链接处理,Action ...
- Struts2与Ajax数据交互
写在前面: ajax请求在项目中常常使用,今天就平时掌握的总结一下,关于使用ajax请求到Struts2中的action时,前台页面与后台action之间的数据传递交互问题. 这里我主要记录下自己所掌 ...
随机推荐
- Vue 高德地图 路径规划 画点
CDN 方式 <!--引入高德地图JSAPI --> <script src="//webapi.amap.com/maps?v=1.4.13&key=您申请的ke ...
- 自己常用的Linux命令和Hadoop命令
记录自己常用的Linux命令: ss的启动命令:ssserver -c /etc/shadowsocks.json jupyter notebook的启动命令:jupyter notebook --a ...
- SVN代码迁移到GITlab
==================================================================================================== ...
- Linux centos7 shell 介绍、 命令历史、命令补全和别名、通配符、输入输出重定向
一.shell介绍 shell脚本是日常Linux系统管理工作中必不可少的,不会shell,就不是一个合格管理员. shell是系统跟计算机硬件交互使用的中间介质,一个系统工具.实际上在shell和计 ...
- Django - 后台admin不显示带auto_now, auto_now_add选项的字段
https://stackoverflow.com/questions/6386172/datetimefield-doesnt-show-in-admin-system 解决办法 class Rat ...
- 解决linux乱码问题
echo "LANG="zh_CN.UTF-8" >> /etc/sysconfig/i18n yum -y install kde-l10n-Chinese ...
- BZOJ 3262: 陌上花开 (cdq分治,三维偏序)
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; c ...
- 树莓派3B 安装gcc和g++
转:https://blog.csdn.net/zhuming3834/article/details/81946707 安装 如果不是root 用户,请自行加上sudo apt-get instal ...
- TensorFlow:使用inception-v3实现各种图像识别
程序来自博客: # https://www.cnblogs.com/felixwang2/p/9190740.html上面这个博客是一些列的,所以可以从前往后逐一练习. # https://www.c ...
- windows C++ 网络编程
转载:https://blog.csdn.net/yao_hou/article/details/91400832 https://blog.csdn.net/Ctrl_qun/article/li ...