基于JavaWeb的网络不良信息举报平台的设计与实现

news2024/10/6 14:26:06

1.引言

随着互联网的快速发展,网络不良信息问题日益突出,给人们的生活和社会秩序带来了严重的困扰。网络不良信息包括色情、暴力、赌博、诈骗等不良内容,这些信息的传播对青少年的身心健康产生不良影响,也破坏了社会的良好秩序和道德风尚。面对这一问题,建立一种高效、便捷的网络不良信息举报平台是迫在眉睫的。

本项目旨在基于JavaWeb技术搭建一款网络不良信息举报平台,以提供一个安全、快捷、匿名的举报途径,供广大网民举报违法、不良信息。通过该平台,用户可以提交不良信息的举报材料,包括文字、图片、音频与视频等,同时可以提供针对不良信息的详细描述和相关的线索。系统会自动对提交的信息进行初步筛查和分类,然后将信息传达给相关执法机构或监管部门进行处理。

总之,本项目旨在建立一款基于JavaWeb的网络不良信息举报平台,通过提供安全、快捷、匿名的举报途径,帮助用户及时发现和举报网络不良信息,净化网络空间,维护社会秩序。通过社交化的设计,鼓励用户之间互相传递信息,形成一个共同参与的社区,共同打造一个绿色、健康的网络环境。

2.开发技术

2.1 JSP简介

JSP技术所开发的web应用程序是基于Java的,它拥有Java跨平台的特性,以及业务代码分离,组建重用,基础Java servlet功能和预编译功能。它有以下特点:

JSP的工作原理是当用户浏览器从 WEB服务器上请求JSP 文件时,WEB 服务器响应该 HTTP请求,JSP引擎解释JSP 标识和小脚本,通过访问Java Bean 组件,使用JDBC 技术访问数据库生成所请求的内容并且将结果以Htm1或者XML页面的形式返回给浏览器。

Servlet 为 Web 开发员提供了一个简单、一致的机制,来扩展 web 服务器的功能,并且和已有的业务系统交互,可以把Servlet 看作在服务端运行的App let。Java Bean 是一种“类”,通过封装属性和方法成为具有某种功能或处理某个业务的对象。JavaBean被组织成为 Package以便进行管理,实际上就是把一组 Java Bean一起放在XX目录中每个类的定义前加上package XX,必须放在系统环境 CLASS PATH包含的目录下,系统能找到其中的 Java Bean。JSP技术是servlet 技术的扩展对HTML和XML的页面创作提供支持。网页设计员能够非常容易地将固定或静态的模板数据与动态内容进行组合。

2.2 B/S结构概述

B/S结构是Web兴起后的一种网络结构模式。是浏览器和服务器相互作用的一种体系结构,它的运行机理如下所述。首先浏览器通过域名和URL对浏览器发出请求,浏览器接受请求后,开始解析URL定位模块文件,根据URL中的参数和模块文件生成HTML文件,将生成的HTML文件发送给浏览器,浏览器接受响应HTML文档,解析整理相关资源文件,然后就会显示页面,一个完整的流程就是这样。B/S 建立在广域网之上的,一般只要有操作系统和浏览器就行, 面向是未知的用户群。对安全的控制能力相对弱但是它的访问速度是相对比较快的,需要不断优化,它的各个部件是独立的,各司其职,每一部分都能发挥重要的作用,更换个别构件都可以使系统得到无缝升级。  系统维护开销的成本降到最小,用户从网上自己下载安装就可以实现升级。 B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流, 并且大部分难度很低,减低开发成本。

2.3 Servlet简介

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。一个 Servlet 就是 Java 编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然 Servlet 可以对任何类型的请求产生响应,但通常只用来扩展 Web 服务器的应用程序。

2.4 MYSQL简介

数据库作为数据的存储地方是项目必须的,MySQL是一款非常优秀的关系型数据库,早期的mysql并不是甲骨文公司的,后来才被他收购的。Mysql非常的小巧,安装包才几兆,sql语言的书写也比较容易学习,最重要的是mysql同时也是一款开源的软件,所以不需要额外进行付费,本系统本身也是以学习总结所学知识为主,在系统的开发上最好尽量使用免费的软件,所以选用mysql进行数据库管理。Mysql的容量也是非常大的,同时支持分库分表的操作,支持分布式,所以越来越多的中小企业选择该款数据库管理工具。另外值得一提的是,开源也有一个不好的地方,就是容易遭到破解和黑客攻击,所以mysql在使用上还是主要集中在中小企业当中。

2.5 JavaScript

作为一种动态编译的脚本语言,JavaScript的优点是不必多说。随着Web开发的诞生,出现了各种各样的开发技术。为了能够在大环境中生存下来,JavaScript也开始适应非浏览器环境。像Java一样,JavaScript同样是可以面向对象的,这可以帮助学习过Java语言的学生学习JavaScript。此外,JavaScript可以与CSS结合产生许多有趣的页面效果,这也是JavaScript在大环境中仍然流行的主要原因。

2.6 Tomcat服务器

Tomcat可在开发工具(如IDEA、Eclipse)上进行简单配置即可使用。使用tomcat服务器主要还是由于首先他是一款开源的软件,不需要额外付费,在阿帕奇的官网就可以很方便的下载其源代码和文档,非常的方便。其次,tomcat非常的小,由于系统的开发和运行对电脑的配置要求较高,否则非常容易造成卡顿的现象,所以在第三方软件的选择上,尽量使用更加小巧的软件会更好的,所以说tomcat从这点看也是非常合适的。

