Ajax回显server端的执行信息

今天有人问"页面可以用ajax通过事件调java方法,但有是我想把java方法执行过程中的某些提示信息自由自动的反馈给页面。该怎么办", 我下来就做了一个demo. 现在贴上来, 供后来者参考.

我用的是spring环境, 所有的controller都继承子Controller;
RegisteController:用来模拟用户注册的步骤, 它会产生一些执行过程中的信息放到一个链表里;
InfoController: 用来把链表中最顶端的那条信息.发送给客户.
用prototype的ajax来发送请求.
发送请求的同时, 发送另外一个请求用来得到执行过程中的提示信息. 而这个过程递归执行, 直到收到"finish" 消息.

jsp文件, 用来发送ajax请求和显示回显信息. 
 注意导入的prototype的路径.

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <html>
  3.     <head>
  4.         <title>Testing pagetitle>
  5.         <script type="text/javascript" src="js/prototype-1.5.1.2.js">script>
  6.         <script type="text/javascript">
  7.             function postAjax(){
  8.                 var myAjax = new Ajax.Request(
  9.                     'register.do',
  10.                     {
  11.                         method: 'post',
  12.                         parameters: {username: 'username', password: 'password'},
  13.                         onComplete: doComplete
  14.                     }
  15.                 );
  16.                 alert("request send.");
  17.                 getInfo();
  18.             }
  19.             function getInfo(){
  20.                 var infoAjax = new Ajax.Request(
  21.                     'info.do',
  22.                     {
  23.                         method: 'get',
  24.                         parameters: {},
  25.                         onComplete: doResult
  26.                     }
  27.                 );
  28.             }
  29.             
  30.             function doResult(req){
  31.                 if(req.responseText=='finish'){
  32.                     return;
  33.                 }
  34.                 //alert(req.responseText);
  35.                 var myDiv = document.createElement("div");
  36.                 var infoText = document.createTextNode(req.responseText);
  37.                 myDiv.appendChild(infoText);
  38.                 $(info).appendChild(myDiv);
  39.                 //循环发送请求得到执行信息.
  40.                 getInfo();
  41.             }
  42.             
  43.             function doComplete(){
  44.                 
  45.             }
  46.         script>
  47.         <style type="text/css">
  48.         html,body {
  49.             font-family: Verdana, Arial, Helvetica, sans-serif;
  50.             font-size: 11pt;
  51.             margin: 0;
  52.             padding: 0;
  53.             border: 0 none;
  54.             overflow: hidden;
  55.             height: 100%;
  56.         }
  57.         .title{
  58.             font-weight: bold;
  59.         }
  60.         style>
  61.     head>
  62.     <body>
  63.         <div><a href="javascript: postAjax();">点击将提交一个ajax请求, 模拟执行用户注册行为. 这个请求得执行过程将显示在下面.a>div>
  64.         <div id="info" style="width: 400px; height: 200px; overflow: scroll; border: solid red 1px;">
  65.             <div class="title">The response information comes from server: div>
  66.             
  67.         div>
  68.     body>
  69. html>

RegisteController:

    • import java.util.LinkedList;
    • import javax.servlet.http.HttpServletRequest;
    • import javax.servlet.http.HttpServletResponse;
    • import org.apache.commons.logging.Log;
    • import org.apache.commons.logging.LogFactory;
    • import org.springframework.web.servlet.ModelAndView;
    • import org.springframework.web.servlet.mvc.Controller;
    • public class RegisteController implements Controller {
    •     private Log log = LogFactory.getLog(getClass());
    •     
    •     public ModelAndView handleRequest(HttpServletRequest arg0,
    •             HttpServletResponse arg1) throws Exception {
    •         String username = arg0.getParameter("username");
    •         String password = arg0.getParameter("password");
    •         log.info("username:" + username + " password:" + password);
    •         /**
    •          * 下面的infoList将用来存放执行过程中的提示信息. 
    •          * 之所以用LinkedList是因为LinkedList具有队列操做的特点.
    •          * 最先放进去的信息可以最先被取走.
    •          */
    •         LinkedList infoList = new LinkedList();
    •         /**
    •          * 这里放的信息仅仅是起到模拟作用.
    •          * 我一次性把所有的信息都放进去了.只是为了模拟效果.
    •          * 你可以根据实际需要, 在需要的时候再放入信息.
    •          */
    •         infoList.add("username: " + username);
    •         //do something else.
    •         infoList.add("password: " + password);
    •         //do something else.
    •         infoList.add("Try to validate username......");
    •         //do something else.
    •         infoList.add("this username is valid to use");
    •         //do something else.
    •         infoList.add("Try to validate password......");
    •         //do something else.
    •         infoList.add("the password is valid to use");
    •         //do something else.
    •         infoList.add("Try to add this user into database......");
    •         //do something else.
    •         infoList.add("try to set entitlement for this user");
    •         //do something else.
    •         infoList.add("user registering ok.");
    •         //do something else.
    •         infoList.add("succeed......");
    •         arg0.getSession().setAttribute("infoList", infoList);
    •         arg1.getWriter().write("succeed");
    •         return null;
    •     }
    • }

InfoController:

  1. import java.util.LinkedList;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.springframework.web.servlet.ModelAndView;
  5. import org.springframework.web.servlet.mvc.Controller;
  6. /**
  7.  * @author Administrator
  8.  * 这个controller用来向客户端发送执行过程中产生的信息.
  9.  */
  10. public class InfoController implements Controller{
  11.     public ModelAndView handleRequest(HttpServletRequest arg0,
  12.             HttpServletResponse arg1) throws Exception {
  13.         LinkedList list = (LinkedList)arg0.getSession().getAttribute("infoList");
  14.         /**
  15.          * 为了模拟延迟效果, 这里睡一小会儿.
  16.          */
  17.         Thread.sleep(1000);
  18.         if(list==null){
  19.             arg1.getWriter().write("please wait a second.");
  20.             return null;
  21.         }
  22.         if(list.size()==0){
  23.             arg1.getWriter().write("finish");
  24.             return null;
  25.         }
  26.         /**
  27.          * linkedList.remove()将取走第一条信息.
  28.          */
  29.         String info = list.remove();
  30.         arg1.getWriter().write(info);
  31.         return null;
  32.     }
  33. }

spring配置文件:

  1. ......
  2. <bean name="/register.do" class="com.fydy.action.RegisteController" />    
  3. <bean name="/info.do" class="com.fydy.action.InfoController" />
  4. ......

(end)

==========================soe==================================

/**JS画图,JS小游戏,JS代码集合, JS地图,JS写RPG游戏,JS动画,JS绘图, JS对象, JS函数, JS经典 例子,JS面向对象, javascript画图,javascript小游戏,javascript代码集合, javascript地图,javascript写RPG游戏,javascript动画,javascript绘图, javascript对象, javascript函数, javascript经典例子,javascript面向对象,ajax代码,ajax入门,ajax代码,ajax+java,ajax技术,css网站,css资源,css代码,css学习,css下载,css教程,css分享**/


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部