java_OA管理系统(一):Servlet总结案例仿网络聊天室

因为我们学校的软件联盟要为我们校区开发一个OA系统,为此我将其所需要的一些技术进行汇总,以便web组组员开发所用.

第一篇是关于Servlet的一个汇总案例,算是开个简单的小头.

一.总述

代码来源于,我在某著名网校(tzedu)学习时,老师讲的汇总案例--仿网络聊天室,

实现功能

1.登录
2.发送聊天信息与QQ表情
3.脏话屏蔽

知识要点:

1.jsp工程文件目录
2.servlet执行
3.web.xml文件基本配置
4.jsp动态创建网页
5.jsp拼接路径
6,请求,表单的乱码处理
7.seesion
8,application


项目文件结构:

java_OA管理系统(一):Servlet总结案例仿网络聊天室_第1张图片

文件结构解释:

1.index.jsp登陆界面

2.jframe.jsp网络聊天室,的框架页面

3.send.jsp发送消息界面

4.ShowMsg.java,创建消息展示界面


5.OnlineServlet.jsp:创建登陆者页面

6.InitServlet.jsp.服务器启动时执行,内存中创建list(本案例中用来存储登陆人信息与聊天记录)(0)

7.SendServlet(发送请求),LoginServlet(登录)

8.images文件夹:存储表情图片.

二.init创建List

web.xml配置如下:

  
  	init
  	com.tz.util.InitServlet
  	0
  	
  	
  	
  

InitServlet.jsp

/**
 * 初始化servlet
 * 设置一个appliction属性
 * 会随着Tomcat启动而加载,无需访问,但是需要配置才行
 *
 */
@SuppressWarnings("serial")
public class InitServlet extends HttpServlet{
	
	public void init() throws ServletException {
		//获得上下文
		ServletContext application = this.getServletContext();
		//第一次访问的时候就创建一个 list存入上下文,用于获取存储用户的多条聊天记录
		List list = new ArrayList();
		application.setAttribute("msglist", list);
		//用于获取用户信息
		List userList = new ArrayList();
		application.setAttribute("userlist", userList);
		
		
	}
}

项目中的存储:

1.各页面及各jsp,xml文件以及QQ表情(images)文件夹
2.内存中的:两个list, msglist and userlist------>存储在application:在一个应用服务器范围内有效
3.等等

三.登录界面

表单代码如下

     

web.xml配置文件

  
    LoginServlet
    com.tz.util.LoginServlet
  
  
    LoginServlet
    /login
  

LoginServlet.jsp

/**
 * 初始化servlet
 * 设置一个appliction属性
 * 会随着Tomcat启动而加载,无需访问,但是需要配置才行
 *
 */
@SuppressWarnings("serial")
public class InitServlet extends HttpServlet{
	
	public void init() throws ServletException {
		//获得上下文
		ServletContext application = this.getServletContext();
		//第一次访问的时候就创建一个 list存入上下文,用于获取存储用户的多条聊天记录
		List list = new ArrayList();
		application.setAttribute("msglist", list);
		//用于获取用户信息
		List userList = new ArrayList();
		application.setAttribute("userlist", userList);
		//对于上下文不熟悉的,请自行百度ServletContext;

		
	}
}

四.jframe部分


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
//	jsp设置href 
   
    QQ聊天窗口
	
	
	    
	
	

  
  
  
  	
  		
  		
  		
  	

  	
	 
  
  
  

预览效果:

java_OA管理系统(一):Servlet总结案例仿网络聊天室_第2张图片

五.send部分

web.xml

  
  	SendServlet
  	com.tz.util.SendServlet
  	
  	
  	
  		keyword	
  		fuck,shit,cao
  	
  	
  
  
  	SendServlet
  	/send
  


send.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


  

  
  
  
    
                 exit


SendServlet.jsp

/**
 * 用于处理发送的消息
 * @author Administrator
 */
