Struts 2中实现Ajax的三种方式

Ajax本质上和普通的HTTP请求是一样的,只不过普通的HTTP请求是给人看的,而Ajax请求是给JS代码去用的。

所以Ajax请求的页面一般比普通的HTTP请求的响应内容还要简单,可能是一个页面的一部分,也可能是xml、json等结构化的数据,还可能是一个简单的字符串。

所以,在Struts 2中使用Ajax,Action一般就不会调用一个jsp视图来显示了(如果Ajax请求内容是页面的一部分也可能调用jsp视图),而是通过一些其他的方式。

下面介绍了三种方法,用于Action实现Ajax请求。

方法1:依赖Servlet API

在Action的方法中return NONE或return null表示直接用Action来处理,而不需要调用result,所以在配置文件的action标签中也没有result标签。

这里直接获取到Servlet中的HttpServletResponse对象,通过response的输出流写一个字符串,和不使用Struts 2直接用Servlet类似。

方法2:使用result type="stream"

在Struts 2的文档中推荐了一个比上一个方法更简单的方式,使用type为stream的result。通过这种方法,可以不依赖于Servlet API,所以单元测试会更方便。

在struts配置文件中,result的type设为stream。其中包含两个参数,第一个是contentType,表示响应的类型,如果有中文的话最好设置一下编码,第二个参数是用来指定Action中的对应的输入流,它的默认值就是inputStream,所以可以省略。

方法3:struts 2 json插件

上面两种方法可以返回的内容很随意,可以是任何字符串。

在很多Ajax请求会用到json字符串,因为它可以很方便的转换成JavaScript对象。

使用struts2-json-plugin可以很方便的生成json(用上面的两种方法调用json工具生成json也是不错的选择,这样可以不用使用这个插件)。

在package中extends应该改为json-default而不是struts-default,result的type设为json。

通过浏览器打开这个页面可以看到这个json:

{"age":22,"friends":["姚明","林丹"],"name":"xxg"}

总结

