前幾天在網上下載一個基于Servlet的建議聊天室程式 (java )看了一下源代碼,也試著運行了一下,但是怎么也找不到關于聊天訪問者串列 和訊息串列往ServletContext 變數setAttribute()的代碼,但是演示程序及后面的代碼卻訪問者串列 和訊息串列確實是從ServletContext .gettribute("messagelist") ServletContext .gettribute("userlist") 我就是搞不懂,程式代碼沒有往ServletContext 呼叫setAttribute()存盤資料,可是它又是怎么得到的userlist 和messagelist呢? 相關代碼如下 大家幫查查看
package session_test;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 發送訊息 */
public class MessageServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException{
response.setContentType("text/html;charset=GBK");
PrintWriter out=response.getWriter();
request.setCharacterEncoding("GBK");
out.println("<html>");
out.println("<head><tilte>MessageServlet</title></head>");
out.println("<body>");
request.setCharacterEncoding("GBK");
ServletContext context=getServletContext();
//獲取表單資訊
String usr=request.getParameter("uname");
System.out.println("MessageServlet:用戶"+usr);
String str=request.getParameter("message");
Vector hsh=(Vector)context.getAttribute("messagelist");
if(str!=null){
hsh.add(usr+":"+str);
}
out.println("<form method='post' action='MessageServlet?uname="+usr+"'>");
System.out.println("MessageServlet2:用戶:"+usr);
out.println("<hr>");
out.println("輸入訊息:<input type='test' name='message'/>");
out.println("<input type='submit' value='https://bbs.csdn.net/topics/發送'/>");
out.println("</form>");
out.println("<iframe frameboder=0 height=546 marginheight=0 marginwidth=0"
+ "scrolling=auto src='https://bbs.csdn.net/topics/DisplayServlet' width='100% height='80%'");
out.println("</iframe>");
out.println("</body>");
out.println("</html>");
out.close();
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doGet(request, response);
}
}
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import java.util.logging.Logger;
import javax.enterprise.context.spi.Context;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 顯示用戶和聊天資訊
*/
public class DisplayServlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException{
response.setContentType("text/html;charset=GBK");
PrintWriter out=response.getWriter();
ServletContext context=getServletContext();
request.setCharacterEncoding("GBK");
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv='refresh' content='3' />");
out.println("<tilte>MessageServlet</title></head>");
out.println("<body>");
request.setCharacterEncoding("GBK");
out.println("內容");
//顯示聊天資訊
Vector hab=(Vector)context.getAttribute("messagelist");
out.println("<textarea name='info' rows='30'>");
for(int i=0;i<hab.size();i++){
out.println(hab.get(i));
}
out.println("</textarea>");
out.println("用戶串列");
out.println("<textarea name='user' rows='30'>");
//顯示用戶串列
Vector vc=(Vector)context.getAttribute("userlist");
for(int i=0;i<vc.size();i++){
if(vc.get(i)!=null)
out.println(vc.get(i));
}
out.println("</textarea>");
out.println("</body");
out.println("</html>");
out.close();
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doGet(request, response);
}
}
public class MainServlet extends HttpServlet {
private static String CONTENT_TYPE="text/html;charset=GBK";
//添加用戶請求分派
public void doGet(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException{
response.setContentType("text/html;charset=GBK");
// response.setContentType(CONTENT_TYPE);
PrintWriter out=response.getWriter();
request.setCharacterEncoding("GBK");
out.println("<html>");
out.println("<head><tilte>MainServlet</title></head>");
out.println("<body>");
out.println("<h3>進入聊天系統...</h3>");
ServletContext context=getServletContext();
Vector vc=(Vector)context.getAttribute("userlist");
String username=request.getParameter("uname");
System.out.println("MainServlet用戶名:"+username);
vc.add(username);
RequestDispatcher view=request.getRequestDispatcher("MessageServlet?uname="+username);
view.forward(request, response);
out.println("</body>");
out.println("</html>");
out.close();
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doGet(request, response);
}
}
package session_test;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
response.setContentType("text/html;charset=GBK");
PrintWriter out=response.getWriter();
out.println("<html>");
out.println("<head><title>UserServlet</title></head>");
out.println("<body");
out.println("<h3>我的聊天器,進入聊天室吧!</h3>");
ServletContext context=getServletContext();
//判斷用戶串列存在
if(context.getAttribute("userlist")==null){
Vector aduser=new Vector();
context.setAttribute("userlist", aduser);
//只有userlist為空時,它才設定了context,那么userlist發生變化時,怎么不見到它設定呢
}
//判斷資訊串列存在
if(context.getAttribute("messagelist")==null){
Vector message=new Vector();
context.setAttribute("messagelist", message);
}
//<%= request.getContextPath() %>
out.println("<form method='post' action='MainServlet'>");
out.println("昵稱:<input type='text' name='uname'/>");
out.println("<input type=submit value='https://bbs.csdn.net/topics/登陸'/>");
out.println("</form>");
out.print("</body>");
out.print("</html>");
out.close();
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doGet(request, response);
}
}
uj5u.com熱心網友回復:
全域搜索唄!??uj5u.com熱心網友回復:
message 是通過個人頁面的form 發送的
out.println("<form method='post' action='MessageServlet?uname="+usr+"'>");
System.out.println("MessageServlet2:用戶:"+usr);
out.println("<hr>");
out.println("輸入訊息:<input type='test' name='message'/>");
out.println("<input type='submit' value='https://bbs.csdn.net/topics/發送'/>");
out.println("</form>");
然后保存到 messagelist中
String str=request.getParameter("message");
Vector hsh=(Vector)context.getAttribute("messagelist");
if(str!=null){
hsh.add(usr+":"+str);
}
uname也是這樣
out.println("<form method='post' action='MainServlet'>");
out.println("昵稱:<input type='text' name='uname'/>");
out.println("<input type=submit value='https://bbs.csdn.net/topics/登陸'/>");
out.println("</form>");
然后下面將用戶加入userlist
ServletContext context=getServletContext();
Vector vc=(Vector)context.getAttribute("userlist");
String username=request.getParameter("uname");
System.out.println("MainServlet用戶名:"+username);
vc.add(username);
只有新對話和第一個用戶加入是才會新建userlist和messagelist
uj5u.com熱心網友回復:
qq_39936465
等級
勛章
Blank
Blank
參考 樓主 chenfeng3000 的回復:
前幾天在網上下載一個基于Servlet的建議聊天室程式 (java )看了一下源代碼,也試著運行了一下,但是怎么也找不到關于聊天訪問者串列 和訊息串列往ServletContext 變數setAttribute()的代碼,但是演示程序及后面的代碼卻訪問者串列 和訊息串列確實是從ServletContext .gettribute("messagelist") ServletContext .gettribute("userlist") 我就是搞不懂,程式代碼沒有往ServletContext 呼叫setAttribute()存盤資料,可是它又是怎么得到的userlist 和messagelist呢? 相關代碼如下 大家幫查查看
message 是通過個人頁面的form 發送的
out.println("<form method='post' action='MessageServlet?uname="+usr+"'>");
System.out.println("MessageServlet2:用戶:"+usr);
out.println("<hr>");
out.println("輸入訊息:<input type='test' name='message'/>");
out.println("<input type='submit' value='https://bbs.csdn.net/topics/發送'/>");
out.println("</form>");
然后保存到 messagelist中
String str=request.getParameter("message");
Vector hsh=(Vector)context.getAttribute("messagelist");
if(str!=null){
hsh.add(usr+":"+str);
}
//具體哪一句才是 保存到messagelist 陳述句啊
// Vector hsh=(Vector)context.getAttribute("messagelist"); 這句不是取出messagelist 么 不是setAttribute啊 不是設定啊 我不大懂 謝謝給予解釋
uj5u.com熱心網友回復:
樓主的意思是沒有setAttribute怎么就getAttribute到值了 是不是
uj5u.com熱心網友回復:
我好像弄懂了一點 ,之前是有setAttribute 在 UserServlet類中 實作了Vector hsh=(Vector)context.getAttribute("messagelist"); 這句話我理解的是取得了messagelist的object
因此當 hsh有了 add之后,hsh所指向的messagelist 也隨之變化,這樣理解對么
uj5u.com熱心網友回復:
messagelist沒有保存資訊,就是其他網頁發過來的資訊,作為本地保存。
用戶因為資訊已經寫在 url上了,可以直接獲取。
uj5u.com熱心網友回復:
不應該是本地保存的,我測驗過 A機器發了資訊 B機器通過訪問地址 能夠直接獲取到messagelsit 訊息串列 A機器發送過來的訊息uj5u.com熱心網友回復:
光看程式確實沒有保存messagelist資訊,難道他就這4端程式?看看web.xml的組態檔,配置了什么
uj5u.com熱心網友回復:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>j2ee_week06_01</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--UserServlet -->
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>session_test.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/UserServlet</url-pattern>
</servlet-mapping>
<!-- MainServlet -->
<servlet>
<servlet-name>MainServlet</servlet-name>
<servlet-class>session_test.MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/MainServlet</url-pattern>
</servlet-mapping>
<!-- MessageServlet -->
<servlet>
<servlet-name>MessageServlet</servlet-name>
<servlet-class>session_test.MessageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MessageServlet</servlet-name>
<url-pattern>/MessageServlet</url-pattern>
</servlet-mapping>
<!-- DisplayServlet -->
<servlet>
<servlet-name>DisplayServlet</servlet-name>
<servlet-class>session_test.DisplayServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayServlet</servlet-name>
<url-pattern>/DisplayServlet</url-pattern>
</servlet-mapping>
</web-app>
這是webxml 檔案 再沒有別的了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266134.html
標籤:Java EE
上一篇:CSS影片中的飛鳥設計
下一篇:Css3滑鼠懸停旋轉
