收藏 分销(赏)

JSP项目(新闻管理系统)开发实训报告.doc

上传人:a199****6536 文档编号:2820746 上传时间:2024-06-06 格式:DOC 页数:44 大小:3.91MB
下载 相关 举报
JSP项目(新闻管理系统)开发实训报告.doc_第1页
第1页 / 共44页
JSP项目(新闻管理系统)开发实训报告.doc_第2页
第2页 / 共44页
JSP项目(新闻管理系统)开发实训报告.doc_第3页
第3页 / 共44页
JSP项目(新闻管理系统)开发实训报告.doc_第4页
第4页 / 共44页
JSP项目(新闻管理系统)开发实训报告.doc_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、(word完整版)JSP项目(新闻管理系统)开发实训报告课 程 编 号: 学 号: 实 训 报 告教 学 院计算机学院课程名称JSP项目开发专业 班级姓 名指导教师2018年1月10日目录一。实训内容11. 系统功能介绍:11。1前言11。2功能介绍12数据库设计:22。1数据库技术22.2数据库详细设计23。 系统架构和文件作用介绍:43。1 系统的目录结构图43。2 jsp文件的作用53。2。1 JSP 组成概要53。2。2 JSP工作原理63。2。3 项目中的JSP73.3 系统所需的jar包74. 通用功能的实现:94.1 model模式介绍94。2 项目中的model104.3 项目

2、中的common105. 数据访问层功能的实现:135。1 工厂factory类代码135.2 DAO设计模式145.2。1 DAO介绍145.2。2 DAO类代码156。前台普通用户访问新闻网站功能的实现:206.1 前台中的Servlet类(Front)206。2 JSP页面核心代码257。 后台管理员管理新闻网站功能的实现:267。1 后前台中的Servlet类(Back)267.2 JSP页面核心代码288。在组中承担的工作及主要书写的Java类文件和JSP文件:308.1 Java类308。1。1。前台java代码308。1。2.后台java代码318.1 Jsp页面338。2。1。

3、前台jsp页面338.2。1。后台jsp页面35二。程序运行结果及结果分析371。 前台运行结果及结果分析:372. 后台运行结果及结果分析:401一。实训内容1. 系统功能介绍:1.1前言当今社会是一个信息化的社会,新闻作为信息的一部分有着信息量大,类别繁多,形式多样的特点,新闻发布系统的概念就此提出。简单的说,新闻发布系统就是充当一个网络新闻媒介的功能,主要实现对新闻的分类、上传、审核、发布,模拟了一般的新闻媒介的新闻发布过程.利用JSP技术开发的新闻发布系统,主要有五大功能模块:前台查看模块,登陆验证模块,管理员管理模块,新闻类型管理模块,新闻信息管理模块,实现了对网站新闻的动态管理.因

4、为可以用来动态发布新闻信息,所以对信息的管理更加及时、高效,提高了工作效率。1.2功能介绍本系统采用JSP +Servlet等相关技术来实现一个Web应用程序:新闻网站系统。其主要目的是为用户提供一个方便的、可快速浏览当前最新新闻的界面,并且也可以随时发布最新的信息以达到信息共享的目的。因此要为用户提供个方便易用的使用界面,同时也为具有更高权限的管理用户提供添加、修改和删除新闻等的系统维护功能。访问本系统的用户可分为两大类:普通用户和管理员用户。普通用户可以直接访问新闻发布系统的前台,通过点击每条新闻的标题来查看该条新闻的详细内容。查看各条新闻的评论.用户在登录之后可以发表自己的评论。用户还可

5、以在发布一个论坛,让广大网友发出自己的看法和声音.当用户作为管理员成功登陆后,可以对新闻系统进行管理,包括四大模块:1. 管理员信息管理:增加管理员、删除管理员、修改管理员信息;2. 新闻类型管理:增加新闻类型、查看新闻类型信息;3. 新闻管理:查看新闻、修改新闻、发布新闻、审核新闻,信息;4. 论坛管理:查看论坛、删除论坛。 2数据库设计:2.1数据库技术本系统使用MySQL作为开发中使用的数据库,它具有使用简单,稳定等特性。在与java程序连接时,为提到数据库操作的效率提高系统的性能。使用到Dbutils和DBCP等工具。在使用Dbutils 之前,我们Dao层使用的技术是JDBC,那么分

6、析一下JDBC的弊端。数据库链接对象、sql语句操作对象,封装结果集对象,这三大对象会重复定义封装数据的代码重复,而且操作复杂,代码量大。释放资源的代码重复 结果:(1)程序员在开发的时候,有大量的重复劳动.(2)开发的周期长,效率低数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正式针对这个问题提出来的。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。数据库连接池在初始化时将创建一定数量的数据库连接放到

