ajax struts2 数据的返回形式

转自:https://www.cnblogs.com/tele-share/p/7487742.html

方式一:接收html格式的数据

jsp页面


<!-- ajax从struts请求拼接完成的html -->
          <script type="text/javascript">
              var url = "${pageContext.request.contextPath}/test?time=" + new Date().getTime();
              $("#findAjax").click(function() {
                  $.ajax({
                        url:url,
                        type:"GET",
                        dataType:"html",
                        data:null,
                        aysnc:false,
                        success:function(backdata) {
                           // alert(backdata); 
                            $("body").append(backdata);
                        },
                        error:function(ajax) {
                            alert(ajax.readyState);
                        }
                    })
              }) 
          </script>

后台struts方法

public String execute() throws Exception {
            System.out.println("TestAction.execute()");
        StringBuffer sb = new StringBuffer();
        sb.append("<table border='2px'>").append("<tr><td>编号</td><td>姓名</td></tr>");
        sb.append("<tr><td>1</td><td>wyc</td></tr>");
        sb.append("<tr><td>2</td><td>tele</td></tr>");
        sb.append("<tr><td>3</td><td>fifth</td></tr>");
        sb.append("</table>");
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("text/html;charset=utf-8");
        PrintWriter pw = response.getWriter();
        pw.write(sb.toString());
        pw.flush();
        pw.close();
        System.out.println(sb);
        return null;
    }

方式二:以流的方式

jsp页面


<script type="text/javascript">
              var url = "${pageContext.request.contextPath}/test2?time=" + new Date().getTime();
              $("#findAjax").click(function() {
                  $.ajax({
                        url:url,
                        type:"GET",
                        dataType:"html",
                        data:null,
                        aysnc:false,
                        success:function(backdata) {
                            alert(backdata);
                            $("body").append(backdata);
                        },
                        error:function(ajax) {
                            alert(ajax.readyState);
                        }
                    })
              })
          </script>

后台struts方法,注意中文乱码问题

private InputStream is;
    public InputStream getIs() {
        return is;
    }
    
    public String execute2() {
        StringBuffer sb = new StringBuffer();
        sb.append("<table border='2px'>").append("<tr><td>编号</td><td>姓名</td></tr>");
        sb.append("<tr><td>1</td><td>wyc</td></tr>");
        sb.append("<tr><td>2</td><td>tele</td></tr>");
        sb.append("<tr><td>3</td><td>fifth</td></tr>");
        sb.append("</table>");
        String string = sb.toString();
        try {
            is = new ByteArrayInputStream(string.getBytes("utf-8"));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return "OK";
    }

配置文件(本可以用通配符的方式来写,但为了清晰采用这种方式,虽然只有一个action)

<!-- test -->
    <package name="xxx" extends="struts-default">
    <!-- 依赖servlet Api返回数据 -->
        <action name="test" class="com.itcast.action.TestAction" method="execute">
        </action>
        
        <!-- 使用流的方式返回数据,注意type=stream -->
        <action name="test2" class="com.itcast.action.TestAction" method="execute2">
        <result name="OK" type="stream">
            <param name="contentType">text/html;charset = utf-8</param>
            <param name="inputName">is</param>
        </result>
        </action>
    </package>
总结:第一种方式依赖servlet api,但全部在服务器端完成拼接,客户端得到数据直接插入即可.第二种则是java流的方式,可以用于生成图片传输至客户端,当然还有json的形式,看情况选择使用哪种方式

猜你喜欢

转载自blog.csdn.net/weixin_39418164/article/details/80215312