2.7 Eclipse开发工具

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身来说,它只是一个框架和一组服务,用于通过插件组件构建开发环境,但Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。正因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于Eclipse中的大部分都是插件提供的,因为可给用户提供一致和统一的集成开发环境。选择他便携,方便可快速构建项目。

3.系统详细设计

违法不良信息举报平台根据业务内容分为管理员系统、用户登录系统。系统的模块设计是在需求规格说明和系统架构的基础上,通过精化架构、分析用例、设计模块来标识设计元素,发现设计元素的行为细节,精化设计元素的定义,以确保用例实现总是最新的。

3.1 用户模块设计

用户模块主要是用户注册;用户登录;违法信息上报填写;个人信息修改;密码修改;我的记录查看。下面对这些功能,挑选代表性功能进行详细叙述:

3.1.1用户登录

用户登录涉及的类与JSP文件,包括cuslogin.jsp(视图层)、LoginUserServlet(控制层)、UserService(业务逻辑层)、UserDao(数据访问层)和User(实体层),具体如图3-1所示。

图 3-1 用户登录业务图

(1)login.jsp

cuslogin.jsp的action(userlogin)负责处理用户的登录事件,调用LoginUserServlet类中的doPost()方法,并把用户的登录输入信息封装到实体User中,同时在doPost()方法中调用UserService类中的逻辑处理方法login(User user)。

(2)UserService类

UserService类中的login(User user)方法负责处判断用户名和密码是否正确的业务逻辑,调用UserDao类中的login(User user)方法。

(3)UserDao类

UserDao类中的login(User user)方法负责在mysql数据库中执行“select * from suser where cusname=? and password=?”语句,判断用户名和密码是否正确。

(4)User类

User类实现对数据库中的suser表的面向对象化处理,实现数据的封装。

3.1.2用户注册

用户注册涉及的类与JSP文件,包括cusregister.jsp(视图层)、RegisterUserServlet(控制层)、UserService(业务逻辑层)、UserDao(数据访问层)和User(实体层),具体如图3-2所示。

图 3-2 用户注册业务图

(1)cusregister.jsp

cusregister.jsp的action(userregister)负责处理用户的注册事件,调用RegisterUserServlet类中的doPost()方法,并把用户的注册输入信息封装到实体User中,同时在doPost()方法中调用UserService类中的逻辑处理方法insert(User user)。

(2)UserService类

UserService类中的insert(User user)方法负责处理用户注册的业务逻辑,调用UserDao类中的insert(User user)方法。

(3)UserDao类

UserDao类中的insert(User user)方法负责在mysql数据库中执行“INSERT INTO suser (cusName,realName,phone,email,idcard,sex,province,city,address,password,status) VALUES(?,?,?,?,?,?,?,?,?,?,?)”语句,对用户注册输入的信息进行存储。

(4)User类

User类实现对数据库中的suser表的面向对象化处理,实现数据的封装。

3.1.3违法信息上报模块

用户违法信息上报涉及的类与JSP文件,包括cusindex.jsp(视图层)、CusSubmitInfoServlet(控制层)、InfoService(业务逻辑层)、InfoDao(数据访问层)和Info(实体层),具体如图3-3所示。

图 3-3 用户违法信息上报业务图

(1)cusindex.jsp

cusindex.jsp的action(cussubmitsave)负责处理用户的违法信息上报保存事件,调用CusSubmitInfoServlet类中的doPost()方法,并把用户输入的违法犯罪信息封装到实体Info中,同时在doPost()方法中调用InfoService类中的逻辑处理方法insert(Info info)。

(2)InfoService类

InfoService类中的insert(Info info)方法负责处理用户填写的违法信息上报的业务逻辑,调用InfoDao类中的insert(Info info)方法。

(3)InfoDao类

InfoDao类中的insert(Info info)方法负责在mysql数据库中执行“INSERT INTO info (cusName,eventName,eventTime,eventPlace,eventType,pic,submitTime,flag,param1,param2,param3) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)”语句,对上报信息进行存储。

(4)Info类

Info类实现对数据库中的info表的面向对象化处理,实现数据的封装。

3.1.4用户个人信息修改模块

用户个人信息修改涉及的类与JSP文件,包括cusindex.jsp(视图层)、UserAddServlet(控制层)、UserService(业务逻辑层)、UserDao(数据访问层)和User(实体层),具体如图3-4所示。

图 3-4用户个人信息修改业务图

 (1)cusindex.jsp

cusindex.jsp的action(usersave)负责处理用户的个人信息修改事件,调用UserAddServlet类中的doPost()方法,并把用户修改后的个人信息封装到实体User中,同时在doPost()方法中调用UserService类中的逻辑处理方法update(User user)。

(2)UserService类

UserService类中的update(User user)方法负责处理用户个人信息修改的业务逻辑,调用UserDao类中的update(User user)方法。

(3)UserDao类

UserDao类中的insert(User user)方法负责在mysql数据库中执行“update suser set cusName=?,realName=?,phone=?,email=?,idcard=?,sex=?,province=?,city=?,address=?,password=?,status=? where id=?”语句,对用户修改输入的信息进行更新。

(4)User类

User类实现对数据库中的suser表的面向对象化处理,实现数据的封装。

3.1.5我的记录查看模块

我的记录查看涉及的类与JSP文件,包括cusindex.jsp(视图层)、CusSubmitInfoServlet(控制层)、InfoService(业务逻辑层)、InfoDao(数据访问层)和Info(实体层),具体如图3-5所示。

