《web开发课程设计报告.doc》由会员分享,可在线阅读,更多相关《web开发课程设计报告.doc(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Sichuan Top Vocational College of Information Technology课 程 设 计 报 告姓 名: _学 号: _系 别: _专 业: _年 级: _班 级: _指导教师: _ 2015年 月 日 至 2015年 月 日所 在 单 位 :_级_系_专业_班课程设计题目:基于JSP的在线购物系统课程设计目的:1、 掌握JSP的基本语法2、 掌握系统设计中的分层思想,利用JSP页面实现数据展示,Servlet实现业务逻辑,Java Bean实现数据处理3、 掌握MySQL数据库的基本操作,包括创建数据库、表,及对字段的设置,创建视图、存储过程和触发器4、
2、 掌握JSP对MySQL数据库的基本操作,包括连接数据库,插入记录,修改记录,删除记录等5、 了解系统开发的流程课程设计内容要求:1、 系统需求分析2、 系统总体架构3、 数据库设计 E-R图 物理模型,包括用户表、商品表、购物车表 4、系统详细设计 包括:数据库连接、首页和公共页面、用户登陆模块、用户管理模块、购物车模块、支付模块课程设计计划: 1、系统需求分析 1课时2、系统总体架构 1课时3、数据库设计 2课时 4、系统详细设计 12课时 5、课程设计报告 2 课时课程设计报告:(可自行增加页面) 在线购物网站采用JSP+Servlet+JavaBean技术完成,JSP页面负责展示数据,
3、Servlet负责业务逻辑,JavaBean负责数据的处理。这是JSP的小型项目常用的分层思想,也是现在三大框架(Struts、Spring、Hibernate)常用的技术,希望通过此系统的开发掌握这种分层技术,对以后学习大型项目的开发打下基础。 一、需求分析 系统分为4大模块、即用户登录模块、用户管理模块、购物车模块、支付模块,如图所示: 在线购物系统管理首页用户登录模块用户管理模块 购物车模块支付模块用户登录用户登录用户注册信息修改密码修改购物车列表修改购物车删除购物车在线支付1、用户登录模块 用户登录模块的主要功能是判断用户是否登录及用户退出系统的操作。2、用户管理模块用户管理模块负责对
4、注册的用户进行管理,其功能有:用户注册、信息修改、密码修改等操作。3、购物车模块购物车模块负责对已登录用户购买的商品进行管理,其功能有:购物车列表、修改购物车、删除购物车等操作。4、在线支付支付模块负责对购买商品的支付操作。 二、系统总体架构这个简单的网上购物系统,包括4个模块的功能,业务逻辑比较简单,容易理解,采用目前比较流行的3层架构就能解决。 系统的层次结构图如下: 表现层 业务逻辑层 数据层JSP+HTML+JavaScriptServletJavaBean 数据库 系统的流程如图: 已登录 购买 已注册 加入购物车 未注册 注册失败,显示失败消息 注册成功,显示成功消息首页产品介绍页
5、面购买页面购买页面支付页面登录页面注册页面购物车列表三、数据库设计 先构建E-R图,再根据图来创建数据库表、视图等。1、E-R图该系统所涉及的表结构很简单,只有3张表:用户、购物车、商品。如图: 1 n用户购物车商品2、数据物理模型根据E-R图,可以设计出系统的数据物理模型。(1)、用户表字段名称含义数据类型是否主键是否为空是否外键其他约束uid用户名IDint YesNoNoAUTO_INCREMENTuname用户姓名varchar (20)NoNoNopasswd用户登录密码vachar(50)NoNoNoemail用户E-mailVarchar(50)NoNoNolastlogin最后
6、登录时间DatetimeNoNoNo(2)/商品表字段名称含义数据类型是否主键是否为空是否外键其他约束gid物品IDintYesNoNoAUTO_INCREMENTkinds商品类别vachar(50)NoNoNogname商品名称vachar(100)NoNoNogphoto商品照片vachar(100)NoNoNotypes商品类型vachar(100)NoNoNo字段名称含义数据类型是否主键是否为空是否外键其他约束producer生产商varchar(50)NoNoNoprice商品价格float(10,2)NoNoNocarriage商品运费float(10,2)NoNoNopdate
7、生产日期datetimeNoNoNopaddress生产地址vachar(100)NoNoNodescribled商品描述vachar(200)NoNoNo(3)购物车表字段名称含义数据类型是否主键是否为空是否外键其他约束id购物车IDintYesNoAUTO_INCREMENTuid用户IDintNoNoYesgid物品IDintNoNoYesstatus购物车状态1intNoNoNo0: 未支付商品1: 已支付商品 number物品数量intNoNoNo四、系统详细设计1、系统包介绍在线购物系统采用三层架构的模式设计,该系统开发的Java Bean和Servlet类包。action包中存放
8、着对系统所有相关的操作类;dao包中存放的是对系统数据操作的相关类;db包中存放的是对系统数据库链接的相关类;factory包中存放的是对数据实现的相关类;filters包中存放的是系统的Servlet过滤器相关类;pojo包中存放的是系统的Java Bean相关类;service包中存放的是对数据真实操作的相关类;tag包中存放的是系统的自定义标签相关类;utils包中存放的是系统的工具类。有关页面中的相关代码存放在WebRoot目录下。其中common包中存放的是共有的页面;css包中存放的是页面样式;js存放的是页面用到的JavaScript;其他目录是按照各功能模块存放相应的页面。 2
9、、系统的关键技术(1)、数据库连接 数据库连接的主要代码:public void doPost(HttpServletRequest request, HttpServletReponse reponse)throw ServletException,IOExceptionConnection con=null; Statement st=null; ResultSet rs=null;tryClass.forName(“com.myspl.jdbc.Driver”);catch(ClassNotFoundException e)e.printStackTrace(); System.ouy.
10、println(“驱动程序加载错误”) tryCon=DriverManager.getConnnection(“jdbc:mysql:/localhost:3306/testWeb”,”root”,”admin”);st=con.createStatement();rs=st.executeQuery(“select * from person”)reponse.setContentType(“text/html;charset=utf-8”);PrintWrite out=reponse.getWrite();. (2)、系统分页技术 在本系统中运行自定义标签的方式进行分页。首先,定义标签
11、基本类,为的是以后可以将其扩展。其代码如下: .BaseTagSupport.java.import javax.servlet.ServletRequest; import javax.servlet.jsp.tagext.TagSupport;public class BeanTagSupport extends TagSupportprivate static final long serivalVersionUID=1L;protected ServletRequestgetRequest();return pageContext.getrequest();其次在编写分页标签PageT
12、ag。java,其代码public class PageTag extends BaseTagSupport private static final Logger log=Logger.getLogger(PageTag.class); private PageObject object; private String link; private String script;public int dosStartTag() throws JspException intiparams=0,0,0,; Stringsparams=“”,”; If(object!=null&object.get
13、Data()!=null) iparams0=object.getDataCount();iparams1=object.getPageCount();iparams2=object.getCurPage(); if(link!=null&link!=”)sparams0=link ; if(script!=null&script!=”)sparams1=script ; getRequest().setAttribute(“iPageObjectTag”,iparams); getRequest().setAttribute(“sPageObjectTag”,iparams); return
14、 EVAL_BODY_INCLUDE;Public int doEndTag()throws JspExceptiongetRequest().removeAttribute(“iPageObjectTag”); getRequest.removeAttribute(“sPageObjectTag”);return EVAL_PAGE;分页对象PageObject的源代码如下:package com.eshore.tag;import java.util.List;import javax.servlet.http.HttpServletRequest;public class PageObj
15、ect private final int DEFAULT_PAGE_SIZE = 10;/ 默认显示记录数private final int DEFAULT_CUR_SIZE = 1;/ 默认当前页private List data;/ 数据列表private int dataCount;/ 数据总数private int pageSize;/ 显示记录数private int pageCount;/ 总页数private int curPage;/ 当前页public int getCurPage() /获得当前页if (curPage 0) pageCount = dataCount %
16、 pageSize = 0 ? (dataCount / pageSize) : (dataCount / pageSize + 1);return pageCount;public void setPageCount(int pageCount) this.pageCount = pageCount;public int getPageSize() if (pageSize 1) pageSize = DEFAULT_PAGE_SIZE;return pageSize; public void setPageSize(int pageSize) this.pageSize = pageSiz
17、e; public void reqProperty(HttpServletRequest request) String curPage = null, pageSize = null, dataCount = null;curPage = request.getParameter(curPage);/设定当前页数if (curPage != null & curPage != ) try this.curPage = Integer.valueOf(curPage).intValue(); catch (NumberFormatException ex) pageSize = reques
18、t.getParameter(pageSize);/设定每页的显示数量if (pageSize != null & pageSize != ) try this.pageSize = Integer.valueOf(pageSize).intValue(); catch (NumberFormatException ex) ex.printStackTrace();dataCount = request.getParameter(dataCount);/设定总数量if (dataCount != null & dataCount != ) try this.dataCount = Intege
19、r.valueOf(dataCount).intValue(); catch (NumberFormatException ex) ex.printStackTrace(); public int getBeginPoint() /获取开始的数据点return (getCurPage() - 1) * getPageSize(); /获得PageObject对象public static PageObject getInstance(HttpServletRequest request) PageObject pageObject = new PageObject();pageObject.r
20、eqProperty(request);return pageObject; 定义一个标签文件lms.tld,存放在WEB-INF目录下。代码如下:1.01.2lms/lms-tagspagecom.eshore.tag.PageTagJSP分页objecttruetruecom.eshore.tag.PageObjectPageObject对象linktruejava.lang.String转向URL如:scripttruejava.lang.Stringonclick的js function如:doSubmit,必须带一个参数pageNo(要转向的页码) 分页页面page.jsp的代码如下
21、:.page_bg td background:#d9ecf2; height:24px; border-bottom:1px solid #abc4de; 当前没有相关信息! 共有 条记录! 共有 条记录 当前第 页/共 页 到第 页 var pageCount=$iPageObjectTag1;var curPage=$iPageObjectTag2;function toPage(pageNo) if(pageNo0) pa
22、geNo=parseInt(tagCurPage); if(pageNo=curPage | pageNopageCount) return; if($sPageObjectTag1=) window.location=$sPageObjectTag0curPage=+pageNo+&dataCount=+$iPageObjectTag0; else $sPageObjectTag1(pageNo); function myKeyPress(evt) evt = (evt) ? evt : (window.event) ? window.event : ) /兼容IE和Firefox获
23、得keyBoardEvent对象 var key = evt.keyCode?evt.keyCode:evt.which; /兼容IE和Firefox获得keyBoardEvent对象的键值 if(key 57) return false; (3)、自定义版权标签 package com.eshore.tag;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.t
24、agext.BodyContent;import javax.servlet.jsp.tagext.BodyTagSupport;public class CopyRightTag extends BodyTagSupportprivate static final long serialVersionUID = 1L;private String user;private String startY; public int doStartTag() SimpleDateFormat sdf = new SimpleDateFormat(yyyy); String endY = sdf.for
25、mat(new Date(); String copyRight = user+ 版权所有 copyright +startY+-+endY; try pageContext.getOut().print(copyRight); catch (IOException e) e.printStackTrace(); return EVAL_PAGE; public int doAfterBody() /取得标签体 BodyContent bc = getBodyContent(); JspWriter out = getPreviousOut(); try /将标
26、签体中的内容写入到JSP页面中 out.write(bc.getString(); catch(IOException e) e.printStackTrace(); return EVAL_BODY_AGAIN; public int doEndTag() return EVAL_PAGE; public void setUser(String user) this.user = user;public void setStartY(String startY) this.startY = startY; (4)、业务操作类定义一个DAOFavtory,获取各个业务的数据操作方法。 pack
27、age com.eshore.factory;import com.eshore.dao.ShoppingCartDao;import com.eshore.dao.GoodDao;import com.eshore.dao.UserDao;import com.eshore.service.ShoppingCartService;import com.eshore.service.GoodService;import com.eshore.service.UsersService;public class DAOFactory /取得Good业务操作类public static GoodDa
28、o getGoodDAOInstance()throws Exception return new GoodService(); /取得shoppingcart业务操作类public static ShoppingCartDao getShoppingCartDAOInstance()throws Exception return new ShoppingCartService(); /取得用户业务操作类public static UserDao getUserDAOInstance()throws Exception return new UsersService(); 3、过滤器(1)、字
29、符过滤器 package com.eshore.filters;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;WebFilter(description = 字符编码过滤器, filterName = encodingFilter, urlPatterns = /* ,initParams = WebInitParam(name = ENCODING,