目录
一、课设目的 3
二、开发环境 4
三、课设内容 5
3.1具体要求 7
四、需求分析 7
4.1系统功能需求分析 7
4.2系统性能需求分析 7
4.3用例图 8
五、设计过程 9
5.1数据库设计 9
5.1.1数据库表的建立 9
5.2登录 10
5.3下载文件 11
5.4上传文件 13
5.5人员信息管理 18
5.5.1添加人员 18
5.5.2修改人员信息 18
5.5.3查询人员信息 19
5.5.4删除人员信息 19
六、测试 19
6.1学生登录测试 19
6.2教师登录测试 20
6.3管理员登录测试 21
6.4下载文档测试 22
6.5下载视频测试 22
6.6添加教师测试 23
6.7教师信息管理测试 24
6.8学生信息管理测试 25
6.9上传测试 26
6.10注册页面测试 27
七、调试过程 27
7.1遇到的问题 27
7.2问题的解决 28
八、小结 29
九、参考文献 30
一、课设目的
1.复习、巩固JavaWeb的基础知识,进一步加深对JavaWeb技术的理解和掌握。
2.课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
3.培养学生在项目开发中团队合作精神、创新意识及能力。
二、开发环境
操作系统:Windows
开发工具:MyEclipse
MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse可以支持Java Servlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。
Java中间件服务器:Tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
数据库: MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
本文转载自:http://www.biyezuopin.vip/onews.asp?id=16540
5.2登录
1.用户输入用户信息和验证码后,系统验证账号信息是否合法。
2.首先获取验证码,验证验证码是否输入正确。验证码正确继续验证账户信息,向下进行,如果验证码错则要求用户重新输入。
3.然后获取表单信息,验证用户名和密码。
4.成功就保存用户信息到session,并重定向succ1.jsp。
5. 如果失败,保存错误信息到requset,转发到login.jsp。 (服务器内部跳转只有一个request请求,重定向会有新的request,就不能获取错误信息)
5.3下载文件
以下是下载文件的核心代码和注解:

    String action = request.getParameter("action");if ("findAllFile".equals(action) || "findAllVideo".equals(action)) {try {findAllFile(request, response);} catch (SQLException throwables) {throwables.printStackTrace();}} else if ("downloadfile".equals(action)) {//得到要下载的文件名String fileName = request.getParameter("filename");  //23239283-92489-阿凡达.avifileName = new String(fileName.getBytes("iso8859-1"),"UTF-8");/*int index = fileName.lastIndexOf("\\");if (index != -1) {//如果文件名中有\,则表示有路径,需截取fileName = fileName.substring(index + 1);}*///上传的文件都是保存在/WEB-INF/upload目录下的子目录当中String fileSaveRootPath=this.getServletContext().getRealPath("uploadFile");// String fileSaveRootPath=this.getServletContext().getRealPath("WEB-INF/upload");//通过文件名找出文件的所在目录String path = findFileSavePathByFileName(fileName,fileSaveRootPath);//得到要下载的文件File file = new File(path + "\\" + fileName);//如果文件不存在if(!file.exists()){request.setAttribute("message", "您要下载的资源已被删除!!");request.getRequestDispatcher("/message.jsp").forward(request, response);return;}//处理文件名String realname = fileName.substring(fileName.indexOf("_")+1);//设置响应头,控制浏览器下载该文件response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8"));//读取要下载的文件,保存到文件输入流FileInputStream in = new FileInputStream(path + "\\" + fileName);//创建输出流OutputStream out = response.getOutputStream();//创建缓冲区byte buffer[] = new byte[1024];int len = 0;//循环将输入流中的内容读取到缓冲区当中while((len=in.read(buffer))>0){//输出缓冲区的内容到浏览器,实现文件下载out.write(buffer, 0, len);}//关闭文件输入流in.close();//关闭输出流out.close();}
}

5.4上传文件
1.查询所有文件信息,调用Service中的findAllFile或findAllVideo方法
2.将文件放在request中
3.请求转发给InfoManage.jsp或VideoInfoManage.jsp
*创建工厂对象
*使用工厂对象创建解析器
*通过解析器解析request请求,获取FileItem集合
*通过循环遍历依次取出表单项,如果是文件则存入磁盘。
核心代码:

