欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

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

发布时间:2025/3/21 windows 97 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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


项目文件结构:


文件结构解释:

1.index.jsp登陆界面

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

3.send.jsp发送消息界面

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


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

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

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

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

二.init创建List

web.xml配置如下:

<servlet><servlet-name>init</servlet-name><servlet-class>com.tz.util.InitServlet</servlet-class><load-on-startup>0</load-on-startup>  <span style="white-space:pre"> </span><!-- load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。 --><span style="white-space:pre"> </span><!-- 当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet --><span style="white-space:pre"> </span><!-- 详细的可以去看这个网址:http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html --> </servlet>

InitServlet.jsp

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

项目中的存储:

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

三.登录界面

表单代码如下

<form action="login" method="post" ><input type="text" name = "username"><input type="submit" value="登陆"></form>

web.xml配置文件

<servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.tz.util.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login</url-pattern></servlet-mapping>

LoginServlet.jsp

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

四.jframe部分


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"> // jsp设置href <title>QQ聊天窗口</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"></head><frameset cols="*,200" border="1"><frameset rows="*,100" border="1"><frame src="showMsg"/><!-- 需要动态创建 --><frame src="send.jsp" scrolling="no" noresize="noresize"/></frameset><frame src="online" /><!-- 动态创建 --></frameset></html>

预览效果:


五.send部分

web.xml

<servlet><servlet-name>SendServlet</servlet-name><servlet-class>com.tz.util.SendServlet</servlet-class><init-param><!-- 脏话屏蔽的配置文件部分,web配置文件的使用 之一--><param-name>keyword</param-name> <param-value>fuck,shit,cao</param-value></init-param></servlet><servlet-mapping><servlet-name>SendServlet</servlet-name><url-pattern>/send</url-pattern></servlet-mapping>

send.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head></head><body><form action="send" method="post"><input type="text" name="msg"><select name="face"><option value="1">smile</option><option value="2">cry</option><option value="3">flower</option></select><input type="submit" value="send"><!-- 这里是从iframe退出到index.jsp的方法,不然只会在iframe的send部分的页面,跳转到index.jsp -->    <a href="index.jsp" target="asd">exit</a><!-- target="asd"(随便取非保留字)或者"_parent" iframe跳转到index.html --></form></body> </html>

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("<img src ='images/");str.append(face);str.append(".gif");str.append("'>");// System.out.println(str); // 将聊天记录存储在上下文中ServletContext application = this.getServletContext();//获取上下文,追加聊天记录@SuppressWarnings("unchecked")List<String> msgList = (List<String>) application.getAttribute("msglist");//向msList中添加strmsgList.add(str.toString());// resp.getWriter().println(<>);//重定向resp.sendRedirect("send.jsp"); // 转发和重定向的区别 // 1.转发可以携带数据,重定向不行 // 2.重定向时,客服端发送了两个请求,而转发只发送了一个请求(本质区别) // 3.重定向时,客服端浏览器的地址栏有变化,而转发没有 // 4.重定向发生在客服端!转发发生在服务端,客服端是不知道} }

五.ShowMsg

ShowMsg的web.xml配置

<servlet><servlet-name>ShowMsg</servlet-name><servlet-class>com.tz.util.ShowMsg</servlet-class></servlet><servlet-mapping><servlet-name>ShowMsg</servlet-name><url-pattern>/showMsg</url-pattern></servlet-mapping>
 

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<String> msgList = (List<String>) application.getAttribute("msglist");@SuppressWarnings("unchecked")List<String> msgList = (List<String>) application.getAttribute("msglist"); // 设置页面编码resp.setCharacterEncoding("utf-8");PrintWriter out = resp.getWriter();out.println("<html>");out.println("<head>");out.println("<meta http-equiv='refresh' content='1'/>");out.println("</head>");out.println("<body>"); // out.println("</head>");for (String str : msgList) {out.println(str);out.println("<br/>");}out.println("</body>");out.println("</html>");} }

六.OnlineServlet

OnlineServlet的web.xml

<servlet><servlet-name>OnlineServlet</servlet-name><servlet-class>com.tz.util.OnlineServlet</servlet-class></servlet><servlet-mapping><servlet-name>OnlineServlet</servlet-name><url-pattern>/online</url-pattern></servlet-mapping>

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<String> userList = (List<String>) application.getAttribute("userlist");resp.setCharacterEncoding("utf-8");PrintWriter out = resp.getWriter();out.println("<html>");out.println("<head>");out.println("<meta http-equiv='refresh' content='1'/>");out.println("</head>");out.println("<body>"); // out.println("</head>");out.println("<ul>");for (String str : userList) {out.println("<li>");out.println(str);out.println("</li>");}out.println("</ul>");out.println("</body>");out.println("</html>");} }

七.补充.

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

总结

以上是生活随笔为你收集整理的java_OA管理系统(一):Servlet总结案例仿网络聊天室的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。