7、连接池中, 这些数据库连接的数量是由最小数据库连接数来设定的.无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量.连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。相信使用这些数据库的技术之后,能很好保证新闻管理系统正常运行。2.2数据库详细设计在设计数据库时,需要分析清楚需要有几个数据表,最重要的是各个数据表之间的逻辑关系。使用一款数据库设计工具将会大大方便开发的时间和成本,powerdesigner.但是本次的课程设计是在老师教学的基础之上的二次开发,数据库的大体模式基本已经给

8、出,我们只需要在此基础上添加几个表(forum表、reply表等).数据库的设计一定要遵循数据库设计的一些原则,如各个完成性的要求,范式,冗余,备份等等方面。由于本次课题新闻管理系统在数据库这方面要求不是很高,故实现起来也不是很难。重点在与JSP的使用,Tomcat服务器上的程序编写。下面简要介绍数据库的逻辑关系、关键表等.图21 数据表信息表2-1 forum表列名数据类型长度说明idint11论坛类型标号,主键nameint11发表论坛时的名字usernamechar20新闻用户名emailchar20用户的电子邮件subjectchar100论坛主题contentmediumtext论坛

9、内容picturesvarchar20论坛中的照片timedatetime论坛发布时间isDelint2标题论坛的删除表22 reply表列名数据类型长度说明idint11论坛类型标号,主键discussIdint11回复论坛的标记namechar20新闻用户名contentmediumtext回复论坛的内容picturesvarchar20回复论坛中的照片timedatetime回复论坛的时间isDelint2标题回复的删除对数据库的数据表的操作通过DAO层进行,DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后就可在模块中

10、调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数进行配置.3. 系统架构和文件作用介绍:3。1 系统的目录结构图一个系统,在开发初期就必须有一个清晰的文件结构,进而在文件结构中分解出详细的目录结构图.在Java web项目开发中,有一个项目存放的规范,这样便于管理,同时也便于其他人的再次开发。1. 一个 web 应用程序是由一组 Servlet,HTML 页面,类,以及其它的资源组成的运行在 web 服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在;2。 组成 web 应用程序的这些文件要部署在相

11、应的目录层次中,根目录代表整个 web 应用程序的“根”;3. 通常将 web 应用程序的目录放在 webapps 目录下,在 webapps 目录下的每一个子目录都是一个独立的 web 应用程序,子目录的名字就是 web 应用程序的名字,也就是 web 应用程序的“根”。用户通过 web 应用程序的“根”来访问 web 应用程序中的资源.表3-1 srcmainwebapp目录目录存放内容css存放.css格式文件(可再分目录)skins存放皮肤文件(按主题划分的framework的位图)images存放图片,按产品、功能模块划分子目录jsJavaScript文件(对象、函数库)includ

12、e存放被包含的JS文件片段【注:JSP文件互相不要包含,通过模板/组件/标签库/BEAN实现重用】resources存放JSF组件、相关资源等templates模板文件存放地,按类别划分子目录pages网页目录(静态和动态网页,除index.jsp),按产品、功能模块划分子目录webapp下其他目录解释为模块名,认为其中全部为网页,可再分子目录META-INF存放清单文件、services等配置信息WEB-INF网站配置文件目录,存放WEB.XML等配置信息WEB-INF/classes未打包的项目编译代码,禁止手工修改。WEB-INF/conf存放struts,spring,hibernat

13、e,JSF等的配置文件WEBINF/lib存放第三方JAR包,使用MAVEN构建时此目录禁止手动放入文件!WEB-INF/pages高安全性的网页目录,如登录信息维护等WEBINF/tldJSP标签库定义文件存放目录在本系统中可能有部分文件没有涉及到,但是大部分的文件都是有的。js主要包括extends(引入第三方的js)、module(项目模块自己的js)、lib(引用包,这里也可以继续拆分),module中包含具体的模块中的js。common。js是核心命名空间的js.在开发中严格按一套标准,这样才会得到同行的认可。图3-1 web项目的java目录和WebRoot根目录3.2 jsp文件

14、的作用 3.2.1 JSP 组成概要一个JSP页面主要由注释(Comment)、指令(Directives)、脚本元素(Declaration,Scriptlet,Expression).动作元素(Action)的内容组成。1注释包括HTML注释和JSP隐藏注释。2指令包括: (1)page:用来定义整个JSP页面的属性和相关功能.(2)include:用来指定JSP文件被编译时需要插入的资源,可以是文本、代码、HTML文件或JSP文件。(3)taglib:页面使用者用来自定义标签。3脚本元素(1)声明:用来定义在程序中使用的实体,它是一段Java代码,可以声明变量,也可以声明方法.格式:%!