private void downloadFile(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException {//查询所有文件信息,调用Service中的findAllFile方法List<Map<String, Object>> list = FileService.findAllFile();System.out.println(list);//将文件放在request中request.getSession().setAttribute("list", list);//请求转发给InfoManage.jsprequest.getRequestDispatcher("/stuDownloadInfo.jsp").forward(request, response);}
private void findAllFile(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException {//查询所有文件信息,调用Service中的findAllFile方法List<Map<String, Object>> list = FileService.findAllFile();System.out.println(list);//将文件放在request中request.getSession().setAttribute("list", list);//请求转发给InfoManage.jsprequest.getRequestDispatcher("/InfoManage.jsp").forward(request, response);
}
private void addFile(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException, SQLException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全//String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");//上传时生成的临时文件保存目录String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");java.io.File file = new java.io.File(tempPath);if (!file.exists() && !file.isDirectory()) {file.mkdir();}//消息提示String message = "";try {//使用Apache文件上传组件处理文件上传步骤://1、创建一个DiskFileItemFactory工厂DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();//设置工厂的缓冲区的大小,当上传的文件大小超过缓冲区的大小时,就会生成一个临时文件存放到指定的临时目录当中。diskFileItemFactory.setSizeThreshold(1024 * 100);//设置上传时生成的临时文件的保存目录diskFileItemFactory.setRepository(file);//2、创建一个文件上传解析器ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);//解决上传文件名的中文乱码fileUpload.setHeaderEncoding("UTF-8");//监听文件上传进度fileUpload.setProgressListener(new ProgressListener() {public void update(long pBytesRead, long pContentLength, int arg2) {//System.out.println("文件大小为:" + pContentLength + ",当前已处理:" + pBytesRead);}});//3、判断提交上来的数据是否是上传表单的数据if (!fileUpload.isMultipartContent(request)) {//按照传统方式获取数据return;}//设置上传单个文件的大小的最大值,目前是设置为1024*1024字节,也就是1MBfileUpload.setFileSizeMax(1024 * 1024*10);//设置上传文件总量的最大值,最大值=同时上传的多个文件的大小的最大值的和,目前设置为10MBfileUpload.setSizeMax(1024 * 1024 * 20);//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项List<FileItem> list = fileUpload.parseRequest(request);for (FileItem item : list) {//如果fileItem中封装的是普通输入项的数据if (item.isFormField()) {String name = item.getFieldName();//解决普通输入项的数据的中文乱码问题String value = item.getString("UTF-8");String value1 = new String(name.getBytes("iso8859-1"), StandardCharsets.UTF_8);System.out.println(name + "  " + value);System.out.println(name + "  " + value1);} else {//如果fileItem中封装的是上传文件,得到上传的文件名称,String fileName = item.getName();//file1.setTitle(fileName);if (fileName == null || fileName.trim().equals("")) {continue;}//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt//处理获取到的上传文件的文件名的路径部分,只保留文件名部分fileName = fileName.substring(fileName.lastIndexOf(java.io.File.separator) + 1);//得到上传文件的扩展名String fileExtName = fileName.substring(fileName.lastIndexOf(".") + 1);if ("zip".equals(fileExtName) || "rar".equals(fileExtName) || "tar".equals(fileExtName) || "jar".equals(fileExtName)) {request.setAttribute("message", "上传文件的类型不符合!!!");request.getRequestDispatcher("/teaUploadInfo.jsp").forward(request, response);return;}//如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法//System.out.println("上传文件的扩展名为:" + fileExtName);//获取item中的上传文件的输入流InputStream is = item.getInputStream();//得到文件保存的名称fileName = mkFileName(fileName);//得到文件保存的路径String savePathStr = mkFilePath("savePath", fileName);System.out.println("保存路径为:" + savePathStr);//创建一个文件输出流FileOutputStream fos = new FileOutputStream(savePathStr + java.io.File.separator + fileName);//创建一个缓冲区byte buffer[] = new byte[1024];//判断输入流中的数据是否已经读完的标识int length = 0;//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据while ((length = is.read(buffer)) > 0) {//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中fos.write(buffer, 0, length);}//关闭输入流is.close();//关闭输出流fos.close();//删除处理文件上传时生成的临时文件item.delete();message = "文件上传成功";}}} catch (FileUploadBase.FileSizeLimitExceededException e) {e.printStackTrace();request.setAttribute("message", "单个文件超出最大值!!!");request.getRequestDispatcher("/uploadFile.jsp").forward(request, response);return;} catch (FileUploadBase.SizeLimitExceededException e) {e.printStackTrace();request.setAttribute("message", "上传文件的总的大小超出限制的最大值!!!");request.getRequestDispatcher("/uploadFile.jsp").forward(request, response);return;} catch (FileUploadException e) {// TODO Auto-generated catch blocke.printStackTrace();message = "文件上传失败";}//file1.setTitle(name);file1.setAuthor(request.getParameter("author"));file1.setPath("savePath");file1.setTime(new Date());FileService.addFile(file1);request.setAttribute("message", message);request.getRequestDispatcher("/teaUploadInfo.jsp").forward(request, response);
}























基于JavaWeb实现的师生交流系统平台相关推荐

  1. 基于Java的师生交流系统

    项目技术: 系统使用技术:SpringMVC 前端技术:bootstrap.js.css.Ajax等 开发工具:eclipse 数据库:mysql5.7 项目介绍: 该系统采用java语言,Sprin ...

  2. 基于javaweb的学生综合素质评价系统(java+ssm+thymeleaf+layui+mysql)

    基于javaweb的学生综合素质评价系统(java+ssm+thymeleaf+layui+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/ide ...

  3. 基于JavaWeb的计算机网络在线测评系统(源码+数据库+论文)

    本系统是一个基于JavaWeb的计算机网络在线测评系统 本系统基于B/S结构的模式开发,通过网络给广大用户提供了比较可靠.方便.快捷的在线测评平台,系统主要实现了自动抽取试题.人工出题.套题选择.自动 ...

  4. 基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql)

    基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/id ...

  5. 基于javaweb的音乐专辑商城系统(java+ssm+jsp+jquery+mysql)

    基于javaweb的音乐专辑商城系统(java+ssm+jsp+jquery+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myecl ...

  6. 基于javaweb的养老院综合服务系统(java+ssm+jsp+jquery+echarts+mysql)

    基于javaweb的养老院综合服务系统(java+ssm+jsp+jquery+echarts+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/i ...

  7. 基于javaweb的二手交易商城系统(java+jsp+javascript+servlet+mysql)

    基于javaweb的二手交易商城系统(java+jsp+javascript+servlet+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/id ...

  8. 基于javaweb的在线奶茶店系统(java+jsp+javascript+servlet+mysql)

    基于javaweb的在线奶茶店系统(java+jsp+javascript+servlet+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/ide ...

  9. 基于javaweb的在线甜品商城系统(java+ssm+jsp+javascript+mysql)

    基于javaweb的在线甜品商城系统(java+ssm+jsp+javascript+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/m ...

最新文章

  1. 园林工程中植物搭配要注意哪些地方?
  2. Windows Server 2016 + Exchange 2016 +Office365混合部署(四)
  3. 一次布环境,引起的总结
  4. js 获取时间对象代码
  5. 一出好戏不止是部电影,它也正接近你的生活。
  6. windows环境下的zookeeper安装
  7. CodeForces - 434D Nanami's Power Plant
  8. Android Things揭开面纱
  9. centos5.4 64位下安装mysql5.5.14
  10. 剑指OFFER之二进制中1的个数(九度OJ1513)
  11. IOS约束三个按钮等宽等高,均分整个view,
  12. 感谢有你们,架构师修行之路!
  13. linux读取内存文件,linux – 使用模块读取内核内存
  14. 【操作系统复习】进程的定义、组成、组织方式
  15. 从RGB扫描图到数字化等高线矢量图
  16. 干净虚拟机(centos 6.4)上从头到尾安装并调试Mdrill(四)
  17. Android安全开发之ZIP文件目录遍历
  18. Flutter进阶—实现动画效果(三)
  19. 开启服务器,自动加载类是否需要开辟新的线程研究
  20. 一个简单的线程池设计方案

热门文章

  1. 不会英语可以学计算机编程吗,不会英语的人应该怎么学编程
  2. 汾阳市教师招聘中职计算机真题,2019年山西省吕梁市汾阳市中小学语文教师招聘/编制考试历年真题试卷及答案解析...
  3. COGS 2057. [ZLXOI2015]殉国
  4. java 容器排序_Java攻略第四章 容器类、排序
  5. 基于浮云绘图 快速开发车站状态图
  6. PAT乙级 1070 结绳
  7. [转载]--令人拍案叫绝的Wasserstein GAN
  8. Android 4.2系统的手机使用LEAP企业Wifi网络 ( by quqi99 )
  9. 用百度地图开通微信支付分
  10. git的GUI工具Sourcetree使用及命令行对比