Structs 接收 ajax数据

Posted 猿在囧途

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Structs 接收 ajax数据相关的知识,希望对你有一定的参考价值。

以前学习SSH框架的时候,因为基本都是用的form表单,所以直接提交到了structs的action,所以直接考虑那些实体类dto,注意form里面的name与类的字段名相对应即可。

亦或是单独用了ajax,因为以前用servlet写的比较多,用起来自己也熟悉一些,所以我会在SSH里面单独去写servlet,甚至于强加servlet的配置,防止servlet的请求被structs过滤了。可是今天突然想到,ajax应该也是可以直接利用于structs的吧,所以今天上网搜了下资料,下面做一个总结吧:

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


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

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

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

方法1:依赖Servlet API

Structs 接收 ajax数据

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


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

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

Structs 接收 ajax数据

Structs 接收 ajax数据

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

方法3:struts 2 json插件

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

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

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

此时需要添加一个jar文件:struts2-json-plugin-x.x.x.x.jar。

Structs 接收 ajax数据

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


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

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

好了,structs接收ajax的三种方式如上,点击“阅读原文”查看原文章。谢谢观看。

以上是关于Structs 接收 ajax数据的主要内容,如果未能解决你的问题,请参考以下文章

ajax回调数据 Structs has detected an unhandled exception 问题

HTML,CSS,JavaScript,AJAX,JSP,Servlet,JDBC,Structs,Spring,Hibernate,Xml等概念

Structs框架

在 Spring Boot 和 Oracle 中使用 STRUCTS 时未释放连接

Structs复习 开始 第一个helloworld项目

structs2 获得表单数据