servlet实现简单的聊天室

来源:互联网 发布:win8开始菜单软件 编辑:程序博客网 时间:2024/05/18 01:35

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");        out.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>

第六步:在浏览器中浏览http://127.0.0.1:7001/j2ee_week06_01/UserServlet

0 0