以上所述是小编给大家介绍的Struts 2中实现Ajax的三种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • ajax+json+Struts2实现list传递实例讲解

    由于实习需要,需要通过ajax来获取后台的List集合里面的值.由于前面没有接触过,所以今天就来研究下了. 一.首先需要下载JSON依赖的jar包.它主要是依赖如下: json-lib-2.2.2-jdk15 ezmorph-1.0.4 commons-logging-1.0.4 commons-lang-2.4 commons-collections-3.2.1 commons-beanutils 二.实例. 1.身份证错误信息Bean类(ErrorCondition.java) 复制代码 代

  • 使用struts2+Ajax+jquery验证用户名是否已被注册

    推荐阅读:JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册 在用户模块中的用户注册需求上,通常要进行用户名是否已被注册的验证,今天正好写了这个需求,把详细代码和所遇到的问题贴过来.在使用struts2+ajax时候,通常我们会返回json类型的数据,但是像上面的例子,我们只希望返回一个1和0有助于进行后续判断即可,没必要返回json类型,返回一个text字符串就可以了. regist.jsp(这里只提供<script>部分): <script type

  • jQuery ajax请求struts action实现异步刷新

    这个样例是用JQuery ajax和struts来做的一个小样例,在这个样例中采用两种方式将java Util中的list转换成支json的格式,第一种是用json-lib.jar这个jar包来转换,第二种是采用goole的gson-2.1.jar来转换,大家可以根据需要导入相应的jar包,在这里为了做测试将两种jar包都导入了.下面开始进入正题 第一步:导入相关jar包,本样例需导入struts相关jar包,json-lib.jar,gson-2.1.jar可以任意选择,但是这里需要都导入,因

  • JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册

    最近在仿造一个书城的网站: http://www.yousuu.com ,UI直接拿来用,前端后端自己写,目前大部分功能已经实现, 就把具体的 登录注册功能 拿来分享一下.PS:又写登录注册会不会被人喷啊=.= 一.开发环境的部署 程序结构: BootStrap+Ajax+Struts2+Hibernate+MySql 仅供参考:能实现相关功能即可 操作系统:ubuntu 14.10 前端框架:BootStrap   注:此框架只是为了实现用户界面,和具体功能无关 数据库:mysql-5.5 数

  • struts2+jquery实现ajax登陆实例详解

    文本仪一个实例讲述了struts2+jquery实现ajax登陆的实现方法,具体步骤如下: 一.新建一个web项目,取名test.配置好struts2的环境,并导入Jquery的js文件到该项目. 二.在com.action包下,新建一个loginAction.java loginAction.java的代码如下 package com.action; import org.apache.struts2.convention.annotation.Action; import org.apach

  • ajax struts2 下拉框赋值(适合所有)

    1.此代码适合所有下拉列表取值 2.一个项目所有的下拉列表只需要这一个公用方法: 步骤一:创建实体bean: 复制代码 代码如下: public class DictionaryBean { private String value_Id;//下拉框option的id private String value;//下拉框option的值 private String flag;//对应下拉框的值的类型,如flag=1,下拉列表为省份信息,flag=2为市级信息等: public String g

  • ajax交互Struts2的action(客户端/服务器端)

    1.客户端网页代码 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=G

  • 通过Ajax两种方式讲解Struts2接收数组表单的方法

    使用struts2表单传值,可以传一个或者是作为一个对象的各个属性传,都非常灵活便捷.但是如果我们需要传一个数组并希望struts正确接收,该怎么处理呢? 下面我将通过普通表单和ajax两种方式讲解.首先我们有如下一个实体,一个action和一个jsp. Student.java public class Student { private String name; private String num; } StudentAction.java public class StudentActi

  • Struts 2中实现Ajax的三种方式

    Ajax本质上和普通的HTTP请求是一样的,只不过普通的HTTP请求是给人看的,而Ajax请求是给JS代码去用的. 所以Ajax请求的页面一般比普通的HTTP请求的响应内容还要简单,可能是一个页面的一部分,也可能是xml.json等结构化的数据,还可能是一个简单的字符串. 所以,在Struts 2中使用Ajax,Action一般就不会调用一个jsp视图来显示了(如果Ajax请求内容是页面的一部分也可能调用jsp视图),而是通过一些其他的方式. 下面介绍了三种方法,用于Action实现Ajax请求

  • Java中实现线程的三种方式及对比_动力节点Java学院整理

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

  • scala中停止循环的三种方式(推荐)

    Scala 循环 有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推. 编程语言提供了更为复杂执行路径的多种控制结构. 循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图: 开始正文介绍: 1:使用return关键字 object BreakLoop { //1.使用return关键字 def add():Unit= { for(i <- 1 to 10){ if(i==7){ //停止循环

  • Java中获取时间戳的三种方式对比实现

    Java中获取时间戳 三种方式对比 最近项目开发过程中发现了项目中获取时间戳的业务.而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式. 1.System.currentTimeMillis() System类中的currentTimeMillis()方法是三种方式中效率最好的,运行时间最短.开发中如果设计到效率问题,推荐使用此种方式获取. System.currentTimeMillis() 2.new Date().getTime() 除了Sys

  • Java中线程Thread的三种方式和对比

    介绍 多线程主要的作用就是充分利用cpu的资源.单线程处理,在文件的加载的过程中,处理器就会一直处于空闲,但也被加入到总执行时间之内,串行执行切分总时间,等于每切分一个时间*切分后字符串的个数,执行程序,估计等几分钟能处理完就不错了.而多线程处理,文件加载与差分过程中 一.Java实现多线程的三种方式 1.继承Thread 通过Thread继承,并重写run方法来实现多线程,案例如下: public class ThreadPattern extends Thread { @Override p

  • Java项目开发中实现分页的三种方式总结

    目录 前言 使用 1.SpringDataJPA分页 2.MyBatis分页 3.Hutools工具类分页 总结 前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用方式也很简单,可本人在工作中除此以外还用到第三种更方便灵活的分页方式,在这里一同分享给大家. 使用 主要分为SpringDataJPA分页.MyBatis分页.Hutools工具类分页几个部

  • JavaScript中绑定事件的三种方式及去除绑定

    在JavaScript中,有三种常用的绑定事件的方法 第一种办法 函数写在结构层里面 非常不好,使页面很混乱,行为与结构得不到分离 <input type="button" onclick="func();"> 绑定事件的第二种办法 好处:行为与结构开始分离 缺点: 第二种绑定方式中只能给一个时间绑定一个处理函数 即.onclick = fn1;  .  onclick = fn2 最终的效果是onclick = fn2 <select name=

  • CodeIgniter中使用cookie的三种方式详解

    cookie在php程序设计中应用十分广泛,本文所述CodeIgniter中使用cookie主要有以下三种方式,读者可以根据自身项目需求酌情采用. 第一种方式:采用php原生态的方法设置的cookie的值 setcookie("user_id",$user_info['user_id'],86500); setcookie("username",$user_info['username'],86500); setcookie("password"

  • 详解Spring中bean实例化的三种方式

    今天我想来说说如何通过xml配置来实例化bean,其实也很简单. 使用xml配置来实例化bean共分为三种方式,分别是普通构造方法创建.静态工厂创建.实例工厂创建,OK,那么接下来我们来分别看看这几种方式. 普通构造方法创建 这种创建方式使我们使用最多的一种创建方式,直接配置bean节点即可,比如我有一个User类,如下: public class User { public void add() { System.out.println("add()---------"); } }

  • Spring Boot中获取request的三种方式及请求过程

    目录 一.请求过程 二.获取request的三种方式 2.1.可以封装为静态方法 2.2.controller的方法里面 2.3.直接注入 三.request常用API 3.1.request路径相关 3.2.Header相关 3.3.获取请求体 3.4.获取参数 3.5.中文乱码 3.6.转发 3.7.共享数据 四.response常用API 五.常用工具类 5.1.封装的 5.2.Hutool工具类 本篇博客主要记录request相关知识,也是开发当中经常遇到的,感兴趣的跟小编一起学习吧!

随机推荐