@SuppressWarnings("serial")
public class SendServlet extends HttpServlet{
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//设置编码格式,不然会乱码.
		req.setCharacterEncoding("utf-8");
		//获取文本消息
		String msg = req.getParameter("msg");
		//获取图片消息
		String face = req.getParameter("face");
		
		ServletConfig config = this.getServletConfig();
		//读取配置文件
		String value = config.getInitParameter("keyword");
		//拆分
		String[] values = value.split(",");
		//替换过程--->脏话屏蔽
		for (String str : values) {
			if(msg.contains(str)){
				msg = msg.replaceAll(str, "****");
			}
		}
		
		//path的拼接
		String username = (String) req.getSession().getAttribute("name");
		
		//StringBuffer、StringBuilder都可以,我们这里需要的是一个可变的string而已.
		StringBuilder str = new StringBuilder(username);
		str.append(":");
		str.append(msg);
		str.append("");
		
//		System.out.println(str);
//		将聊天记录存储在上下文中
		ServletContext application = this.getServletContext();
		
		//获取上下文,追加聊天记录
		@SuppressWarnings("unchecked")
		List msgList = (List) application.getAttribute("msglist");
		
		//向msList中添加str
		msgList.add(str.toString());
		
//		resp.getWriter().println(<>);
		//重定向
		resp.sendRedirect("send.jsp");
//		转发和重定向的区别
//		1.转发可以携带数据,重定向不行
//		2.重定向时,客服端发送了两个请求,而转发只发送了一个请求(本质区别)
//		3.重定向时,客服端浏览器的地址栏有变化,而转发没有
//  	4.重定向发生在客服端!转发发生在服务端,客服端是不知道
	}
}


五.ShowMsg

ShowMsg的web.xml配置

  
  	ShowMsg
  	com.tz.util.ShowMsg
  
  
  	ShowMsg
  	/showMsg
  

 

ShowMsg.jsp

/**
 * 用来显示聊天记录
 */
public class ShowMsg extends HttpServlet{
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}
	
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//获取上下文
		ServletContext application = this.getServletContext();
//		List msgList = (List) application.getAttribute("msglist");
		@SuppressWarnings("unchecked")
		List msgList = (List) application.getAttribute("msglist");
//		设置页面编码
		resp.setCharacterEncoding("utf-8");
		PrintWriter out = resp.getWriter();
		out.println("");
		out.println("");
		out.println("");
		out.println("");
		out.println("");
//		out.println("");
		for (String str : msgList) {
			out.println(str);
			out.println("
"); } out.println(""); out.println(""); } }

六.OnlineServlet

OnlineServlet的web.xml

  
  	OnlineServlet
  	com.tz.util.OnlineServlet
  
  
  	OnlineServlet
  	/online
  


OnlineServlet.jsp

public class OnlineServlet extends HttpServlet{
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}
	
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		ServletContext application = this.getServletContext();
		List userList = (List) application.getAttribute("userlist");
		
		resp.setCharacterEncoding("utf-8");
		PrintWriter out = resp.getWriter();
		out.println("");
		out.println("");
		out.println("");
		out.println("");
		out.println("");
//		out.println("");
		out.println("
    "); for (String str : userList) { out.println("
  • "); out.println(str); out.println("
  • "); } out.println("
"); out.println(""); out.println(""); } }


七.补充.

1.为了简化步骤,本项目中的doget方法都直接写成了dopost,
2.对jsp中的响应,请求不了解的,本文不再多描述,可以浏览我的其他博客,或者自行百度

八.参考文章:

1. 探秘Java中的String,StringBuffer与StringBuilder
2. 详解JAVA中的注释
3. web.xml中load-on-startup的作用
4. JSP中文乱码问题(get,post篇)
5. ServletContext作用功能详解
6. JSP生命周期
7. JSP seesion

转载于:https://www.cnblogs.com/fonttian/p/7294867.html

你可能感兴趣的:(java_OA管理系统(一):Servlet总结案例仿网络聊天室)