长轮询 comit ajax
socket
公共聊天室
- 登录界面:昵称 登录(做昵称的去重,不用密码)regist.jsp
将请求发送给servlet - servlet:判断用户名是否重复 jsp作展示
当用户名不合法时可以用request来返回错误信息,作用域要尽量小
存取用户名的集合要存在application中,(servletContext),需要判断是否是第一次登录
MVC中的C:获取请求 完成请求业务逻辑 响应 - 聊天室界面分为三部分:聊天信息 在线人名 发送消息文本框 分为三个页面 frameset标签
- servlet 用于发送消息的后台处理
登录首页
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>signin</title>
</head>
<body>
<form action="login" method="post">
昵称:<input type="text" name="userName"/><br>
<%=request.getAttribute("errorInfo")%>
<input type="submit" value="login"/>
</form>
</body>
</html>
聊天界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>聊天界面</title>
</head>
<frameset rows = "80%,20%">
<frameset cols="75%,25%">
<frame src="massage.jsp"></frame>
<frame src="users.jsp"></frame>
</frameset>
<frame src="send.jsp"></frame>
</frameset>
</html>
消息区域
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta http-equiv="Refresh" content="1" />
</head>
<body>
<%
Object obj = application.getAttribute("msgs");
if (obj != null) {
List<String> list = (List<String>) obj;
for (String s : list) {
out.println(s + "</br>");
}
}
%>
</body>
</html>
发送消息区域
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="chat" method="post">
<input type="text" name="msg"/>
<input type="submit" value="send"/>
</form>
</body>
</html>
显示用户区域
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta http-equiv="Refresh" content="1" />
</head>
<body>
<%
Object obj = application.getAttribute("names");
Object myObj = session.getAttribute("my");
if(obj!=null){
List<String> list = (List<String>)obj;
for(String name:list){
if(name.equals(myObj)){
out.println("<font color='red'>"+name+":我的名字</font></br>");
}else{
out.println("<font color='blue'>"+name+":其他人</font></br>");
}
}
}
%>
</body>
</html>
登录处理servlet
package com.chat.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取请求
String name = request.getParameter("userName");
if(name!=null&&!name.equals("")) {
Object object = this.getServletContext().getAttribute("names");
System.out.println("123");
//判断是否names为空
if(object!=null) {//不是第一个登录的人
System.out.println("不是第一次登录");
List<String> list = (List<String>) object;
if(list.contains(name)) {
request.setAttribute("errorInfo", "昵称已被使用!");
request.getRequestDispatcher("index.jsp").forward(request, response);
}else {
//名称可用
list.add(name);
//存入已登录的人名
this.getServletContext().setAttribute("names", list);
response.sendRedirect("main.jsp");
}
}else {
System.out.println("第一次登录");
//第一个登录的人
List<String> list = new CopyOnWriteArrayList<String>();
list.add(name);
this.getServletContext().setAttribute("names", list);
response.sendRedirect("main.jsp");
}
//存入自己信息
request.getSession().setAttribute("my", name);
}else {
//当用户名为空时
request.setAttribute("errorInfo", "请填写昵称再登录!");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
}
发送消息处理servlet
package com.chat.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ChatServlet
*/
@WebServlet("/chat")
public class ChatServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ChatServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String msg = request.getParameter("msg");
if (msg != null && !msg.equals("")) {
Object myself = request.getSession().getAttribute("my");
//先取出来
Object obj = this.getServletContext().getAttribute("msgs");
List<String> list = null;
if (obj == null) {
list = new ArrayList<String>();
}else {
list = (List<String>) obj;
}
list.add(myself + "说:" + msg);
this.getServletContext().setAttribute("msgs", list);
response.sendRedirect("send.jsp");
}
}
}
字符过滤器
package com.chat.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
* Servlet Filter implementation class CharacterFilter
*/
@WebFilter("/*")
public class CharacterFilter implements Filter {
/**
* Default constructor.
*/
public CharacterFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("text/html;charset=utf-8");
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}