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结合到了一起,前端就能够持续的连接后端了。