15、 开始声明 例如:%! int i;%.(2)表达式:格式:=表达式 最后是没有分号的.例如:=1+2+3.(3)Scriptlet:格式:java代码。4在JSP中的动作指令包括:Include、 Forward、 UseBean、 GetProperty、 SetProperty、 Plugin。(1)include指令:表示包含一个静态的或者动态的文件。子句能让你传递一个或多个参数给动态文件,也可在一个页面中使用多个指令来传递多个参数给动态文件.(2)forward指令:表示重定向一个静态html/jsp的文件,或者是一个程序段。(3)Plugin指令:用于在浏览器中播放或显示一个对象(

16、典型的就是Applet和Bean),而这种显示需要浏览器的Java插件。一般来说,元素会指定对象是Applet还是Bean,同样也会指定class的名字和位置,另外还会指定将从哪里下载这个Java插件。(4)useBean指令:表示用来在JSP页面中创建一个Bean实例并指定它的名字以及作用范围。(5)setProperty指令:用来为一个Bean的属性赋值。若在jsp:useBean后使用,jsp:setProperty将被执行。若jsp:setProperty出现在jsp:useBean标签内,jsp:setProperty只会在新的对象被实例化时才将被执行。注意name值应当和useBe

17、an中的id值相同。(6)getProperty指令:表示获取Bean的属性的值并将之转化为一个字符串,然后将其插入到输出的页面中。3。2.2 JSP工作原理当客户端请求浏览JSP页面时,JSP服务器在把页面传递给客户端之前,先将JSP页面编译成Servlet(纯Java代码),然后由Java编译器生成的服务器小程序编译为Java字节码,最后再转换成纯HTML代码,这样客户端接收到的只是HTML代码.JSP到Servlet的编译过程一般在第一次页面请求时进行.因此,如果希望第一个用户不会由于JSP页面编译成Servlet而等待太长的时间,希望确保Servlet已经正确地编译并装载,你可以在安装

18、JSP页面之后自己请求一下这个页面。3.2.3 项目中的JSP在Java Web项目中,书写jsp文件时,一定要注意命名规范,需要做到看jsp文件名就知道jsp文件是完成什么功能的。在新闻管理系统中最多涉及的是news这样一个前缀或者后缀,根据需要的功能书写jsp文件。 图3-2 项目Front和Back的JSP文件3。3 系统所需的jar包 commonsbeanutils.jar:提供对Java反射和自省API的包装,主要提供了对于JavaBean进行各种操作。 commonslang.jar:它扩展了标准java.langAPI,增加了字符串操作方法、基本数值方法、对象反射、创建和串行化

19、以及System属性。它还包含一个可继承的enum类型、对多种嵌套的Exception类型的支持、对java.util.Date的增强以及用于构建方法的实用程序,例如自动生成toString()的结果、自动实现hashCode()和equals()方法、数组操作、枚举、日期和时间的处理等等。ArrayUtils用于对数组的操作,如添加、查找、删除、子数组、倒序、元素类型转换等;BitField用于操作位元,提供了一些方便而安全的方法;BooleanUtils用于操作和转换boolean或者Boolean及相应的数组;CharEncoding包含了Java环境支持的字符编码,提供是否支持某种编码

20、的判断;CharRange用于设定字符范围并做相应检查;CharSet用于设定一组字符作为范围并做相应检查;CharSetUtils用于操作CharSet;CharUtils用于操作char值和Character对象;ClassUtils用于对Java类的操作,不使用反射;ObjectUtils用于操作Java对象,提供null安全的访问和其他一些功能;RandomStringUtils用于生成随机的字符串;SerializationUtils用于处理对象序列化,提供比一般Java序列化更高级的处理能力;StringEscapeUtils用于正确处理转义字符,产生正确的Java、JavaScr

21、ipt、HTML、XML和SQL代码;StringUtils处理String的核心类,提供了相当多的功能;SystemUtils在java。lang.System基础上提供更方便的访问,如用户路径、Java版本、时区、操作系统等判断;Validate提供验证的操作,有点类似assert断言;WordUtils用于处理单词大小写、换行等。commonscodec。jar:包含一些通用的编码解码算法。包括一些语音编码器,Hex,Base64,以及URLmonsdbutil。jar:对传统操作数据库的类进行二次封装,可以把结果集转化成List。(1) mons。dbutilsDbUtils :提供如

22、关闭连接、装载JDBC驱动程序等常规工作的工具类QueryRunner:该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。QueryLoader:属性文件加载器,主要用于加载属性文件中的SQL到内存中。(2)org.apache。commons。dbutils.handlersArrayHandler:将ResultSet中第一行的数据转化成对象数组ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object。BeanHandler:将ResultSet中第一行的数据转化成

