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请求”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
PHP-AJAX 与 MySQL
-
php手把手教你做网站(十一)Jquery Ajax上传单张图片
-
如何用Ajax解析json,XML数据格式
-
php 判断是否为ajax请求
-
最简单的数据接口ajax+php从数据库读取内容并显示tp
话不多说js部分˂pclass=“position”id=“usergroupname”...
-
原生和jQuery的ajax如何用
原生和jQuery的ajax如何用本文小编为大家详细介绍“原生和j...
-
jQuery怎么实现Ajax上传文件同时设置headers
jQuery怎么实现Ajax上传文件同时设置headers这篇文章...
-
jQuery如何实现AJAX调用错误处理
jQuery如何实现AJAX调用错误处理这篇文章主要为大家展示了“...
-
AJAX怎么使用XML文件进行交互式通信
AJAX怎么使用XML文件进行交互式通信本文小编为大家详细介绍“A...
-
AJAX如何调用ASP文件进行通信
AJAX如何调用ASP文件进行通信本篇内容介绍了“AJAX如何调用...