Chinaunix首页 | 论坛 | 博客
  • 博客访问: 334876
  • 博文数量: 329
  • 博客积分: 2633
  • 博客等级: 少校
  • 技术积分: 3633
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-22 15:43
文章分类

全部博文(329)

文章存档

2013年(244)

2012年(46)

2011年(39)

我的朋友

分类: 系统运维

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. sendRedirectgetRequestDispatcher区别

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

使用标签可以使得JSP页面自动的从一个当前页面跳转到其他页面(JSP||HTML),而不用用户发出点击事件即可完成这种自动的跳转,并且可以通过标签对跳转到的页面进行用户参数传递。

 

6. response.sendRedirectforward区别

response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化。

  用则不同,它是直接在server做的,浏览器并不知道,也不和浏览器打交道,这从浏览器的地址并不变化可以看出。

7.jsp页面EL表达式

1).首先在web.xml文件中加入: version="2.5" xmlns="" xmlns:xsi="" xsi:schemaLocation=" /web-app_2_5.xsd">

2).之后,如果需要有效的话,需要在jsp页面中写入以下句子:<%@ page isELIgnored ="false" %>

这样的话里面的字段${message}才能显示正常。

messageServletContext中的一个变量

 

8.ajax部分

见实际代码main.jspAjaxRequest.js

 

  聊天室程序+ajax+jsp+tomcat+eclipse.rar    聊天室程序(servlet+jsp+ajax+tomcat+eclipse+jstl).doc   

阅读(10189) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

yhzwy72283332012-03-14 21:51:19

帮你消灭0回复

原来你在做java啊