分类: 系统运维
2012-03-03 22:29:16
聊天室程序(servlet+jsp+ajax+tomcat+eclipse+jstl)
1.过滤器配置
例如:
1).Web.xml中写入:
<filter>
<filter-name>CharacterEncodingFilterfilter-name> <filter-class>com.wgh.filter.CharacterEncodingFilterfilter-class>
<init-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
init-param>
filter>
<filter-mapping>
<filter-name>CharacterEncodingFilterfilter-name>
<url-pattern>/*url-pattern>
<dispatcher>REQUESTdispatcher>
<dispatcher>FORWARDdispatcher>
filter-mapping>
2).代码配置中:
package com.wgh.filter;
import java.io.IOException;
import javax.servlet.*;
public class CharacterEncodingFilter implements Filter{
protected String encoding = null;
protected FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (encoding != null) {
request.setCharacterEncoding(encoding);
response.setContentType("text/html; charset="+encoding);
}
chain.doFilter(request, response);
}
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
}
3).使用时如果没有以上配置,下面的输出发言人form会是乱码。
// 发送聊天信息
public void sendMessages(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("发送消息");
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
String from = request.getParameter("from"); // 发言人
System.out.println(from);
}
2.监听器配置
public class UserListener implements javax.servlet.http.HttpSessionBindingListener {
private String user;
private UserInfo container = UserInfo.getInstance(); // 获得UserInfo类的对象
public UserListener() {
user = "";
}
// 设置在线监听人员
public void setUser(String user) {
this.user = user;
}
// 获取在线监听
public String getUser() {
return this.user;
}
// 当Session有对象加入时执行的方法
public void valueBound(HttpSessionBindingEvent arg0) {
System.out.println("上线用户:" + this.user);
}
// 当Session有对象移除时执行的方法
public void valueUnbound(HttpSessionBindingEvent arg0) {
System.out.println("下线用户:" + this.user);
if (user != "") {
container.removeUser(user);
}
}
}
3.有人员登录
给对应的人员申请监听,加入用户,并加入session。
// 保存用户信息
if (flag) {
UserListener ul = new UserListener(); // 创建UserListener的对象
ul.setUser(username); // 添加用户
user.addUser(ul.getUser()); // 添加用户到UserInfo类的对象中
session.setAttribute("user", ul);//将UserListener对象绑定到Session中
session.setAttribute("username", username); // 保存当前登录的用户名
session.setAttribute("loginTime", new Date().toLocaleString());// 保存登录时间
ServletContext application = getServletContext();
String sourceMessage = "";
if (null != application.getAttribute("message")) {
sourceMessage = application.getAttribute("message").toString();
}
sourceMessage += "系统公告:" + username
+ "走进了聊天室!
";
application.setAttribute("message", sourceMessage);
try { request.getRequestDispatcher("login_ok.jsp").forward(request,response);
} catch (Exception ex) { Logger.getLogger(Messages.class.getName()).log(Level.SEVERE, null, ex);
}
}
4. sendRedirect和getRequestDispatcher区别
1).request.getRequestDispatcher()是请求转发,前后页面共享一个request ,返回的是一个RequestDispatcher对象。
response.sendRedirect()是重新定向,前后页面不是一个request。
2).RequestDispatcher.forward()是在服务器端运行,对于浏览器来说是“透明的。
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成,对于浏览器来说不是透明的。
例如:request.getRequestDispatcher("login_ok.jsp").forward(request, response);
将请求转发到login_ok.jsp这个页面 ,再request就是客户端的请求,通过response可以往客户端写响应
5.login_ok.jsp
使用
6. response.sendRedirect和forward区别
response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化。
用
7.jsp页面EL表达式
1).首先在web.xml文件中加入:
2).之后,如果需要有效的话,需要在jsp页面中写入以下句子:<%@ page isELIgnored ="false" %>
这样的话里面的字段${message}才能显示正常。
message是ServletContext中的一个变量
8.ajax部分
见实际代码main.jsp和AjaxRequest.js
聊天室程序+ajax+jsp+tomcat+eclipse.rar 聊天室程序(servlet+jsp+ajax+tomcat+eclipse+jstl).doc