图 3-5 我的记录查看业务图

 (1)cusindex.jsp

cusindex.jsp的href(/waitinfolist?flag=0)负责处理用户的上报待审核记录的查看,调用InfoListWaitServlet类中的doPost()方法,并把携带到的违法犯罪信息状态的值封装到实体Info中,同时在doPost()方法中调用InfoService类中的逻辑处理方法selectAllInfos(Info info)。

(2)InfoService类

InfoService类中的selectAllInfos(Info info)方法负责处理用户查询个人上报记录的业务逻辑,调用InfoDao类中的selectAllInfos(Info info)方法。

(3)InfoDao类

InfoDao类中的selectAllInfos(Info info)方法负责在mysql数据库中执行“select * from info where 1=1 and cusname =? and flag=?”语句,对需要的记录进行查询封装。

(4)Info类

Info类实现对数据库中的info表的面向对象化处理,实现数据的封装。

3.2 管理员模块设计

管理员模块主要进行管理员登录;对管理员的管理,即查询、新增、修改和删除;对用户信息的管理,即删除,查询,修改用户信息功能和用户禁用管理;对类别的管理,即增加,删除,更改,查询功能;对举报信息审核的管理,即审核,查询功能;对举报信息处理的管理,即处理结果记录,查询功能;对举报信息导出的功能。

下面对这些功能,挑选代表性功能进行详细叙述:

3.2.1管理员登录功能

管理员登录涉及的类与JSP文件,包括login.jsp(视图层)、LoginServlet(控制层)、AdminService(业务逻辑层)、AdminDao(数据访问层)和Admin(实体层),具体如图3-6所示。

图 3-6 管理员登录业务图

 (1)login.jsp

login.jsp的action(login)负责处理管理员的登录事件,调用LoginServlet类中的doPost()方法,并把管理员的登录输入信息封装到实体Admin中,同时在doPost()方法中调用AdminService类中的逻辑处理方法login(Admin admin)。

(2)AdminService类

AdminService类中的login(Admin admin)方法负责处判断用户名和密码是否正确的业务逻辑,调用AdminDao类中的login(Admin admin)方法。

(3)AdminDao类

AdminDao类中的login(Admin admin)方法负责在mysql数据库中执行“select * from admin where username=? and password=?”语句,判断用户名和密码是否正确。

(4)Admin类

Admin 类实现对数据库中的admin表的面向对象化处理,实现数据的封装。

3.2.2新增管理员功能

新增管理员功能涉及的类与JSP文件,包括add.jsp(视图层)、AdminAddServlet(控制层)、AdminService(业务逻辑层)、AdminDao(数据访问层)和Admin(实体层),具体如图3-7所示。

 图 3-7 管理员新增业务图

(1)add.jsp

add.jsp的action(adminsave)负责处理新增管理员事件,调用AdminAddServlet类中的doPost()方法,并把管理员新增页面输入的信息封装到实体Admin中,同时在doPost()方法中调用AdminService类中的逻辑处理方法insert(Admin admin)。

(2)AdminService类

AdminService类中的insert(Admin admin)方法负责处理管理员新增的业务逻辑,调用AdminDao类中的insert(Admin admin)方法。

(3)AdminDao类

AdminDao类中的insert(Admin admin)方法负责在mysql数据库中执行“INSERT INTO admin(username,password,realname,sex,phone,idcard,province,city) VALUES(?,?,?,?,?,?,?,?)”语句,将新增管理员信息保存至数据库。

(4)Admin类

Admin 类实现对数据库中的admin表的面向对象化处理,实现数据的封装。

3.2.3查询管理员信息功能

查询管理员信息功能涉及的类与JSP文件,包括list.jsp(视图层)、AdminListServlet(控制层)、AdminService(业务逻辑层)、AdminDao(数据访问层)和Admin(实体层),具体如图3-8所示。

 图 3-8 查询管理员业务图

(1)list.jsp

list.jsp的action(adminlist)负责处理管理员的查询事件,调用AdminListServlet类中的doPost()方法,并把查询条件信息封装到实体Admin中,同时在doPost()方法中调用AdminService类中的逻辑处理方法selectAllAdmin(Admin admin)。

(2)AdminService类

AdminService类中的selectAllAdmin(Admin admin)方法负责处理查询管理员的业务逻辑,调用AdminDao类中的selectAllAdmin(Admin admin)方法。

(3)AdminDao类

AdminDao类中的selectAllAdmin(Admin admin)方法负责在mysql数据库中执行“select * from admin where 1=1”语句,查询管理员信息列表。

(4)Admin类

Admin 类实现对数据库中的admin表的面向对象化处理,实现数据的封装。

3.2.4删除管理员功能

删除管理员信息功能涉及的类与JSP文件,包括list.jsp(视图层)、AdminDeleteServlet(控制层)、AdminService(业务逻辑层)、AdminDao(数据访问层)和Admin(实体层),具体如图3-9所示。

图 3-9删除管理员业务图 

(1)list.jsp

list.jsp的a标签(admindelete)负责处理管理员的删除事件,调用AdminDeleteServlet类中的doPost()方法,并把删除条件信息封装到实体Admin中,同时在doPost()方法中调用AdminService类中的逻辑处理方法delete(Admin admin)。

(2)AdminService类

AdminService类中的delete(Admin admin)方法负责处理删除管理员的业务逻辑,调用AdminDao类中的delete(Admin admin)方法。

(3)AdminDao类

AdminDao类中的delete(Admin admin)方法负责在mysql数据库中执行“delete from admin where id=?”语句,删除管理员信息。

