servlet简单的聊天室
环境:win10,myeclipse2014
项目结构:
实验步骤:
第一步:UserServlet 生成用户界面接受用户输入昵称
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);
}
//判断信息列表存在
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='登陆'/>");
out.println("</form>");
out.print("</body>");
out.print("</html>");
out.close();
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doGet(request, response);
}
}
第二步:MainServlet读出 Servlet上下文中保存的用户列表向量,如果向量为 null,则新建一个向量,并在用户列表向量中添加用
package session_test;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import javax.servlet.RequestDispatcher;
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 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);
}
}
第三步:MessageServlet显示了一个文本框和一个命令按钮,以输入要通过聊天应用程序发送的消息
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='发送'/>");
out.println("</form>");
out.println("<iframe frameboder=0 height=546 marginheight=0 marginwidth=0"
+ "scrolling=auto src='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);
}
}
第四步:DisplayServlet 显示所有的聊天消息
,UserList显示所有的聊天用户
package session_test;
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");
o
ut.println("</html>");
out.close();
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doGet(request, response);
}
}
第五步:在web.xml中注册这些类
<?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>
<uepattern>/DisplayServlet</url-patterrvlet-mapping>
</web-app>