23、类对象。BeanListHandler:将ResultSet中所有的数据转化成List,List中存放的是类对象。ColumnListHandler:将ResultSet中某一列的数据存成List,List中存放的是Object对象。KeyedHandler:将ResultSet中存成映射,key为某一列对应为Map.Map中存放的是数据。MapHandler:将ResultSet中第一行的数据存成Map映射。MapListHandler:将ResultSet中所有的数据存成List。List中存放的是Map。ScalarHandler:将ResultSet中一条记录的其中某一列的数据存成Ob

24、ject.图33 项目中使用到的jar包4。 通用功能的实现:4.1 model模式介绍 model模型是指模型表示业务规则.在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。4。2 项目中的model模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑。model包(NewsAdmin类、Newsclass类、Newsuser类、Note类、News类等)图41 每一个数据表对应的实体类4。3 项目中的common在整个项目中需要用到一些

25、公共的类,如数据库连接池、password加密的MD5、分页显示的Page类、BaseSerlvet(用于Front和Back的继承)、WebUtil的前台页面的操作等。图4-2 common包中的公共类其中详细说明WebUtil类的一些方法:package com。mon;import java。text.SimpleDateFormat;import java.util。Date;import java.util。regex。Matcher;import java.util.regex。Pattern;import javax.servlet。http。HttpServletRequest

26、;import mons.beanutils。BeanUtils;import com.gqz。news。model.Forum;import com.gqz。news。model.News;/* * ClassName: WebUtil Description: TODO(这里用一句话描述这个类的作用) author ganquanzhong date 201711-30 上午11:43:44 */返回的对象类型必须可以匹配所有的实体类(News、NewsAsmin、Newsclass)public class WebUtil /* * * Title: fillBean Descripti

27、on: TODO(这里用一句话描述这个方法的作用)* author ganquanzhong date 20171130 上午11:44:05 param param request 客户端的请求对象,封装了请求的参数名和参数值* param class1 需要设置属性值的对象* return 返回一个实体类的对象 /public static T T fillBean(HttpServletRequest request, ClassT class1)try T bean=class1.newInstance();/将一个MAP集合的数据拷贝到一个javabean对象中。BeanUtils。

28、populate(bean, request。getParameterMap();/使用 HttpServletRequest的getParameterMap()这个方法实现对请求参数的封装System.out。println(request.getParameterMap();return bean; /返回一个实体类 catch (Exception e) throw new RuntimeException(e);/* * Title: removeHtml Description: TODO(将news对象) author ganquanzhong* date 2017-12-13 上

29、午08:30:12* param news /public static void removeHtml(News news)/String content=news。getContent();String regex=”*”;Pattern pattern=Pattern。compile(regex,Pattern。MULTILINE | Pattern。UNICODE_CASE);Matcher matcher=pattern。matcher(content);/将content中的HTML标签换成空字符串content=matcher。replaceAll();int length=co

30、ntent.length();if(length150) length=150;String newContent=content。substring(0,length);news.setContent(newContent);public static void removeForumHtml(Forum forum)/String content=forum。getContent();String regex= getForum() ListForum list = new ArrayListForum();String sql = select from forum where isDe

31、l=0 ;/ 因为返回结果是List集合,所以使用BeanListHandler,而不是用BeanHandler(代表返回结果为单个对象)BeanListHandlerForum bh = new BeanListHandlerForum(Forum。class);try list = runner。query(sql, bh);System。out.println(数据查询成功,并且成功将论坛表数据以list集合的方式存入!!”); catch (SQLException e) / TODO Auto-generated catch blocke。printStackTrace();retu

32、rn list;/* Title: getForumById Description: TODO(通过制定的id获取论坛的详细信息)* author ganquanzhong* date 2018年1月2日 上午12:32:58* param ForumId return */public Forum getForumById(String forumId) Forum forum=new Forum();/ SQL语句:查询forum表中的论坛String sql = select * from forum where isDel=0 and id=? ;BeanHandlerForum b

33、h = new BeanHandlerForum(Forum。class);/用BeanHandler(代表返回结果为单个对象)try forum = runner.query(sql, bh,forumId);System。out。println(”数据查询成功,获取一条论坛的信息!!”); catch (SQLException e) / TODO Autogenerated catch blocke。printStackTrace();return forum;/* * Title: insert* Description: TODO(插入一条论坛)* author ganquanzho

34、ng* date 2018年1月2日 上午12:37:56* param forum return /public int insert(Forum forum)int result=0;String sql=insert into forum(name,username,email,subject,content,pictures,time,isDel) ” +” values(?,mike zhong,1367895458,?,?,?,now(),0)”;try /admin是一个NewsAdmin对象,保存查询结果result=runner.update(sql,forum。getName(),forum。ge

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服