Struts2如何处理AJAX请求

Struts2如何处理AJAX请求

本文小编为大家详细介绍“Struts2如何处理AJAX请求”,内容详细,步骤清晰,细节处理妥当,希望这篇“Struts2如何处理AJAX请求”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Struts2 处理AJAX请求

Struts2整合AJAX有2种方式:

  • 使用type="stream"类型的<result>

  • 使用JSON插件

使用type="stream"类型的<result> 获取text

前端

<body><form>学号:<inputtype="text"id="no"><br/>姓名:<inputtype="text"id="name"><br/><buttontype="button"id="btn">查询成绩</button></form><pid="score"></p><scriptsrc="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

publicclassHandlerActionextendsActionSupport{privateintno;privateStringname;privateInputStreaminputStream;publicintgetNo(){returnno;}publicvoidsetNo(intno){this.no=no;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicInputStreamgetInputStream(){returninputStream;}publicvoidsetInputStream(InputStreaminputStream){this.inputStream=inputStream;}@OverridepublicStringexecute()throwsException{//此处缺省连接数据库查询总分Stringresult=name+"同学,你的总分是:680";//设置要返回的数据。我们传给浏览器的数据含有中文,需要设置utf-8编码,来解决中文乱码inputStream=newByteArrayInputStream(result.getBytes("utf-8"));returnSUCCESS;}}

前端向后台发送了2个字段:no、name

action需要设置2个同名的成员变量,并提供对应的getter、setter方法,才能接收到前端传来的数据。

需要一个InputStream类型的成员变量,并提供对应的getter、setter,用于向浏览器返回数据。

需要一个处理请求的方法(execute),设置返回给浏览器的数据。

struts.xml

<struts><packagename="action"namespace="/"extends="struts-default"><actionname="HandlerAction"class="action.HandlerAction"><resultname="success"type="stream"><!--设置返回给浏览器的数据类型--><paramname="contentType">text/html</param><!--指定获取InputStream的方法,getInputStream(),约定:去掉get,后面部分使用camel写法--><paramname="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>学号:<inputtype="text"id="no"><br/><buttontype="button"id="btn">查询学生信息</button></form><divid="show"></div><scriptsrc="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

publicclassHandlerActionextendsActionSupport{privateintno;privateInputStreaminputStream;publicintgetNo(){returnno;}publicvoidsetNo(intno){this.no=no;}publicInputStreamgetInputStream(){returninputStream;}publicvoidsetInputStream(InputStreaminputStream){this.inputStream=inputStream;}@OverridepublicStringexecute()throwsException{//此处缺省连接数据库查询得到学生信息Studentstudent=newStudent(1,"张三",20,100);StringjsonStr=JSON.toJSONString(student);//设置要返回的数据inputStream=newByteArrayInputStream(jsonStr.getBytes("utf-8"));returnSUCCESS;}}

使用了阿里的fastjson.jar,需要自己下载引入。

struts.xml

配置同上

使用JSON插件实现AJAX

前端

<body><form>学号:<inputtype="text"id="no"><br/><buttontype="button"id="btn">查询学生信息</button></form><divid="show"></div><scriptsrc="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

publicclassHandlerActionextendsActionSupport{privateintno;privateStudentstudent;publicintgetNo(){returnno;}publicvoidsetNo(intno){this.no=no;}publicStudentgetStudent(){returnstudent;}publicvoidsetStudent(Studentstudent){this.student=student;}@OverridepublicStringexecute()throwsException{//此处缺省连接数据库查询得到学生信息student=newStudent(1,"张三",20,100);returnSUCCESS;}}

需要设置同名的成员变量,并提供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><packagename="example"namespace="/"extends="json-default"><actionname="HandlerAction"class="action.HandlerAction"><!--type="json"的result,可以缺省name属性,当然写上也行--><resulttype="json"><paramname="noCache">true</param><!--设置返回给浏览器的数据类型--><paramname="contentType">text/html</param></result></action></package></struts>

说明

需要手动添加JSON插件 struts2-json-plugin.jar 。

上面的压缩包含有struts的所有jar包,其中就包括了struts2-json-plugin.jar。

下面的压缩包只有struts核心的8个jar包。

读到这里,这篇“Struts2如何处理AJAX请求”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。

发布于 2022-03-19 21:09:31
收藏
分享
海报
0 条评论
29
上一篇:AJAX常用的两种跨域方法是什么 下一篇:ajax中各个参数的含义是什么
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码