J2EE课程设计报告-课程资源管理系统.doc_第1页
J2EE课程设计报告-课程资源管理系统.doc_第2页
J2EE课程设计报告-课程资源管理系统.doc_第3页
J2EE课程设计报告-课程资源管理系统.doc_第4页
J2EE课程设计报告-课程资源管理系统.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

J2EE课程设计报告项目名称:课程资源管理系统学院专业:计算机科学与工程学院软件工程小组成员: 指导老师: 起止时间:2015年09月01日2015年10月15日南京理工大学1. 引言1.1 背景现状目前,在教学管理方面,缺少课程资源管理,包括课件管理以及作业统计管理,影响了教学质量。1.2 目的及简单介绍建立一个比较完善的课程资源管理系统。其中,管理员方面,具有添加修改教师和学生信息的功能,以及发布公告内容,对自身信息的修改。教师方面,具有添加修改删除课程,布置作业,上传相应课程资料,统计学生相应作业提交情况以及下载作业,发布公告,对自身信息的修改等等。学生方面,具有查看所有课程,以及可以选择课程,选择完成的课程将会在每个学生自己的课程体现,每个学生能够根据自己的课程查看作业,下载课件以及提交作业等等,学生亦可修改自身信息。1.3 范围针对学校教学管理平台开发的一款多功能实用项目。1.4 开发工具操作系统:Windows7 x64 专业版开发软件:MyEclipse8.5数据库:MySQL可视化数据库软件:NaviCat开发框架:Struts2 + Spring + Hibernate +Ajax(SSH2+Ajax)服务器:tomact6.01.5 使用说明将csm.sql导入数据库,可在工程目录/src/beans.xml中修改C3P0数据源里的name和password。然后用MyEclipse导入工程即可。2. 需求分析2.1 系统需求2.1.1 系统概述传统的提交作业的方式一般手动提交或者通过email方式提交,导致时序慢;老师发布各种通告,布置作业,有同学可能会忘记或者根本不知道;大学生能聚在一起讨论问题的时间并不多。为了解决以上几个问题,准备开发本系统,本系统实现课程资源和信息的整合和发布,课程作业管理,学生在线讨论,教师网上答疑等主要功能。教师通过本系统发布课件资源及信息通告,学生通过该系统轻松顺利的完成学业,方便师生间的沟通。2.1.2 功能需求 用户管理实现学生、教师等人员信息管理;实现教师、学生、课程、课件关系维护;教师与课程多对多关系、学生可以上多门课程,教师每门课程只能有1个课件,1个课件可以有多个章节;控制学生只能访问他参加的课程课件。 教学资源和教学产物管理课件管理:实现课件上传、下载、搜索等,课件只能由教师上传或删除;作业管理:实现多次作业的提交、下载、交作业情况、作业成绩管理、统计分析,成绩只能由教师评定,其他同学的作业提交情况只能由教师可见; 教学信息发布发布作业信息以及一些其他公告。2.1.3. 性能需求本系统经过仔细的分析后所设计的界面简洁清晰,尽可能考虑人们使用时的一些习惯,使得操作简单,每一个操作后都会对用户有所响应,数据读取灵活可靠,功能规范齐全,使用容易。2.1.4. 安全需求本系统是为方便管理员对教学资源进行管理,基于B/S,不同用户的操作权限也不一样,安全性高。2.2 系统总体设计2.2.1系统模块结构设计登陆模块(1) 教师登陆模块(2) 学生登陆模块(3) 系统管理员模块教师模块(1) 个人信息模块(2) 课程管理模块(包括课件管理)(3) 作业管理模块(4) 公告管理模块学生模块(1) 个人信息模块(2) 课程模块模块(包括课件管理)(3) 作业提交与查看模块(4) 公告查看模块系统管理员模块(1) 管理教师及学生模块(2) 公告模块3. 项目设计3.1 登录模块登录模块进行角色的分配,相应的用户选择相应的角色登录系统,主页显示将会根据角色的不同而采用不同的主页。3.2 管理员模块管理员主要负责增删修改学生以及教师,发布公告信息等等。其中的增删修改学生以及教师信息,后台采用的时Spring+hibernate实现,分页技术采用hibernate的分页技术,页面上加以ajax辅助实现异步刷新。3.3 教师及学生模块教师与学生模块都涉及了上传下载模块,学生的选课其实是往数据库添加一条记录,如果重复选择一门课程,将会出现数据库异常,从而显示错误信息。4. 项目开发4.1 技术方案整体项目采用SSH框架开发,常黄亮主要负责前台设计以及数据库设计。艾龙交主要负责后台维护,包括CURD,上传下载以及分页的实现。两人开发相辅相成,各方面都有交流技术。4.2 关键模块的实现技术、数据结构等4.2.1 增删改查模块一个系统最基本的功能就是增删改查,基本上全局都会用到这个模块,这个也是最基础最简单的模块。前台采用struts2标签库进行页面的显示,运用struts的action进行转发。后台:控制层(Web层)用struts的Form(VO对象)和Action,Form用于获取前台表单,Action负责处理各种请求。业务层(service层)负责处理各种具体的请求,以及与数据库的交互。Dao层采用Spring结合的Hibernate,直接对数据库进行操作。持久层(PO对象层)是一组JavaBean,以及负责和数据库建立映射(*.hbm.xml)。beans.xml实现C3P0方法配置数据,以及创建sessionFactory和创建事物管理器。struts.xml主要负责管理应用中的Action映射,以及该Action包含的Result定义等。struts.xml中主要配置Struts项目的一些全局的属性,用户请求和响应Action之间的对应关系,以及配置Action中可能用到的参数,以及处理结果的返回页面。还包括各种拦截器的配置等。Hibernate.cfg.xml主要负责配置持久层的映射关系,数据库不必再配置,因为已经在beans.xml中配置过。同时struts需要在web.xml中配置。4.2.2 登录模块登录模块前台采用struts2的前台标签库,后台采用结合Spring的Hibernate进行验证。前台:设置三个radioButton,用于角色的选择,不同的角色登录时选择不同radio,相应的页面以及权限都会不同,登录的时转发Action,如果登录不成功将会在登录页面提示错误信息。后台:若接收到前台页面的Action请求,通过ActionForm获取前台页面的表单信息,然后通过用户名开始查找数据库,如果用户名不存在,则添加FieldError,登录页面提示,若用户存在,则将查找的用户密码与表单传入的用户密码进行匹配,匹配成功则登录系统,不成功则添加FieldError,登录页面提示。4.2.3 上传模块整个工程的上传模块包括课件的上传和学生作业的提交。上传采用struts的上传数据。前台:采用struts2的标签上传文件,提交的时候转发action。 后台:后台的action实现相应的ModelDriven,Form VO层除了添加PO持久层的属性外,额外添加sourcefile,sourcefileFileName,sourcefileContentType,其中sourcefileFileName,sourcefileContentType前缀必须与sourcefile一致,分别表示文件的文件名和MIME类型,然后用org.apache.struts2.ServletActionContext的getServletContext().getRealPath()获取文件的真是上传路径(其实是上传到服务器根目录),最后将sourcefileFileName值赋给sourcepath,sourcepath时设计数据库时存放的文件名。Struts.xml配置直接用默认的就可以了,这样上传就完成了。4.2.4 下载模块在整个工程里面,有两处需要用到下载模块,分别是下载课件和下载学生提交的作业。下载同样采用的struts2的功能。前台:通过列表的形式列举出所有的课件,然后通过一个标签转发action,同事将文件名的参数随action一起转发。后台:编写另一个专门用于下载的*DownAction.java,添加属性:private String fileName;/用户请求的文件名 private String inputPath;/下载资源的路径(在struts配置文件中设置) 然后添加download方法:public String downloadFile() throws Exception ServletContext context = ServletActionContext.getServletContext(); /获取文件下载的路径 String downloadDir = context.getRealPath(); String downloadFile = context.getRealPath(inputPath); /防止用户请求不安全的资源 if(!downloadFile.startsWith(downloadDir) return null; return download_success; /* * 获取输入流资源 */ public InputStream getInputStream() throws Exception String path = inputPath + File.separatorChar + new String(fileName.getBytes(ISO-8859-1), UTF-8); return ServletActionContext.getServletContext().getResourceAsStream(path); /* * 获取下载时文件默认的文件名 */ public String getDownloadFileName() String downloadFileName = fileName; try downloadFileName = URLEncoder.encode(downloadFileName, ISO-8859-1); catch (UnsupportedEncodingException e) e.getMessage(); e.printStackTrace(); return downloadFileName; 最后需要配置struts.xml文件: 路径 application/octet-stream inputStream attachment;filename=$downloadFileName 2048 其中12表示待定参数,这样就可以通过数据库中存放的文件名下载文件了,节省了数据库的资源,而且比资源直接存入数据库效率更高。4.2.5 分页模块凡是数据量繁多的页面都需要用到此模块,如果没有分页,将会导致数据量繁多,不便于查找与管理。分页是最困难的一个技术,传统分页技术将会导致页面的不断刷新,影响用户体验,因此采用Ajax可以有效解决这一问题。(1)、引入2个java文件,分别是PageInfo.java和PageBean.java文件,放入到.csm.util PageBean中的分页属性: private int pageNo; /存放当前是第几页 private boolean firstPage; /判断当前页是否是第一页,如果是返回true,否则false private boolean lastPage; /判断当前页是否是最后一页,如果是是返回true,否 则false private int sumPage; /存放总页数 private int pageSize ; /当前页显示几条记录 private int totalResult ; /总记录数(2)、引入2个js文件,分别是page.js和pub.js(Ajax),前台通过点击控制跳转的下一页,首页等等连接,通过page.js的gotoquery()方法,重新设置当前页面的pageBean信息,并将action通过pub.js里面的Pub.submitActionWithForm()进行后台请求相应,从而实现了无刷新的ajax分页功能。 (3)、在jsp页面中: 在Form1中添加3个隐藏域 在Form2中添加分页的table,里面记录了上一页下一页,跳转信息以及当前页面所 有pageBean属性。 (4)、新建*Split.jsp中,用于点击分页操作的结果实现,并将结果显示在原来的*.jsp中 (5)、在struts2的配置文件中添加新页面的跳转。 (6)、在*Action中修改: 修改find方法,增加HttpServletRequest。 使用initflag标识,判断当前跳转的*.jsp还是*Split.jsp (7)、修改Dao层,对于CommonDao层,添加public List findCollectionByConditionWithPage(String hqlWhere,final Object params, LinkedHashMap orderby,final PageInfo pageInfo)方法。然后运用Hibernate的分页技术:List list = (List)this.getHibernateTemplate().execute(new HibernateCallback() public Object doInHibernate(Session session)throws HibernateException, SQLException Query query = session.createQuery(finalHql);setParams(query,params);/添加分页功能pageInfo.setTotalResult(query.list().size();/通过pageInfo对象设置列表中的总记录数query.setFirstResult(pageInfo.getBeginResult();/当前页中的数据从第几条开始查询query.setMaxResults(pageInfo.getPageSize();/当前页显示几条记录return query.list();); (8)、修改service层,在find方法里面添加: 在调用findCollectionByConditionWithPage(String hqlWhere,final Object params, LinkedHashMap orderby,final PageInfo pageInfo)前添加: PageInfo pageInfo = new PageInfo(request); 调用完成后添加: request.setAttribute(page, pageInfo.getPageBean();/获取PageBean的对象,将pagebean 的对象放置到request对象中由于代码繁多,不便全部列举,详细代码请参见:cn/edu/csm/util/PageInfo.java,cn/edu/csm/util/PageBean.java,cn/edu/csm/dao/CommonDao.java,cn/edu/csm/dao/impl/CommonDaoImpl.java,以及相应service层的具体实现代码,Action,Form代码,和前台jsp代码。4.3 特殊问题及解决办法问题1:上传下载技术问题描述:到底是否应该在数据库中添加blob属性字段直接将文件存入数据库,还是只存入数据库文件名,上传下载应该用什么技术,以及上传下载的目标文件夹在什么地方。解决方案:通过查阅深入浅出struts2以及网上搜寻答案,千罗百列的答案,大致都分为两种,第一种是采用Stream流技术,第二种就是直接上传。而存储方式则都是采用存入服务器模式,比将文件名记录入数据库。然而下载相对复杂,通过网上寻找答案以及和同学们的讨论,最终确立了一种比较简单的下载方法,那就是定义一个输入流,然后将文件放入输入流,便可提供下载。解决结果:成功实现了上传下载功能问题2:分页技术问题描述:分页到底需要定义那些变量,如何在查询的状态下进行分页而不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论