(4)Admin类

Admin 类实现对数据库中的admin表的面向对象化处理,实现数据的封装。

3.2.5修改管理员信息功能

修改管理员信息功能涉及的类与JSP文件,包括add.jsp(视图层)、AdminAddServlet(控制层)、AdminService(业务逻辑层)、AdminDao(数据访问层)和Admin(实体层),具体如图3-10所示。

 图 3-10 修改管理员业务图

(1)add.jsp

add.jsp的action(adminsave)负责处理管理员的修改事件,调用AdminAddServlet类中的doPost()方法,并把修改的管理员信息封装到实体Admin中,同时在doPost()方法中调用AdminService类中的逻辑处理方法update(Admin admin)。

(2)AdminService类

AdminService类中的update(Admin admin)方法负责处理修改管理员的业务逻辑,调用AdminDao类中的update(Admin admin)方法。

(3)AdminDao类

AdminDao类中的update(Admin admin)方法负责在mysql数据库中执行“UPDATE admin SET username=?,password=?,realname=?,sex=?,phone=?,idcard=?,province=?,city=? WHERE id=?”语句,修改管理员信息。

(4)Admin类

Admin 类实现对数据库中的admin表的面向对象化处理,实现数据的封装。

3.2.6举报信息审核通过功能

举报信息审核通过功能涉及的类与JSP文件,包括list.jsp(视图层)、InfoPassServlet(控制层)、InfoService(业务逻辑层)、InfoDao(数据访问层)和Info(实体层),具体如图3-11所示。

图 3-11 举报信息审核通过业务图

 (1)list.jsp

list.jsp的a标签(infopass)负责处理举报信息审核通过的事件,调用InfoPassServlet类中的doPost()方法,并把审核通过的信息封装到实体Info中,同时在doPost()方法中调用InfoService类中的逻辑处理方法update(Info info)。

(2)InfoService类

InfoService类中的update(Info info)方法负责处理审核通过的的业务逻辑,调用InfoDao类中的update(Info info)方法。

(3)InfoDao类

InfoDao类中的update(Info info)方法负责在mysql数据库中执行“update info set cusName=?,eventName=?,eventTime=?,eventPlace=?,eventType=?,pic=?,submitTime=?,flag=?,param1=?,param2=?,param3=? where id=?”语句,修改上报信息状态。

(4)Info类

Info类实现对数据库中的info表的面向对象化处理,实现数据的封装。

3.2.7 举报信息审核失败功能

举报信息审核失败功能涉及的类与JSP文件,包括check.jsp(视图层)、RecordSaveServlet(控制层)、InfoService(业务逻辑层)、InfoDao(数据访问层)和Info(实体层),具体如图3-12所示。

图 3-12 举报信息审核失败业务图

(1)check.jsp

check.jsp的action(recordsave)负责处理举报信息审核失败的事件,调用RecordSaveServlet类中的doPost()方法,并把审核失败的信息封装到实体Info中,同时在doPost()方法中调用InfoService类中的逻辑处理方法update(Info info)。

(2)InfoService类

InfoService类中的update(Info info)方法负责处理审核失败的的业务逻辑,调用InfoDao类中的update(Info info)方法。

(3)InfoDao类

InfoDao类中的update(Info info)方法负责在mysql数据库中执行“update info set cusName=?,eventName=?,eventTime=?,eventPlace=?,eventType=?,pic=?,submitTime=?,flag=?,param1=?,param2=?,param3=? where id=?”语句,修改上报信息状态。

(4)Info类

Info类实现对数据库中的info表的面向对象化处理,实现数据的封装。

3.2.8举报信息导出功能

举报信息导出功能涉及的类与JSP文件,包括list.jsp(视图层)、DataExportServlet(控制层)、InfoService(业务逻辑层)、InfoDao(数据访问层)和Info(实体层),具体如图3-13所示。

 图 3-13 举报信息导出功能业务图

(1)list.jsp

list.jsp的action(exportdata)负责处理举报信息导出的事件,调用DataExportServlet类中的doPost()方法,同时在doPost()方法中调用InfoService类中的逻辑处理方法selectAllInfos(Info info)。

(2)InfoService类

InfoService类中的selectAllInfos(Info info)方法负责处理举报信息导出的的业务逻辑,调用InfoDao类中的selectAllInfos(Info info)方法。

(3)InfoDao类

InfoDao类中的selectAllInfos(Info info)方法负责在mysql数据库中执行“select * from info ”语句,查询需要导出的所有数据。

(4)Info类

Info类实现对数据库中的info表的面向对象化处理,实现数据的封装。

4.数据库设计

4.1 逻辑设计

数据库逻辑设计分为三个阶段,分别是:用户要求、建立E-R 模型和数据库模式设计。

数据库逻辑设计中的第一阶段收集和分析用户需求是按以下四步进行的:分析用户活动,确定系统范围,分析用户活动所涉及的数据和分析系统数据。逻辑设计第二阶段建立E-R 模型分两步,首先应进行局部E-R 模型设计,然后进行总体E-R 模型的设计。逻辑设计第三阶段在数据库模式设计阶段分两步进行,第一步初步设计,把E-R 图转换为关系模型,第二步优化设计,对模式进行调整和改善。

我们所要进行研究的是逻辑设计的第三步即将E-R图像关系模型转化。下面把实体及实体间关系转换成为关系模型。实体转换出的关系模式:

用户信息表{用户ID,密码,性别,邮箱,密保问题,密保答案,备注}。

