struts2+ajax

web网页开发中需要用到struts2来处理action,通过struts2定义后端java类。

<action name="loginAction" class="java类的路径" method="Java类中的方法">
    <!--注意如果java类中定义的方法是有返回值的,则<result>标签形式必须为<result>网页</result>,也就是result标签中必须有元素  -->

    <result name="success">homePage.jsp</result>
    <result name="login">Login.jsp</result>

      <!--注意如果java类中定义的方法没有返回值的,则<result>标签形式必须为<result></result>,也就是result标签中没有元素  -->
        <result name="success"></result>
</action> 

这里给出完整的struts.xml文件,以及homePage_initialAction方法。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<!-- START SNIPPET: xworkSample -->
<struts>
    <!-- <constant name="struts.devMode" value="true" />开启开发者模式 -->
    <!-- <package name="default" extends="struts-default"> <action name="login" 
        class="Login" method="execute"> <result name="success">/success.jsp</result> 
        <result name="fail">/fail.jsp</result> </action> </package> -->
        <!-- 
         result中的name属性有下:

          1、success : 表示请求处理成功,该值也是默认值。

          2、error :表示请求处理失败。

          3、none :表示请求处理完成后不跳转到任何页面。

          4、input :表示输入时如果验证失败应该跳转到什么地方。

          5、login :表示登录失败后跳转的目标。
     -->
    <package name="default" extends="struts-default">

        <action name="addUserAction" class="myPackage.managerAction" method="addUser">
            <result name="success">index.jsp</result>
        </action>
        <action name="getUserAction" class="myPackage.managerAction" method="getUser">
            <result name="success">index.jsp</result>
        </action>
        <action name="link" class="myPackage.managerAction" method="ajax">
            <result name="success"></result>
        </action> 
        <!-- 用户登录界面的Action -->
        <!--    登录Action          -->
        <action name="loginAction" class="myPackage.managerAction" method="loginUser">
            <result name="success">homePage.jsp</result>
            <result name="login">Login.jsp</result>
        </action> 
                <!--    注册Action           -->
        <!--    主界面Action          -->
        <action name="homePage_initialAction" class="myPackage.homePageAction" method="homePage_initialAction">
            <result name="success"></result>
        </action> 
    </package>


</struts>
//homePage方法
public void homePage_initialAction() throws Exception{ //Map<String, String> mapData = new HashMap<String, String>(); String[] names=new String[200]; String[] description=new String[200]; String outData=""; for(int i=0;i<200;++i){ names[i]="name"; description[i]="des"; } for(int i=0;i<200;++i){ outData+=" "+names[i]; } for(int i=0;i<200;++i){ outData+=" "+description[i]; } HttpServletResponse response = ServletActionContext.getResponse(); PrintWriter writer = response.getWriter(); Random rand = new Random(); // 死循环 查询有无数据变化 long responseTime = System.currentTimeMillis(); writer.print(outData); }

  前端用ajax主动连接后端,这里ajax的url是在struts2中定义过的(ajax参考http://www.cnblogs.com/hoojo/p/longPolling_comet_jquery_iframe_ajax.html)

/**
 * 该函数用来轮询数据库并返回后台信息
 */
//$(function(){}) 是 $(document).ready(function(){}) 的简写
  $(function () {         
                (function longPolling() {            
                    $.ajax({
                        url: "homePage_initialAction",
                        data: {"timed": new Date().getTime()},
                        dataType: "text",
                        timeout: 5000,
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            $("#debug").append("[state: " + textStatus + ", error: " + errorThrown + " ]<br/>");
                            if (textStatus == "timeout") { // 请求超时
                                    longPolling(); // 递归调用
                                
                                // 其他错误,如网络错误等
                                } else { 
                                    longPolling();
                                }
                            },
                        success: function (data, textStatus) {
                            /*$("#state").append("[state: " + textStatus + ", data: { " + data + "} ]<br/>");*/
                            document.getElementById("debug").innerHTML=data;
                            /*alert(data);*/
                            if (textStatus == "success") { // 请求成功
                                longPolling();
                            }
                        }
                    });
                })();
                
            });

  定义完以上几个文件后,struts2就成功的和ajax结合到了一起,前端就能够持续的连接后端了。

原文地址:https://www.cnblogs.com/codeDog123/p/6063036.html