欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Struts 2三种方式实现Ajax

程序员文章站 2022-04-09 17:00:11
Ajax本质上和普通的HTTP请求是一样的,只不过普通的HTTP请求是给人看的,而Ajax请求是给JS代码去用的。 所以Ajax请求的页面一般比普通的HTTP请求的响应内容还要简单,可能是一个页面的一部分,也可能是xml、json等结构化的数据,还可能是一个简单的字符串。 所以,在Struts 2中 ......

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

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

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

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

 

方法1:依赖servlet api

Struts 2三种方式实现Ajax

 

Struts 2三种方式实现Ajax

在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 2三种方式实现Ajax

Struts 2三种方式实现Ajax

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

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

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

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

Struts 2三种方式实现Ajax

 

 Struts 2三种方式实现Ajax

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

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

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

Struts 2三种方式实现Ajax