管理员信息表{管理员ID,密码}。

帖子信息表{帖子ID,内容,发表时间,内容,用户ID,新闻ID}。

新闻信息表{新闻ID,新闻标题,新闻内容,更新时间,专区ID}。

专区信息表{专区ID,专区名称,专区编号}。

4.2 物理设计

数据库物理设计包括:选择存储结构、确定存取方法、选择存取路径、确定数据的存放位置。

主要解决选择文件存储结构和确定文件存取方法的问题。在数据库中访问数据的路径主要表现为如何建立索引。如要直接定位到所要查找的记录,应采用索引方法存取方法(索引表)。顺序表只能从起点进去向后一个个访问记录。在上面的实体以及实体之间关系模式的基础上,形成数据库中表以及各表之间关系。

用户信息表如表4-1所示。

表4-1 用户信息表

字段名

说   明

类  型

长  度

可否为空

主键

id

表id

Int

20

cusName

用户名

varchar

30

realName

真实姓名

varchar

50

phone

手机号

varchar

11

email

邮箱

varchar

30

idcard

身份证号

varchar

18

sex

性别

varchar

10

province

varchar

30

city

varchar

30

address

详细地址

varchar

255

password

密码

varchar

50

status

状态

Int

10

帖子信息表如表4-2所示。

表4-2 帖子信息表

字段名

说   明

类  型

长  度

可否为空

主键

id

帖子ID

Int

20

cusName

用户登录名称

varchar

30

eventName

时间名称

varchar

255

eventTime

发生时间

varchar

30

eventPlace

发生平台

varchar

100

eventType

事件类别

varchar

30

pic

截图

varchar

255

submitTime

发生时间

varchar

30

flag

审核状态

Int

20

类型表如表4-3所示。

表4-3 类型表

字段名

说   明

类  型

长  度

可否为空

主键

id

类型ID

Int

50

typecode

类别编号

varchar2

20

typename

类别名称

varchar2

50

管理员信息表如表4-4所示。

表4-4 管理员信息表

字段名

说   明

类  型

长  度

可否为空

主键

admname

管理员ID

varchar2

20

password

管理员密码

varchar2

20

处理结果表如表4-5所示。

表4-5 处理结果表

字段名

说   明

类  型

长  度

可否为空

主键

id

表id

Int

20

infoId

信息id

Int

20

result

结果

varchar

255

returnPerson

反馈人

varchar

30

returnTime

反馈时间

varchar

30

帖子驳回记录表如表4-6所示。

表4-6 帖子驳回记录表

字段名

说   明

类  型

长  度

可否为空

主键

id

表id

Int

20

infoId

信息id

Int

20

checkname

驳回人

varchar

40

checktime

驳回时间

varchar

30

noReson

驳回原因

varchar

255

5.实现效果图

(1)用户端登录

(2)用户端信息填报页面

 (3) 用户端个人中心

 (4)后台管理端登录

(5)后台管理端登录主页面

(6)管理员管理

(7)用户管理

(8) 类别管理

(9)信息举报处理

 (10)举报信息审核

 (11)举报信息导出

 6.参考代码

