1.掌握创建Servlet会话方法
熟悉掌握Servlet会话跟踪技术
理解 Servlet 通信方法
掌握创建Servlet程序以访问上下文状态方法
了解开发Servlet程序以修改上下文状态步骤
2.要求使用Servlet编写聊天程序完成如下功能:
用户输入一个昵称后,可以参加聊天,该昵称用于聊天应用程序的用户名
用户通过在一个文本框中输入发送的消息后点击命令按钮参与聊天
用户应看见所有参与聊天的人和他们的全部聊天记录。没有其他的权限控制
用户应能够使用中文聊天
UserServlet 生成用户界面接受用户输入昵称
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package sise.com.cn;
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;
/**
*
* @author Liugx
*/
public class UserServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet UserServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet UserServlet at " + request.getContextPath() + "</h1>");
out.println("<h3>我的聊天器,进入聊天系统....");
out.println("<br><br>");
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);
}
out.println("<form method='post' action='/ServletSessionApp/MainServlet'>");
out.println("昵称<input type='text' name='uname'/>");
out.println("<input type=submit value='登陆'/>");
out.println("</form>");
out.println("");
out.println("</body>");
out.println("</html>");
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
2.MainServlet读出 Servlet上下文中保存的用户列表向量,如果向量为 null,则新建一个向量,并在用户列表向量中添加用户
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package sise.com.cn;
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;
/**
*
* @author Liugx
*/
public class MainServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet MainServlet</title>");
out.println("</head>");
out.println("<body>");
//out.println("<h1>Servlet MainServlet at " + request.getContextPath() + "</h1>");
out.println("<h3>进入聊天系统。。。");
ServletContext context = getServletContext();
Vector vc = (Vector)context.getAttribute("userlist");
String username = request.getParameter("uname");
vc.add(username);
RequestDispatcher view = request.getRequestDispatcher("/MessageServlet?uname="+username);
view.forward(request, response);
out.println("</body>");
out.println("</html>");
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
3.MessageServlet显示了一个文本框和一个命令按钮,以输入要通过聊天应用程序发送的消息
使用request.setCharacterEncoding(“GBK”)处理中文
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package sise.com.cn;
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;
/**
*
* @author Liugx
*/
public class MessageServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet MessageServlet</title>");
out.println("</head>");
out.println("<body>");
// out.println("<h1>Servlet MessageServlet at " + request.getContextPath() + "</h1>");
ServletContext context = getServletContext();
//获取表单信息
String usr = request.getParameter("uname");
String str = request.getParameter("message");
Vector hsh = (Vector)context.getAttribute("messagelist");
if(str != null){
hsh.add(usr + ":" +str);
}
out.println("<iframe frameborder=0 height=400 marginheight=0 marginwidth=0"+
"scrolling=auto src='/ServletSessionApp/DisplayServlet' width='100%' height='80%'>");
out.println("</iframe>");
out.println("<form method='post' action='/ServletSessionApp/MessageServlet?uname="+usr+"'>");
out.println("<hr>");
out.println("输入信息:<input type='text' name='message' />");
out.println("<input type=submit value='发送' />");
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
4.DisplayServlet 显示所有的聊天消息
UserList显示所有的聊天用户
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package sise.com.cn;
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;
/**
*
* @author Liugx
*/
public class DisplayServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
ServletContext context = getServletContext();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv='refresh' content='3' />");
out.println("<title>Servlet DisplayServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet DisplayServlet at " + request.getContextPath() + "</h1>");
out.println("内容");
//显示聊天信息
Vector hab = (Vector)context.getAttribute("messagelist");
out.println("<textarea name='info' rows='9'>");
for(int i=0;i<hab.size();i++){
out.println(hab.get(i));
}
out.println("</textarea>");
//显示用户列表
out.println("用户列表");
out.println("<textarea name='user' rows='9'>");
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();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}