ajax从struts2请求数据的返回形式
Posted code never lies
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax从struts2请求数据的返回形式相关的知识,希望对你有一定的参考价值。
这篇随笔算是接上篇的数据请求返回,上一篇关于分页用的返回的数据形式是json,http://www.cnblogs.com/tele-share/p/7192206.html这次主要探讨ajax从struts接收html和io流的数据形式.
方式一:接收html格式的数据
jsp页面
1 <!-- ajax从struts请求拼接完成的html --> 2 <script type="text/javascript"> 3 var url = "${pageContext.request.contextPath}/test?time=" + new Date().getTime(); 4 $("#findAjax").click(function() { 5 $.ajax({ 6 url:url, 7 type:"GET", 8 dataType:"html", 9 data:null, 10 aysnc:false, 11 success:function(backdata) { 12 // alert(backdata); 13 $("body").append(backdata); 14 }, 15 error:function(ajax) { 16 alert(ajax.readyState); 17 } 18 }) 19 }) 20 </script> 21
后台struts方法
1 public String execute() throws Exception { 2 System.out.println("TestAction.execute()"); 3 StringBuffer sb = new StringBuffer(); 4 sb.append("<table border=\'2px\'>").append("<tr><td>编号</td><td>姓名</td></tr>"); 5 sb.append("<tr><td>1</td><td>wyc</td></tr>"); 6 sb.append("<tr><td>2</td><td>tele</td></tr>"); 7 sb.append("<tr><td>3</td><td>fifth</td></tr>"); 8 sb.append("</table>"); 9 HttpServletResponse response = ServletActionContext.getResponse(); 10 response.setContentType("text/html;charset=utf-8"); 11 PrintWriter pw = response.getWriter(); 12 pw.write(sb.toString()); 13 pw.flush(); 14 pw.close(); 15 System.out.println(sb); 16 return null; 17 }
方式二:以流的方式
jsp页面
1 <script type="text/javascript"> 2 var url = "${pageContext.request.contextPath}/test2?time=" + new Date().getTime(); 3 $("#findAjax").click(function() { 4 $.ajax({ 5 url:url, 6 type:"GET", 7 dataType:"html", 8 data:null, 9 aysnc:false, 10 success:function(backdata) { 11 alert(backdata); 12 $("body").append(backdata); 13 }, 14 error:function(ajax) { 15 alert(ajax.readyState); 16 } 17 }) 18 }) 19 </script> 20
后台struts方法,注意中文乱码问题
1 private InputStream is; 2 public InputStream getIs() { 3 return is; 4 } 5 6 public String execute2() { 7 StringBuffer sb = new StringBuffer(); 8 sb.append("<table border=\'2px\'>").append("<tr><td>编号</td><td>姓名</td></tr>"); 9 sb.append("<tr><td>1</td><td>wyc</td></tr>"); 10 sb.append("<tr><td>2</td><td>tele</td></tr>"); 11 sb.append("<tr><td>3</td><td>fifth</td></tr>"); 12 sb.append("</table>"); 13 String string = sb.toString(); 14 try { 15 is = new ByteArrayInputStream(string.getBytes("utf-8")); 16 } catch (UnsupportedEncodingException e) { 17 // TODO Auto-generated catch block 18 e.printStackTrace(); 19 } 20 21 return "OK"; 22 }
配置文件(本可以用通配符的方式来写,但为了清晰采用这种方式,虽然只有一个action)
1 <!-- test --> 2 <package name="xxx" extends="struts-default"> 3 <!-- 依赖servlet Api返回数据 --> 4 <action name="test" class="com.itcast.action.TestAction" method="execute"> 5 </action> 6 7 <!-- 使用流的方式返回数据,注意type=stream --> 8 <action name="test2" class="com.itcast.action.TestAction" method="execute2"> 9 <result name="OK" type="stream"> 10 <param name="contentType">text/html;charset = utf-8</param> 11 <param name="inputName">is</param> 12 </result> 13 </action> 14 </package>
总结:第一种方式依赖servlet api,但全部在服务器端完成拼接,客户端得到数据直接插入即可.第二种则是java流的方式,可以用于生成图片传输至客户端,当然还有json的形式,看情况选择使用哪种方式
以上是关于ajax从struts2请求数据的返回形式的主要内容,如果未能解决你的问题,请参考以下文章
Struts2+Jquery实现ajax并返回json类型数据
Struts2+Jquery实现ajax并返回json类型数据
如何将ajax请求返回的Json格式数据循环输出成table形式