控制器Servlet則提供了簡單的改變:
對于Ajax系統而言,服務器響應無須是整個頁面內容,可以僅是
必需的數據,控制器不能將數據請求轉發到jsp頁面。
此時控制器有兩個選擇:
1、直接生成簡單的響應數據。
在這種模式下,Servlet直接通過response獲取頁面輸出流,通過
輸出流生成字符響應。
package pers.zkr.chat.web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import pers.zkr.chat.service.ChatService;@WebServlet(urlPatterns={"/chat.do"})public class ChatServlet extends HttpServlet { @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("utf-8"); String msg=request.getParameter("chatMsg"); System.out.println(msg); if(msg!=null&&!msg.equals("")){ String user=(String)request.getSession().getAttribute("user"); System.out.println(user+"user"); ChatService.instance().addMsg(user, msg); } //設置響應內容的類型 <strong>response.setContentType("text/html;charset=utf-8"); // 獲取頁面輸出流 PrintWriter out = response.getWriter(); //直接生成響應 out.println(ChatService.instance().getMsg());</strong> request.setAttribute("msg",ChatService.instance().getMsg()); forward("/chat.jsp", request , response); } private void forward(String url, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.getRequestDispatcher(url) .forward(request , response); } }
2、轉向一個簡單的jsp使用JSP頁面生成簡單的響應。
控制器將請求轉發到另外的JSP頁面,而JSP頁面僅僅負責輸出聊天信息
在這里需要一個jsp頁面來接收控制器發來的數據,也是服務器的響應文本,而在
原來的頁面,只需:
1)創建XMLHttpRequest對象
2) 發送請求
3)接收服務器的響應
package org.crazyit.chat.web;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.*;import java.io.*;import org.crazyit.chat.service.*;/** * Description: * <br/>網站: <a href=//www.survivalescaperooms.com>錯新站長站</a> * <br/>Copyright (C), 2001-2014, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @version 1.0 */@WebServlet(urlPatterns={"/chat.do"})public class ChatServlet extends HttpServlet{ public void service(HttpServletRequest request, HttpServletResponse response)throws IOException,ServletException { // 設置使用GBK字符集來解析請求參數 request.setCharacterEncoding("utf-8"); String msg = request.getParameter("chatMsg"); if ( msg != null && !msg.equals("")) { // 取得當前用戶 String user = (String)request.getSession(true) .getAttribute("user"); // 調用ChatService的addMsg來添加聊天消息 ChatService.instance().addMsg(user , msg); } // 將全部聊天信息設置成request屬性 <strong>request.setAttribute("chatList" , ChatService.instance().getMsg());</strong> // 轉發到chatreply.jsp頁面 forward("/chatreply.jsp" , request , response); } // 執行轉發請求的方法 private void forward(String url , HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException { // 執行轉發 request.getRequestDispatcher(url) .forward(request,response); }}
新聞熱點
疑難解答
圖片精選