java web项目实验报告_第1页
java web项目实验报告_第2页
java web项目实验报告_第3页
java web项目实验报告_第4页
java web项目实验报告_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

Servlet 应用开发课程设计项目实验报告 项目名称:娱乐无限下载中心 指导老师: 黄 铭 班 级: WEB11307 第二组 地 点: J1B401 小组成员:叶佳陇、王月、李飞、袁梅 廖小飞、江伟、李占银、李虹颖、侯燕 王晶晶、林姣、宋晓、严映婷、饶琴英 徐小川、王婷、杨梅、王晓莉、魏海林 时间:18 周,2012 年 12 月 31 日-2013 年 01 月 04 日 目录 1.1 需求分析.1 1.2 项目设计2 1.2.1 选择开发模型 2 1.2.2 数据库设计.2 1.3 项目实施.3 1.3.1 创建 web 项目3 1.3.2 通用功能的实现3 1.3.3 普通用户功能的实现3 1.3.4 管理员功能的实现3 1.4 项目运行4 1.4.1 Web 项目的目录结构.4 1.4.2 Web 项目的发布.4 1.5 个人总结 5 1.1 需求分析 a.功能需求 用户分为管理员和普通用户 对于普通用户:能够直接访问网站的内容,包括浏览排行榜、浏览所有 信息、分类浏览、分页浏览也可进行下载信息,当浏览的较多时可以进行分页 浏览。 对于管理员除了具有普通用的权利之外,还可以通过登陆进行信息的管 理 包括信息的添加、删除、修改 b.结构功能分析 1. src 目录的结构 1.1 service 包(模型层):建立普通用户所实现的功能以及管理员所 实现的功能以及他们的共享的功能. UserService 类中, 包括获得下载次数排名前十位的数据信息获得数据库中的所 有信息获得指定分类的数据库信息获得指定名称的数据信息。 CommonService:获得下载文件信息及下载文件是更新文件的下载次数的方法。 AdminService:实现各种业务罗就包括验证登录信息获得数据库中的所有信 息添加信息检索单条信息修改信息等。 1.2 servlets 包(控制层):将后台的数据库和前台的界面进行连接 LoginServlet 验证登录信息。 AdminServlet 实现信息的管理。 UserServlet 根据用户的请求路径不同 调用相应的模型去处理 请求并选择合适的视图层去响应客户端。 DownLoadServlet:进行对上传文件的下载。 1.3 util 包(实现通用功能的 java 类):前台数据库的建立 DBHelper 创建数据库的链接创建语句对象设置 SQL 语句的参数返 回查询操作的单条记录返回查询操作的多天记录执行更新语句管部数据库的连 接。 1.2 项目设计 1.2.2 选择开发模型 本系统的开发基于 MVC 模式,其中模型层负责业务数据的表示和实现业 务逻辑,用 Java 类实现;视图层用于与用户交互,由 JSP 页面实现,通过在 JSP 页面中使用 EL 和 JSTL,避免了 Java 脚本的出现;控制器层完成流程控制, 它接收来自视图层用户输入的数据并调用相应的模型进行处理,最后选择合适 的视图去响应用户,控制器层用 Servlet 实现。 1.2.2 数据库设计 本系统的数据信息存储在 SQL 数据库服务器的数据库中,数据库中共有两 张数据表,即 admin 和 files,其中 admin 表用于存储管理员的登录信息,files 表用于存储娱乐信息。 Admin 表 Fils 表 1.3 项目实施 1.3.1 创建 Web 项目 利用 myeclipse 创建新的 Web 项目,名为 ch4的目录结构如图3-1所示。 其中,src 目录的 service 包保存模型层的 java 类,servlets 包保存控制器层的 servlet,util 包保存实现通用功能的 java 类;WebRoot 目录下的 admin 文件夹保 存与管理员操作相关的 JSP 页面,用户相关的 JSP 页面直接保存在 WebRoot 目 录下,software 文件夹保存上传的文件。 图 31 项目 ch14的目录结构 Service CommonService UserService AdminService 1.3.2 通用功能的实现 系统的通用功能包括数据库访问、分页处理和文件的上传/下载,这些功 能在模型层通过 Java 语言实现。 A.数据库访问 数据库访问操作封装在 util.DBUtil 类中,包括创建数据库连接、 Util DBUtil Fileutil PageBean Servlets Adminsevlet DownLoadService LoginServlet Usersevlet WebRoot Login.jsp Add.jsp Header.jsp Index.jsp List.jsp Listall.jsp result.jsp Searchlist.jsp Showfile.jsp Sortlist.jsp Toplist.jsp Update.jsp delete.jsp 创建语句对象、设置 SQL 语句的参数、返回查询操作的单条记录、返回查询操 作的多条记录、执行更新语句、关闭数据库连接等功能。 文件名:DBUtil.java package util; import java.sql.*; import java.util.*; public class DBUtil private Connection conn=null; private PreparedStatement pstmt=null; private ResultSet rs=null; private String url=“jdbc:odbc:music“; private int pageSize=3; /获 取连接对象 private Connection getConnection() try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); conn=DriverManager.getConnection(url,“root“,“root“); catch(ClassNotFoundException e) e.printStackTrace(); catch(SQLException e) e.printStackTrace(); return conn; /获 取语句对象 private PreparedStatement getPreoareStatement(String sql) try pstmt=getConnection().prepareStatement(sql); catch(SQLException e) e.printStackTrace(); return pstmt; /给 pstmt的SQL语句设置参数(要求参数以数组形式给出) private void setParams(String sql,Object params) pstmt=this.getPreoareStatement(sql); for(int i=0;igetTotalPages() curPage=getTotalPages(); else if(curPage1) curPage=1; return curPage; public void setCurPage(int curPage) this.curPage=curPage; public int getTotalPages() if(totalRows%pageSize=0) totalPages=totalRows/pageSize; else totalPages=totalRows/pageSize+1; return totalPages=totalPages; public void setTotalPages(int totalPages) this.totalPages=totalPages; public int getTotalRows() return totalRows; public void setTotalRows(int totalRows) this.totalRows=totalRows; public int getPageSize() return pageSize; public void setPageSize(int pageSize) this.pageSize=pageSize; public List getData() return data; public void setData(List data) this.data=data; C.文件的上传和下载 文件的上传的下载功能封装在util.FileUtil类中,提供了实现文 件上传和下载的通用方法。 文件名:FileUtil.java package util; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import mons.fileupload.FileItem; import mons.fileupload.FileUploadException; import mons.fileupload.FileUploadBase.SizeLimitExceededException; import mons.fileupload.disk.DiskFileItemFactory; import mons.fileupload.servlet.ServletFileUpload; public class FileUtil private Map parameters = null; private Map file = null; private long max_size = 30*1024*1024; public FileUtil() parameters = new HashMap(); file = new HashMap(); public int upload(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response, String uploadPath) throws IOException DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); diskFileItemFactory.setSizeThreshold(4096); ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); fileUpload.setSizeMax(max_size); fileUpload.setHeaderEncoding(“GBK“); response.setContentType(“text/html;charset=GBK“); PrintWriter out = response.getWriter(); List fileList = null; try fileList = fileUpload.parseRequest(request); catch (FileUploadException e) if (e instanceof SizeLimitExceededException) System.out.println(“文件大小超过“ + max_size + “字节“); return 0; e.printStackTrace(); Iterator fileItr = fileList.iterator(); while (fileItr.hasNext() FileItem fileItem = null; String sourceFilePath = null; String sourceFileName = null; String fileExt = null; String filePath= null; String realPath = null; String fileName = null; long size = 0; fileItem = (FileItem) fileItr.next(); if (!fileItem.isFormField() sourceFilePath = fileItem.getName(); size = fileItem.getSize(); if (!sourceFilePath.equals(“) fileExt = sourceFileName.substring(sourceFileName.lastIndexOf(“.“) + 1); long systemTime=System.currentTimeMillis(); filePath=uploadPath+“/“+systemTime+“.“+fileExt; realPath = servletContext.getRealPath(filePath); try fileItem.write(new File(realPath); catch (Exception e) e.printStackTrace(); return 0; file.put(“size“, String.valueOf(size); file.put(“filePath“,filePath); file.put(“fileName“, sourceFileName); else String fieldName = fileItem.getFieldName(); String value = fileItem.getString(“GBK“); parameters.put(fieldName, value); return 1; public int download(ServletContext servletContext,HttpServletResponse response,Map file) throws IOException java.io.BufferedInputStream bis = null; java.io.BufferedOutputStream bos = null; try String filePath=(String)file.get(“filePath“); String realPath=servletContext.getRealPath(filePath); long fileLength = new File(realPath).length(); response.setHeader(“Content-disposition“, “attachment; filename=“ + new String(String)file.get(“fileName“).getBytes(“GBK“),“ISO8859-1“); response.setHeader(“Content-Length“, String.valueOf(fileLength); bis = new BufferedInputStream(new FileInputStream(realPath); bos = new BufferedOutputStream(response.getOutputStream(); byte buff = new byte2048; int bytesRead; while (bytesRead = bis.read(buff, 0, buff.length)!=-1) bos.write(buff, 0, bytesRead); catch (IOException e) return 0; finally if (bis != null) bis.close(); if (bos != null) bos.close(); return 1; public Map getFile() return file; public Map getParameters() return parameters; public void setMax_size(long max_size) this.max_size = max_size; 模型层的service.CommonService类提供了获得下载文件信息及下载文件时 更新文件下载次数的通用方法。 文件名:CommonService.java package service; import util.*; import java.util.*; import java.io.*; public class CommonService private DBUtil db=new DBUtil(); public Map getDownLoadFile(String id) String sql=“select filePath,fileName from files where id=?“; return db.getMap(sql, new Objectid); public void updateHits(String id) String sql=“update files set hits=hits+1 where id=?“; db.update(sql, new Objectid); 控制器层的servlet.DownLoadServlet类用于处理用户的下载请求,完成下载文件信 息的获取,调用util.FileUtil类的下载方法完成文件的下载动作,以及更新文件的下 载次数。 文件名:DownLoadServlet.java package servlets; import util.*; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import service.CommonService; public class DownLoadServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request, response); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String id=request.getParameter(“id“); CommonService cs=new CommonService(); Map file=cs.getDownLoadFile(id); FileUtil fu=new FileUtil(); int r=fu.download(this.getServletContext(), response, file); if(r=1) cs.updateHits(id); 1.3.3 普通用户功能的实现 普通用户功能包括浏览排行榜、浏览所有信息、分类浏览和分类搜索。 A.模型层的实现 实现普通用户功能的业务逻辑被封装在模型层的 service.UserService 类中, 包括获得下载次数排名前10位的数据信息、获得数据库中所有的信息、获得指 定分类的数据信息、获得指定分类和指定名称的数据信息等。 文件名:UserService.java package service; import util.*; import java.util.*; import java.io.*; public class UserService private DBUtil db=new DBUtil(); /获得所有信息的 PageBean 对象 public PageBean listAll(int curPage) String sql=“select * from files order by lastModified desc“; return db.getPageBean(sql, new Object, curPage); /获得下载次数排名前 10 位的信息 public List topList() String sql=“select id,name,hits from files where hits!=0 order by hits desc limit 0,10“; return db.getList(sql, new Object); /通过 id 获得单条数据信息 public Map getById(String id) String sql=“select * from files where id=?“; return db.getMap(sql, new Objectid); /获得指定类型的数据信息的 PageBean 对象 public PageBean listSort(String type, int curPage) String sql=null; if(type=null | type.equals(“) sql=“select * from files order by type“; return db.getPageBean(sql, new Object, curPage); else sql=“select * from files where type=?“; return db.getPageBean(sql, new Objecttype, curPage); /获得指定类型和指定名称的数据信息的 PageBean 对象 public PageBean search(String type,String name,int curPage) String sql=null; if(type=null | type.equals(“) if(name=null | name.equals(“) sql=“select * from files order by type“; return db.getPageBean(sql, new Object, curPage); else sql=“select * from files where name like ?“; return db.getPageBean(sql, new Object“%“+name+“%“, curPage); else if(name=null | name.equals(“) sql=“select * from files where type=?“; return db.getPageBean(sql, new Objecttype, curPage); else sql=“select * from files where type=? and name like ?“; return db.getPageBean(sql, new Objecttype,“%“+name+“%“, curPage); B.控制器层的实现 普通用户功能的控制器层由 servlets.UserServlet 类实现,完成根据用户的请 求路径调用相应的模型去处理请求,并选择合适的视图层文件响应用户。 文件名:UserServlet.java package servlets; import util.*; import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import service.UserService; public class UserServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request, response); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(“GBK“); String requestPath=request.getRequestURI(); int i=requestPath.lastIndexOf(/); String path=requestPath.substring(i); RequestDispatcher rd=null; UserService us=new UserService(); if(path.equals(“/listAll“) String page = request.getParameter(“page“); int curPage = 0; if (page = null | page.length() 1) curPage = 1; else curPage = Integer.parseInt(page); PageBean pageBean=us.listAll(curPage); request.setAttribute(“pageBean“, pageBean); rd=request.getRequestDispatcher(“/listAll.jsp“); rd.forward(request, response); else if(path.equals(“/top“) List top=us.topList(); request.setAttribute(“top“, top); rd=request.getRequestDispatcher(“/topList.jsp“); rd.forward(request, response); else if(path.equals(“/show“) String id=request.getParameter(“id“); Map file=us.getById(id); request.setAttribute(“file“, file); rd=request.getRequestDispatcher(“/showFile.jsp“); rd.forward(request, response); else if(path.equals(“/sort“) String type=request.getParameter(“type“); String page = request.getParameter(“page“); int curPage = 0; if (page = null | page.length() 1) curPage = 1; else curPage = Integer.parseInt(page); PageBean pageBean=us.listSort(type,curPage); request.setAttribute(“pageBean“, pageBean); rd=request.getRequestDispatcher(“/sortList.jsp“); rd.forward(request, response); else if(path.equals(“/search“) String type=request.getParameter(“type“); String name=request.getParameter(“name“); String page = request.getParameter(“page“); int curPage = 0; if (page = null | page.length() 1) curPage = 1; else curPage = Integer.parseInt(page); PageBean pageBean=us.search(type,name,curPage); request.setAttribute(“pageBean“, pageBean); rd=request.getRequestDispatcher(“/searchList.jsp“); rd.forward(request, response); C.视图层的实现 (1)首页index.jsp (2) 浏览排行榜有信息listAll.jsp (3)排行榜 toplist.jsp (4)查看排行榜中某文件的详细信息showFile.jsp (5)信息分类浏览sortLis.jsp (6)分类搜索searchList.jsp 1.3.3 管理员功能的实现 管理员登录后将浏览到所有信息,并且可以信息进行添加、修改、删除。 A.模型层的实现 实现管理员功能的业务逻辑被封装在模型层的 service.AdminService 类中, 包括验证登录信息、获得数据库所有信息、添加信息、检索单条信息、修改信 息等 文件名:AdminService.java package service; import util.*; import java.util.*; import java.io.*; public class AdminService private DBUtil db=new DBUtil(); /验证登录信息 public boolean checkLogin(String username,String password) String sql=“select * from admin where username=? and password=?“; Map m=db.getMap(sql, new Objectusername,password); if(m=null) return false; else return true; /添加信息 public int add(Map file,Map parameters) int result=0; Object name=parameters.get(“name“); Object size=file.get(“size“); String hits=“0“; Object type=parameters.get(“type“); Object description=parameters.get(“description“); Object filePath=file.get(“filePath“); Object fileName=file.get(“fileName“); String sql=“insert into files values(null,?,now(),?,?,?,?,?,?)“; result=db.update(sql, new Objectname,size,hits,type,description,filePath,fileName); return result; /获得所有信息的 PageBean 对象 public PageBean list(int curPage) String sql=“select id,name,lastModified,size,hits,description from files“; return db.getPageBean(sql, new Object, curPage); /通过 id 检索单条信息 public Map getById(String id) String sql=“select * from files where id=?“; return db.getMap(sql, new Objectid); /更新上传文件信息 public int updateFile(String realPath,Map file,Map parameters) int result=0; File f=new File(realPath); f.delete(); String sql=“update files set size=?,hits=?,filePath=?,fileName=? where id=?“; result=db.update(sql, new Objectfile.get(“size“),“0“,file.get(“filePath“),file.get(“fileName“),parameters.get(“id“); return result; /更新信息 public int updateInfo(Map parameters) Object id=parameters.get(“id“); Object name=parameters.get(“name“); Object type=parameters.get(“type“); Object description=parameters.get(“description“); String sql=“update files set name=?,lastModified=now(),type=?,description=? where id=?“; return db.update(sql, new Objectname,type,description,id); B、控制器层的实现 登录验证控制器层由 servlets.loginServlet 实现,其他的信息管理功能的控制器 层由 servlets.AdminServlet 实现 文件名:LoginServlet.java (代码略) 文件名:AdminServlet.java package servlets; import util.*; import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import service.AdminService; public class AdminServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request, response); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(“GBK“); String requestPath=request.getRequestURI(); int i=requestPath.lastIndexOf(/); String path=requestPath.substring(i); RequestDispatcher rd=null; AdminService as=new AdminService(); if(path.equals(“/add“) String uploadPath=“/software“; FileUtil fu=new FileUtil(); int r=fu.upload(this.getServletContext(), request, response, uploadPath); if(r=1 else request.setAttribute(“result“, “添加失败!“); rd=request.getRequestDispatcher(“/admin/result.jsp“); rd.forward(request, response); else if(path.equals(“/update“) String id=request.getParameter(“id“); Map file=as.getById(id); request.setAttribute(“file“, file); rd=request.getRequestDispatcher(“/admin/update.jsp“); rd.forward(request, response); else if(path.equals(“/dealUpdate“) int result=0; String uploadPath=“/software“; FileUtil fu=new FileUtil(); int r=fu.upload(this.getServletContext(), request, response, uploadPath); if(r=1) Map file=(Map)fu.getFile(); Map parameters=(Map)fu.getParameters(); if(!file.isEmpty() String realPath=this.getServletContext().getRealPath(String)parameters.get(“filePath“); result=as.updateFile(realPath,file,parameters); result=as.updateInfo(parameters); if(result=1) request.setAttribute(“result“, “更新成功!“); else request.setAttribute(“result“, “更新失败!“); rd=request.getRequestDispatcher(“/admin/result.jsp“); rd.forward(request, response); else if(path.equals(“/delete“) else if(path.equals(“/list“) String page = request.getParameter(“page“); int curPage = 0; if (page = null | page.length() 1) curPage = 1; else curPage = Integer.parseInt(page); PageBean pageBean=as.list(curPage); request.setAttribute(“pageBean“, pageBean); rd=request.getRequestDispatcher(“/admin/list.jsp“); rd.forward(request, response); C、视图层的实现 (1)登录页面login.jsp (2)管理页面list.jsp (3)添加信息add.jsp (4)修改信息update.jsp (5)结果显示result.jsp (6)删除信息delete.jsp 1.4项目运行 14.4.1 Web 项目的目录结构 Web 项目 ch14的最终目录结构如图14-12所示。 14.4.2 Web 项目的发布 将 web 项目发布到 tomcat 服务器上可以通过打包、安装的方式。 1、打包 Web 项目发布时,需要将 webRoot 目录下的所有内容打包到一个 war 文件中。 使用 WAR 文件更新以便于 web 项目的发布和设置,便于 web 应用的移植。 打包时,需要进入 web 项目的 webroot 目录下,运行如下命令: Jar cvf ch14.war. 2、安装 将 WAR 文件复制到$CATALINA-HOMEwebapps 目录下即可,然后再浏览 器地址栏中输入 URL: http:/locahost:8080/ch14,即可访问 web 应用。 1.5 个人总结 为了了解自己对本学期知识的掌握情况,我们进行了十四章的项目训练。 其项目设计:一、项目系统的开发基于 MVC 模式。二、数据库设计。让我们清 楚的了解到系统的运行机制与数据库的建立。 这其中也有些文件需要我们自己去完成。这个项目所蕴含的知识几乎囊括 本书的所有内容,极具完整性。最后在与对数据库的链接遇到了问题,用 JDBC-ODBC 的链接方法链接不上,只能用我们还没有学过的链

温馨提示

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

评论

0/150

提交评论