《Java Web项目实验报告.doc》由会员分享,可在线阅读,更多相关《Java Web项目实验报告.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 Servlet应用开发课程设计项目实验报告 项目名称:娱乐无限下载中心 指导老师: 黄 铭 班 级: WEB11307第二组 地 点: J1B401 小组成员:叶佳陇、王月、李飞、袁梅 廖小飞、江伟、李占银、李虹颖、侯燕 王晶晶、林姣、宋晓、严映婷、饶琴英 徐小川、王婷、杨梅、王晓莉、魏海林 时间:18周,2012年12月31日-2013年01月04日 目录1.1需求分析.11.2项目设计.2 1.2.1选择开发模型.2 1.2.2数据库设计.21.3项目实施.3 1.3.1创建web项目.3 1.3.2通用功能的实现.3 1.3.3普通用户功能的实现.3 1.3.4管理员功能的实现.31.
2、4项目运行.4 1.4.1 Web项目的目录结构.4 1.4.2 Web项目的发布.41.5 个人总结.51.1需求分析 a.功能需求 用户分为管理员和普通用户 对于普通用户:能够直接访问网站的内容,包括浏览排行榜、浏览所有信息、分类浏览、分页浏览也可进行下载信息,当浏览的较多时可以进行分页浏览。 对于管理员除了具有普通用的权利之外,还可以通过登陆进行信息的管理包括信息的添加、删除、修改b.结构功能分析 1. src目录的结构 1.1 service 包(模型层):建立普通用户所实现的功能以及管理员所实现的功能以及他们的共享的功能. UserService类中,包括获得下载次数排名前十位的数据
3、信息获得数据库中的所有信息获得指定分类的数据库信息获得指定名称的数据信息。 CommonService:获得下载文件信息及下载文件是更新文件的下载次数的方法。 AdminService:实现各种业务罗就包括验证登录信息获得数据库中的所有信息添加信息检索单条信息修改信息等。 1.2 servlets 包(控制层):将后台的数据库和前台的界面进行连接LoginServlet验证登录信息。 AdminServlet实现信息的管理。 UserServlet根据用户的请求路径不同调用相应的模型去处理 请求并选择合适的视图层去响应客户端。 DownLoadServlet:进行对上传文件的下载。 1.3 u
4、til 包(实现通用功能的java类):前台数据库的建立 DBHelper创建数据库的链接创建语句对象设置SQL语句的参数返回查询操作的单条记录返回查询操作的多天记录执行更新语句管部数据库的连接。 1.2项目设计1.2.2选择开发模型 本系统的开发基于MVC模式,其中模型层负责业务数据的表示和实现业务逻辑,用Java类实现;视图层用于与用户交互,由JSP页面实现,通过在JSP页面中使用EL和JSTL,避免了Java脚本的出现;控制器层完成流程控制,它接收来自视图层用户输入的数据并调用相应的模型进行处理,最后选择合适的视图去响应用户,控制器层用Servlet实现。1.2.2数据库设计本系统的数据
5、信息存储在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文
6、件夹保存上传的文件。 图 31 项目ch14的目录结构 AdminService UserServiceCommonService ServiceAdminsevletDownLoadServiceServlets LoginServlet Usersevlet DBUtil Fileutil PageBean Util Login.jsp Add.jsp Header.jsp Index.jsp List.jsp delete.jsp Update.jsp Toplist.jsp Sortlist.jsp Showfile.jsp Searchlist.jsp result.jsp List
7、all.jspWebRoot1.3.2 通用功能的实现 系统的通用功能包括数据库访问、分页处理和文件的上传/下载,这些功能在模型层通过Java语言实现。 A.数据库访问 数据库访问操作封装在util.DBUtil类中,包括创建数据库连接、创建语句对象、设置SQL语句的参数、返回查询操作的单条记录、返回查询操作的多条记录、执行更新语句、关闭数据库连接等功能。 文件名:DBUtil.javapackage util;import java.sql.*;import java.util.*;public class DBUtil private Connection conn=null;privat
8、e PreparedStatement pstmt=null;private ResultSet rs=null;private String url=jdbc:odbc:music; private int pageSize=3;/获取连接对象private Connection getConnection()tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);conn=DriverManager.getConnection(url,root,root);catch(ClassNotFoundException e)e.printStackTrace
9、();catch(SQLException e)e.printStackTrace();return conn;/获取语句对象private PreparedStatement getPreoareStatement(String sql)trypstmt=getConnection().prepareStatement(sql);catch(SQLException e)e.printStackTrace();return pstmt;/给pstmt的SQL语句设置参数(要求参数以数组形式给出)private void setParams(String sql,Object params)p
10、stmt=this.getPreoareStatement(sql);for(int i=0;iparams.length;i+)trypstmt.setString(i+1,(String) paramsi);catch(SQLException e)e.printStackTrace();/执行数据库查询操作,返回结果的记录数private int getTotalRows(String sql,Object params)int totalRows=0;String countSQL=select count(*)from(+sql+) as temp;trythis.setParams
11、(countSQL,params);ResultSet rs=pstmt.executeQuery();if(rs.next()totalRows=rs.getInt(1);catch(SQLException e)e.printStackTrace();finallyclose();return totalRows;/执行数据库查询操作时,将返回的结果封装到List对象中public List getList(String sql,Objectparams)List list=new ArrayList();trythis.setParams(sql,params);ResultSet rs
12、=pstmt.executeQuery();ResultSetMetaData rsmd=rs.getMetaData();while(rs.next()Map m=new HashMap();for(int i=1;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)tot
13、alPages=totalRows/pageSize;elsetotalPages=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 pag
14、eSize;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.javapackage util;import java.io.*;import java.util.*; import javax.servlet.*;import j
15、avax.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 parameter
16、s = 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 DiskFileItemFa
17、ctory diskFileItemFactory = new DiskFileItemFactory(); diskFileItemFactory.setSizeThreshold(4096); ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); fileUpload.setSizeMax(max_size); fileUpload.setHeaderEncoding(GBK); response.setContentType(text/html;charset=GBK); PrintWrite
18、r 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 (fi
19、leItr.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 = fileIt
20、em.getName(); size = fileItem.getSize(); if (!sourceFilePath.equals() & size != 0) sourceFileName = sourceFilePath.substring(sourceFilePath.lastIndexOf() + 1); fileExt = sourceFileName.substring(sourceFileName.lastIndexOf(.) + 1); long systemTime=System.currentTimeMillis(); filePath=uploadPath+/+sys
21、temTime+.+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.getFiel
22、dName(); 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 filePat
23、h=(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.
24、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;
25、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.j
26、avapackage 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 sq
27、l=update files set hits=hits+1 where id=?;db.update(sql, new Objectid);控制器层的servlet.DownLoadServlet类用于处理用户的下载请求,完成下载文件信息的获取,调用util.FileUtil类的下载方法完成文件的下载动作,以及更新文件的下载次数。 文件名:DownLoadServlet.javapackage servlets;import util.*;import java.io.*;import java.util.*;import javax.servlet.*;import javax.servl
28、et.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 respons
29、e)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 普通用户功能的实现 普通用户功能包括浏览排行榜、浏览所有信息、分类浏览和分类
30、搜索。 A.模型层的实现 实现普通用户功能的业务逻辑被封装在模型层的service.UserService类中,包括获得下载次数排名前10位的数据信息、获得数据库中所有的信息、获得指定分类的数据信息、获得指定分类和指定名称的数据信息等。 文件名:UserService.javapackage 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);