@WebServlet("/adminsave")
public class AdminAddServlet 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");
        resp.setCharacterEncoding("UTF-8");

        //获取页面信息
        String id=req.getParameter("id");
        String username=req.getParameter("username");
        String realname=req.getParameter("realname");
        String sex=req.getParameter("sex");
        String phone=req.getParameter("phone");
        String idcard=req.getParameter("idcard");
        String province=req.getParameter("province");
        String city=req.getParameter("city");
        String password=req.getParameter("password");
        Admin admin=new Admin();

        admin.setUsername(username);
        admin.setRealname(realname);
        admin.setSex(sex);
        admin.setPhone(phone);
        admin.setIdcard(idcard);
        admin.setProvince(province);
        admin.setCity(city);
        admin.setPassword(password);
        AdminService adminService=new AdminServiceImpl();
        PrintWriter out = resp.getWriter();
        if(id==null||id==""){
            //增
            admin.setPassword("123456");
            int flag=adminService.insert(admin);
            if(flag==1){
                out.print("新增成功");
            }else{
                out.print("新增失败");
            }
            out.flush();
        }else {
            admin.setId(Integer.valueOf(id));
            //改
            int flag=adminService.update(admin);
            if(flag==1){
                out.print("修改成功");
            }else{
                out.print("修改失败");
            }
            out.flush();
        }

    }
}
@WebServlet("/admindelete")
public class AdminDeleteServlet 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");
        resp.setCharacterEncoding("UTF-8");
        String id=req.getParameter("id");
        AdminService adminService = new AdminServiceImpl();
        Admin admin=new Admin();
        admin.setId(Integer.valueOf(id));
        Integer flag=adminService.delete(admin);
        PrintWriter out = resp.getWriter();
        out.print("删除成功");
        req.getRequestDispatcher("/adminlist").forward(req,resp);
    }
}
@WebServlet("/adminedit")
public class AdminEditServlet 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");
        resp.setCharacterEncoding("UTF-8");
        String id=req.getParameter("id");
        AdminService adminService = new AdminServiceImpl();
        Admin admin=new Admin();
        admin.setId(Integer.valueOf(id));
        try {
            admin=adminService.selectOneById(admin);
            req.setAttribute("admin",admin);
            req.getRequestDispatcher("/files/admin/add.jsp").forward(req,resp);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
@WebServlet("/adminlist")
public class AdminListServlet 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");
        resp.setContentType("UTF-8");
        AdminService adminService = new AdminServiceImpl();
        Page page=new Page();
        //获取当前页面
        String currno = req.getParameter("currPageNo");

        //获取条件
        String username = req.getParameter("username");

        Admin admin=new Admin();
        admin.setUsername(username);
        if(currno==null){
            currno="1";
        }else{
            page.setCurrPageNo(Integer.valueOf(currno));
        }

        List<Admin> adminlist = new ArrayList<>();
        try {
            List countList = adminService.selectAllAdmin(null);
            page.setTotalCount(countList.size());
            adminlist=adminService.selectAdminsByPage(admin,Integer.valueOf(currno),page.getPageSize());
            page.setList(adminlist);
            req.setAttribute("page",page);
            req.setAttribute("username",username);
            req.getRequestDispatcher("/files/admin/list.jsp").forward(req,resp);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
@WebServlet("/infoedit")
public class InfoEditServlet 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");
        resp.setCharacterEncoding("UTF-8");
        String id=req.getParameter("id");
        AdminService adminService = new AdminServiceImpl();
        Admin admin=new Admin();
        admin.setId(Integer.valueOf(id));
        try {
            admin=adminService.selectOneById(admin);
            req.setAttribute("admin",admin);
            req.getRequestDispatcher("/files/admin/info.jsp").forward(req,resp);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
@WebServlet("/infolist")
public class InfoListServlet 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");
        resp.setContentType("UTF-8");
        InfoService infoService=new InfoServiceImpl();
        Page page=new Page();
        //获取当前页面
        String currno = req.getParameter("currPageNo");

        //获取条件
        String eventName = req.getParameter("eventName");
        //获取状态
        String flag = req.getParameter("flag");

        Info info=new Info();
        info.setFlag(Integer.valueOf(flag));
        info.setEventName(eventName);
        if(currno==null){
            currno="1";
        }else{
            page.setCurrPageNo(Integer.valueOf(currno));
        }

        List<Info> infolist = new ArrayList<>();
        try {
            List countList = infoService.selectAllInfos(info);
            page.setTotalCount(countList.size());
            infolist=infoService.selectInfosByPage(info,Integer.valueOf(currno),page.getPageSize());
            page.setList(infolist);
            req.setAttribute("page",page);
            req.setAttribute("eventName",eventName);
            req.setAttribute("flag",flag);
            req.getRequestDispatcher("/files/info/list.jsp").forward(req,resp);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
@WebServlet("/resultedit")
public class RecordEditServlet 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");
        resp.setCharacterEncoding("UTF-8");
        String id=req.getParameter("id");
        ResultService resultService = new ResultServiceImpl();
        Result result=new Result();
        result.setId(Integer.valueOf(id));
        req.setAttribute("id",id);
        req.getRequestDispatcher("/files/result/add.jsp").forward(req,resp);
    }
}
@WebServlet("/recordsave")
public class RecordSaveServlet 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");
        resp.setCharacterEncoding("UTF-8");

        //获取页面信息
        String id=req.getParameter("infoId");
        String noReson=req.getParameter("noReson");

        Record record=new Record();

        record.setInfoId(Integer.valueOf(id));
        record.setNoReson(noReson);
        Date nowdate=new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        record.setChecktime(sdf.format(nowdate));
        HttpSession session=req.getSession();
        Admin admin=(Admin)session.getAttribute("user");
        record.setCheckname(admin.getUsername());

        RecordService recordService=new RecordServiceImpl();
        PrintWriter out = resp.getWriter();
        //增
        int flag=recordService.insert(record);
        //修改信息表状态
        Info info=new Info();
        info.setId(Integer.valueOf(id));
        InfoService infoService=new InfoServiceImpl();
        try {
            info=infoService.selectInfoById(info);
            info.setFlag(-1);
            infoService.update(info);

            //获取当前用户虚构提交的次数
            Integer zs=infoService.countCusWg(info.getCusName());
            UserService userService=new UserServiceImpl();
            User user=new User();

            if(zs>=2){
                user=userService.selectUserByName(info.getCusName());
                user.setStatus(2);
                //封号
                userService.update(user);
            }
            if(flag==1){
                out.print("驳回成功");
            }else{
                out.print("驳回失败");
            }
            out.flush();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
@WebServlet("/inforecord")
public class InfoRecordServlet 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");
        resp.setCharacterEncoding("UTF-8");
        String id=req.getParameter("infoId");
        RecordService recordService=new RecordServiceImpl();
        Record record=new Record();
        record.setInfoId(Integer.valueOf(id));
        List<Record> recordList=new ArrayList<>();
        try {
            recordList=recordService.selectRecords(record);
            if(recordList.size()!=0){
                record = recordList.get(0);
            }
            req.setAttribute("record",record);
            req.getRequestDispatcher("/files/info/inforecord.jsp").forward(req,resp);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
@WebServlet("/resultsave")
public class ResultAddServlet 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");
        resp.setCharacterEncoding("UTF-8");

        //获取页面信息
        String id=req.getParameter("infoId");
        String result1=req.getParameter("result");

        Result result=new Result();

        result.setInfoId(Integer.valueOf(id));
        result.setResult(result1);
        Date nowdate=new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        result.setReturnTime(sdf.format(nowdate));
        HttpSession session=req.getSession();
        Admin admin=(Admin)session.getAttribute("user");
        result.setReturnPerson(admin.getUsername());

        ResultService resultService=new ResultServiceImpl();
        PrintWriter out = resp.getWriter();
        //增
        int flag=resultService.insert(result);
        //修改信息表状态
        Info info=new Info();
        info.setId(Integer.valueOf(id));
        InfoService infoService=new InfoServiceImpl();
        try {
            info=infoService.selectInfoById(info);
            info.setFlag(2);
            infoService.update(info);
            if(flag==1){
                out.print("新增成功");
            }else{
                out.print("新增失败");
            }
            out.flush();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
@WebServlet("/resultinfo")
public class ResultInfoServlet 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");
        resp.setCharacterEncoding("UTF-8");
        String id=req.getParameter("infoId");

        ResultService resultService=new ResultServiceImpl();
        Result result=new Result();
        result.setInfoId(Integer.valueOf(id));
        List<Result> results=new ArrayList<>();
        try {
            results=resultService.selectResults(result);
            if(results.size()!=0){
                result = results.get(0);
            }
            req.setAttribute("result",result);
            req.getRequestDispatcher("/files/result/inforesult.jsp").forward(req,resp);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
@WebServlet("/resultinfolist")
public class ResultListServlet 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");
        resp.setContentType("UTF-8");
        InfoService infoService=new InfoServiceImpl();
        Page page=new Page();
        //获取当前页面
        String currno = req.getParameter("currPageNo");

        //获取条件
        String eventName = req.getParameter("eventName");
        //获取状态
        String flag = req.getParameter("flag");

        Info info=new Info();
        info.setFlag(Integer.valueOf(flag));
        info.setEventName(eventName);
        if(currno==null){
            currno="1";
        }else{
            page.setCurrPageNo(Integer.valueOf(currno));
        }

        List<Info> infolist = new ArrayList<>();
        try {
            List countList = infoService.selectAllInfos(info);
            page.setTotalCount(countList.size());
            infolist=infoService.selectInfosByPage(info,Integer.valueOf(currno),page.getPageSize());
            page.setList(infolist);
            req.setAttribute("page",page);
            req.setAttribute("eventName",eventName);
            req.setAttribute("flag",flag);
            req.getRequestDispatcher("/files/result/list.jsp").forward(req,resp);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

7.总结

在开发基于JavaWeb的网络不良信息举报平台的过程中,我们充分利用了JavaWeb技术的特点和优势,成功搭建了一个功能完善、安全可靠的平台。以下是我们在开发过程中的一些总结和收获:

(1)技术选型合理:JavaWeb技术提供了丰富的工具和框架,使得我们能够快速开发出一个功能完善的平台。我们选择了适合该项目的JavaWeb开发技术-JDBC、Servlet,这些技术能够提高开发效率,并且具备良好的扩展性和可维护性。

(2)用户体验考虑到位:在平台的设计中,我们注重用户体验,力求提供简洁、直观的操作界面,以便用户能够快速上手并完成举报操作。同时,也考虑到用户隐私和安全,提供了举报的功能,保护用户的个人信息和安全。

(3)安全性措施健全:由于涉及到用户上传的举报材料,我们在开发过程中特别注重平台的安全性。针对用户上传的文件,我们进行了严格的审核,确保安全性。

总之,通过基于JavaWeb的开发,我们成功搭建了一款网络不良信息举报平台,实现了安全、快捷、匿名举报的功能,并加入了社交化设计来促进用户参与和信息交流。在开发过程中,我们充分利用JavaWeb技术的优势,兼顾了平台的功能性、安全性和用户体验,为用户提供了一个高效、便捷的举报途径,帮助净化网络空间并维护社会秩序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 7 月 4 日,PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部

在 7 月 4 日&#xff0c;PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部 DEX PancakeSwap&#xff08;POSE/ZBC 交易对&#xff09;&#xff0c;在 $POSE 开盘交易的 10 分钟内&#xff0c;其最高涨幅达到了 2169.22%&#xff0c;所有的早期投资者基本都从中获得了不菲的…

request请求获取参数的实现方法(post和get两种方式)

request请求获取参数的实现方法(post和get两种方式) Servlet代码&#xff1a; package request请求获取Post或者get参数; import java.io.IOException; import java.util.Arrays; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; impo…

Halcon印字缺陷检测

印字缺陷检测 在半导体行业&#xff0c;印字缺陷检测占了很大比例。打印标签上字符的缺失、字符的脏污等印字不良都需要检出。基于匹配和印字区域作差的检测算法思路如下&#xff1a; #mermaid-svg-bmN5WE1wE1PqpI51 {font-family:"trebuchet ms",verdana,arial,san…

论文笔记:Traffic Flow Prediction via Spatial Temporal Graph Neural Network

WWW 2020 1 模型 图神经网络图注意力——空间依赖关系 RNNTransformer——短期&长期依赖关系 缺点&#xff1a;运用RNN于较长序列仍然会带来误差积累&#xff0c;并且RNN模型的运算效率并不高 2 实验

IDEA全版本MyBatisCodeHelper Pro免费使用教程(全部版本适用)

版本说明 系统&#xff1a;macOS&#xff08;Windows同理&#xff09;IDE&#xff1a;IntelliJ IDEA 2023.1.3 &#xff08;哪个版本都可以&#xff09;MyBatisCodeHelper Pro 3.2.1&#xff08;哪个版本都可以&#xff09; 环境准备 从插件市场下载MyBatisCodeHelper Pro 领…

FPGA实验四:交通灯控制器设计

目录 一、实验目的 二、设计要求 三、实验代码 1.design source文件代码 2.仿真文件代码 3.代码原理分析 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 3、下载测试结果及分析 五、实验心得 1.解决实验中遇见的问题及解决 2.实验完成的心得 一、实验目的 &a…

如何将TXT转换为PDF格式?两种简便方法分享!

在日常办公和学习中&#xff0c;我们常常遇到需要将文本文件转换为PDF格式的需求。TXT是一种常见的文本文件格式&#xff0c;而PDF则是一种更为通用和便捷的文档格式。本文将为大家介绍两种简单易行的方法&#xff0c;帮助您将TXT文件快速转换为PDF格式。 方法一&#xff1a;记…

无锡阿里云代理商:阿里云将免费提供50款云产品 让更多企业获益

【亿邦原创】在2023年4月11日举办的阿里云峰会上&#xff0c;阿里云智能CTO周靖人介绍&#xff0c;为了让更多中小企业获得云计算红利&#xff0c;阿里云推出新款通用算力型ECS云服务器Universal实例&#xff08;简称U实例&#xff09;。 U实例整合了多种云服务器规格&#xff…

Jmeter做单接口测试-超详细步骤讲解

测试项目&#xff1a;本章节将以此测试项目为大家讲解怎么使用jmeter做一个接口测试 CSDN - 专业开发者社区CSDN是全球知名中文IT技术交流平台,创建于1999年,包含原创博客、精品问答、职业培训、技术论坛、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区.h…

如何一键将大批量的护照图片转为excle表格?

当我们手头上有很多的护照需要识别成excel怎么办&#xff1f;手工录入效率低&#xff0c;而且容易出错&#xff0c;有没有软件可以帮忙完成这项工作&#xff1f;答案是肯定的&#xff0c;用金鸣表格文字识别大师就能将大批量的护照上的数据合并转到一个excel表上&#xff0c;下…

Python——— 元组

&#xff08;一&#xff09;初识元组tuple Python 的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。元组使用小括号&#xff0c;列表使用方括号。列表属于可变序列&#xff0c;可以任意修改列表中的元素。元组属于不可变序列&#xff0c;不能修改元组中的元素。…

你的隐私被泄漏了吗

近日&#xff0c;某高校毕业生在校期间窃取学校内网数据&#xff0c;收集全校学生个人隐私信息的新闻引发了人们对互联网生活中个人信息安全问题的再度关注。在大数据时代&#xff0c;算法分发带来了隐私侵犯&#xff0c;在享受消费生活等便捷权利的同时&#xff0c;似乎又有不…

【Web3】认识元宇宙

元宇宙在Web3中扮演着重要的角色&#xff0c;可以带来许多创新和变革。Web3是下一代互联网的概念&#xff0c;强调去中心化、区块链技术和加密货币的应用。 元宇宙在Web3中的几个作用&#xff1a; 去中心化的虚拟世界&#xff1a;元宇宙通过使用区块链技术和去中心化的网络结构…

基于单片机的智能窗帘智能晾衣架系统的设计与实现

功能介绍 以STM32单片机单片机作为主控系统&#xff1b;OLED液晶显示当前环境温湿度&#xff0c;光照强度&#xff0c;时间&#xff0c;开关状态等信息&#xff1b;雨滴传感器检测当前环境是否下雨&#xff0c;天气下雨检测&#xff0c;天气潮湿时自动收衣服&#xff1b;可以通…

简要介绍 | 大规模三维场景理解:从点云到智能导航

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对大规模三维场景理解进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 大规模三维场景理解&#xff1a;从点云到智能导航 InteriorNet: Mega-scale Multi-sensor Photo-realistic Indoor Scenes …

【软考程序员学习笔记】——软件工程

目录 &#x1f34a;一、软件存周期 &#x1f34a;二、软件生存周期模型 &#x1f34a;三、软件开发方法 &#x1f34a;四、需求分析 &#x1f34a;五、内聚和耦合 &#x1f349;模块内的独立性--内聚性 &#x1f349;模块间的独立性--耦合性 &#x1f34a;六、软件测试 …

提交软著的源码格式是怎么样的?软著源码规范器V1.0直接一键生成规范的源码文档

小陶在自己成功申请了软著之后&#xff0c;算是了解一下流程。最主要的就是两个文件&#xff0c;分别是软件说明书和软件源码。软件说明书倒是没啥&#xff0c;可以自己写&#xff0c;跟一个报告差不多吧。软著源码则有很多细节问题。于是我就又写了一个软著源码规范器&#xf…

Windows 11 安装Git

Windows 11 安装Git步骤 前言第一步&#xff1a;从官网下载最新的Git第二步&#xff1a;运行安装程序第三步&#xff1a;选择安装位置第四步&#xff1a;安装配置界面第五步&#xff1a;选择Git默认编辑器窗口第六步&#xff1a;调整新存储库中初始分支的名称第七步&#xff1a…

微信小程序个人中心展示样式(2)

这是之前的详细的看这里 因为这是好多年前写的了&#xff0c;好多人私信我代码有问题。正好今天有时间简单的还原下代码 话不多说先看图(图片样式自己搞奥~~~~我也好久没弄了这就是个参考demo) 以下是一个使用微信小程序开发的个人中心展示详情的示例&#xff1a; 在微信开发…

并发可见性、有序性、原子性与JMM内存模型深入解析

并发三大特性 原子性 一个或多个操作&#xff0c;要么全部执行且在执行过程中不被任何因素打断&#xff0c;要么全部不执行。在 Java 中&#xff0c;对基本数据类型的变量的读取和赋值操作是原子性操作&#xff08;64位处理器&#xff09;。不采取任何的原子性保障措施的自增…