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的形式,看情况选择使用哪种方式

原文地址:https://www.cnblogs.com/tele-share/p/7487742.html