Struts1.x中利用Ajax动态更新

1.web.xml

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

<web-app version="2.5"  xmlns="http://java.sun.com/xml/ns/javaee"  

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  

<display-name />  

<servlet>    

<servlet-name>action</servlet-name>    

 <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>    

<init-param>      

 <param-name>config</param-name>      

<param-value>/WEB-INF/struts-config.xml</param-value>    

 </init-param>    

<init-param>      

<param-name>debug</param-name>      

 <param-value>3</param-value>    

</init-param>    

 <init-param>      

<param-name>detail</param-name>      

<param-value>3</param-value>    

</init-param>    

<load-on-startup>0</load-on-startup><!-- 服务一启动时就进行实例化 -->  

</servlet>  

 <servlet-mapping>   

  <servlet-name>action</servlet-name>    

<url-pattern>*.do</url-pattern>  

 </servlet-mapping>  

 <welcome-file-list>    

 <welcome-file>index.jsp</welcome-file>  

 </welcome-file-list>

</web-app>

2.struts-config.xml

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

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

<struts-config>  

<form-beans>  

<!-- 让Struts知道Form,提供给Action使用 ,name为Form的引用名,type为所对应的Form类的全名-->    

<form-bean name="messageForm" type="com.hollycrm.form.MessageForm">

</form-bean>  

 </form-beans>  

<global-exceptions />  

<global-forwards />  

 <action-mappings>    

<action path="/message" type="com.hollycrm.action.MessageAction" name="messgeForm">    

 <forward name="success" path="/index.jsp"></forward>    

</action>  

</action-mappings>  

<message-resources parameter="com.yourcompany.struts.ApplicationResources" />

</struts-config>

3.index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>  

 <head>    

<base href="<%=basePath%>">   

<script src="js/create.js" language="javascript">  

</script>  

 </head>    

<body>    

<font size="2"></font>   

  姓名:<input type="text" id="name" onblur="sayHello()"><br/>    

AJAX返回的值:<span id='hello'></span><br>  

 </body>

</html>

4.create.js

// 创建XMLHttpRequest对象 function createXMLHttpRequest() {  

// 判断浏览器是否通过JavaScript本地方法支持XMLHttpRequest对象  

if (window.XMLHttpRequest) {   // Mozilla浏览器   

// 除IE浏览器外其他浏览器中创建XMLHttpRequest对象的方法   

XMLHttpReq = new XMLHttpRequest();  

} else {   // IE浏览器   

// 判断浏览器是否支持ActiveX,在IE浏览器中是通过ActiveX组件支持XMLHttpRequest对象   

if (window.ActiveXObject) {    // 在不同版本的IE浏览器中,对XMLHttpRequest对象的支持方法有些不同    

// 用以下代码来判断以适应不同版本的IE浏览器    

try {     

XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");    

} catch (e) {     

try {      

XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");     

} catch (e) {     }    }   }  } }

// 处理服务器响应请求,对服务器返回的信息进行分析处理,并且把分析的结果展示在页面的指定位置

 function handleResponse() {  

// 判断对象状态,readyState这个属性描述了请求的状态,可以取下面的5个值:0(未初始化),1(正在加载),2(已加载),3(交互中),4(已完成)  

if (XMLHttpReq.readyState == 4) {   // 信息已经成功返回,开始处理信息   

// status属性描述了服务器的状态码,可以是200,404等  

 if (XMLHttpReq.status == 200) {   

 var out = "";   

 // responseXML是服务器以XML格式返回的响应。   

 var res = XMLHttpReq.responseXML;    

var response = res.getElementsByTagName("response")[0].firstChild.nodeValue;   

 document.getElementById("hello").innerHTML = response;

 //   document.getElementsByName("hello").innerHTML=response;   

}  } }

// 发送客户端的请求

 function sendRequest(url) {  

createXMLHttpRequest();  

// open(string method,string url,boolean asynch,string name,string  password)方法用于建立对服务器的调用

 // 这个方法有5个参数,前两个参数是必须的,其中method可以是GET或者POST,url是指所要访问的服务器资源的位置,aysnch是指异步访问服务器还是同步访问,默认是异步访问,异步访问正是Ajax的优势所在。使用最后两个参数可以使用指定的用户名和密码访问服务器资源。

 XMLHttpReq.open("GET", url, true);  // 指定响应函数

 // onreadystatechange属性,每个状态的改变都会调用这个事件处理器,使用这个属性可以监听状态的变化,并提供对应的处理方法  

XMLHttpReq.onreadystatechange = handleResponse;  

// 发送请求,send(content)方法向服务器发送请求,这个方法中的参数会作为请求中的内容发送到服务器  

XMLHttpReq.send(null);

}

// 开始调用Ajax的功能

function sayHello() {

 var name = document.getElementById("name").value;

 // alert(name);  

// 发送请求

 sendRequest("message.do?name="+name);

}

5. MessageAction.java

public class MessageAction extends Action{

 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

//  MessageForm messageForm=(MessageForm) form;   

 //设置生成文件的类型和编码方式  

 response.setContentType("text/xml;charset=UTF-8");  

 response.setHeader("Cache-Control", "no-cache");   

PrintWriter returnValue=response.getWriter();   

String output="";   //处理接收到的参数,生成响应的XML文档

//  System.out.println(messageForm.getName());

 //  System.out.println(request.getParameter("name"));

//  if(messageForm.getName().equals("15979089546")){  

 if(request.getParameter("name").equals("15979089546")){   

 output="<response>wensm</response>";   

}else{    

output="<response>该用户不存在</response>";   

}  

 returnValue.print(output);   

returnValue.close();   

return mapping.findForward("sucess");  

}   }

 6.MessageForm.java

public class MessageForm extends ActionForm{

 private String name=null;

 public String getName() {  

 return name;  

}

 public void setName(String name) {   

this.name = name;  

}   }

posted @ 2012-03-28 11:28  残星  阅读(6192)  评论(0编辑  收藏  举报