实验报告Web技术.docx
《实验报告Web技术.docx》由会员分享,可在线阅读,更多相关《实验报告Web技术.docx(19页珍藏版)》请在冰豆网上搜索。
![实验报告Web技术.docx](https://file1.bdocx.com/fileroot1/2023-7/12/73f684c5-3504-48e5-b6ee-83f9719b8968/73f684c5-3504-48e5-b6ee-83f9719b89681.gif)
实验报告Web技术
课内实验报告
课程名:
Web技术
任课教师:
吴振宇
专业:
物联网工程
成绩:
2015/2016学年第1学期
南京邮电大学
基于JSP的网上书城设计与实现
一、实验描述
1、需求分析
随着计算机网络技术的飞速发展和人们生活节奏的不断加快,电子商务技术已经逐渐融入了人们的日常生活当中,网上商城作为电子商务最普遍的一种形式,已被大众逐渐接受。
因此开发一个网上商城系统,适合当今形势,更加方便人们在线购物。
2、分工:
负责实现图书选购、购物车功能、收藏功能、查看图书详细信息、用户注册、用户登录、查看用户的订单信息、修改用户个人信息。
负责实现现有图书管理:
修改,删除,查看、用户管理:
查看,修改,删除、订单管理:
查看订单清单,更新订单付款,出货状态,删除订单、添加新图书、添加图书分类。
负责书写实验报告。
二、实验内容
1、总体设计
(1)系统设计
本系统采用三层架构设计,它的工作原理如下图所示。
三层架构模型
采用三层构架以后,用户界面层通过统一的接口向业务层发送请求,业务层按自己的逻辑规则将请求处理之后进行数据库操作,然后将数据库返回的数据封装成类的形式返回给用户界面层
(2)系统流程
前台系统流程图
后台系统流程图
(3)数据库设计
数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率,以及实现的效果产生影响。
合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。
数据库需求分析
针对一般在线书店的需求,得出如下需求信息。
1.用户分为未注册用户和已注册用户。
2.订单分为单张详细订单和总订单。
3.一个用户可以购买多本图书。
4.一个用户对应一张订单。
5.一个列表对应多张订单。
针对本系统功能分析,总结出如下的需求信息。
1.用户,包括数据项:
用户ID、用户名、密码。
2.图书,包括数据项:
图书编号、图书名、价格、图书介绍。
3.订单列表,包括数据项:
订单编号、图书编号、购书数量。
4.订单,包括数据项:
订单编号、用户编号、下单时间。
从本系统中规划出的实体有:
用户实体、图书实体、订单实体、订单列表实体。
实体关系E-R图
商品实体E-R图
用户实体E-R图
订单实体E-R图
2、详细设计
系统概述
前台主要功能介绍:
①搜索商品:
用户不用登录可以输入商品的名称来查看需要查询的商品,而且可以查看商品的详细信息,如生产厂商、剩余数量、介绍等。
②分类查询:
用户可以按分类来查看该分类的商品。
③用户注册:
用户可以输入注册信息来注册,用户可以检查用户名是否存在,用户注册信息没有错误则可正确注册(不要使用中文名称来注册)。
④用户登录:
用户输入登录名和密码进行登录,如果用户名和密码错误无法登录。
⑤更新信息:
用户登录后可以查看个人信息并更新个人信息,还可以修改密码。
⑥购物车:
用户登录后就可以购物,可以把商品添加到购物车,或者把商品从购物车删除,如果商品数量为0则无法添加到购物车。
⑦提交订单:
用户把商品添加到购物车后即可提交订单,订单提交后用户可以进行付款(本系统为用户模拟了一个账户,用于用户购物,用户账户余额不足则无法付款)。
⑧查看订单:
用户可以查看自己的订单。
后台主要功能介绍:
①商品种类管理:
管理登录后台后可以对商品种类进行添加、删除。
添加时如果商品种类已经存在会提示添加错误。
②商品管理:
管理员对商品进行添加、删除操作,如果商品已经存在,添加时会提示商品已经存在。
③订单管理:
管理员可以查询订单,查看所有订单信息。
④用户管理:
管理员可以查询用户,管理用户信息。
⑤系统管理:
管理员可以修改登录密码,安全退出。
功能展示及说明
客户界面设计与实现
1).界面头和界面尾设计
他们的效果如下图:
主界面显示效果
2).用户登录模块的设计
为了检验用户是否合法,所以需要输入用户名和密码来验证用户的合法性,用户登录模块刚好完成这样的一个功能。
该模块需要用到LoginAction.java这个servlet。
需要设计一个表单让用户输入信息。
效果图如下:
用户登录界面
要实现登陆功能,首先要连接数据库,把数据库中的用户信息与表单中获取的信进行验证,数据库连接的代码如下:
packagecom.albert.bs.user.action.user;
importjava.util.List;
importjava.util.Map;
importjavax.servlet.http.Cookie;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts2.ServletActionContext;
importcom.albert.bs.constant.UserStatus;
importcom.albert.bs.model.Cart;
importcom.albert.bs.model.Course;
importcom.albert.bs.model.Product;
importcom.albert.bs.model.SessionContainer;
importcom.albert.bs.model.User;
importcom.albert.bs.service.CourseService;
importcom.albert.bs.service.ProductService;
importcom.albert.bs.service.UserService;
importcom.albert.bs.user.action.UserAction;
importcom.albert.bs.util.MD5Util;
importcom.opensymphony.xwork2.ActionContext;
publicclassLoginActionextendsUserAction{
privatestaticfinallongserialVersionUID=-4357525212351724516L;
privateStringusername;
privateStringpassword;
privateStringvalidcode;
privateStringrememberPsw;
privateUserServiceuserService;
privateProductServiceproductService;
privateCourseServicecourseService;
@SuppressWarnings("unchecked")
publicStringexecute()throwsException{
Mapsession=ActionContext.getContext().getSession();
SessionContainercontainer=(SessionContainer)session.get("container");
Stringvc=container.getValidationCode();
if(vc!
=null&&!
validcode.equalsIgnoreCase(vc)){
this.addFieldError("validcode",getText("validationcode.error"));
returnLOGIN;
}
Useruser=userService.login(username,MD5Util.encrypt(password));
if(user!
=null&&user.getStatus()!
=null&&user.getStatus()==UserStatus.STOPPED){
this.addActionError(getText("user.stopped"));
returnLOGIN;
}
if(user!
=null&&user.getUserId()!
=null&&!
user.getUserId().equals("")){
container.setUser(user);
Cartcart=container.getCart();
if(cart==null){
cart=newCart();
}
Listproducts=cart.getProducts();
ListoldProducts=productService.getProducts(user.getUserId());
if(oldProducts.size()>0){
if(cart==null){
cart=newCart();
}
}
cart.setProducts(oldProducts);
intflag=0;
if(products.size()>0){
for(Productproduct:
products){
for(Productop:
oldProducts){
if(product.getBook().getBookId().equals(op.getBook().getBookId())){
op.setQuantity(op.getQuantity()+product.getQuantity());
productService.changeQuantity(op);
cart.setProducts(oldProducts);
flag=1;
}
}
if(flag==0){
product.setUser(container.getUser());
productService.add(product);
cart.getProducts().add(product);
}
}
}
container.setCart(cart);
session.put("container",container);
Coursecourse=container.getCourse();
if(course==null){
course=newCourse();
course=courseService.findById(user.getUserId());
}
container.setCourse(course);
session.put("container",container);
if(rememberPsw!
=null&&rememberPsw.equals("yes")){
addCookie("userId",user.getUserId());
}
StringlastUrl=(String)session.get("lastUrl");
if(lastUrl!
=null&&!
lastUrl.equals("")){
HttpServletResponseresponse=ServletActionContext.getResponse();
session.put("lastUrl",null);
StringlastUrlParam=(String)session.get("lastUrlParam");
if(lastUrlParam!
=null&&!
lastUrlParam.equals("")){
session.put("lastUrlParam",null);
response.sendRedirect(lastUrl+lastUrlParam);
}else{
response.sendRedirect(lastUrl);
}
returnnull;
}
returnSUCCESS;
}else{
this.addActionError(getText("nameorpsw.error"));
}
returnLOGIN;
}
publicvoidaddCookie(Stringname,Stringvalue){
Cookiecookie=newCookie(name,value);
cookie.setMaxAge(365*24*60*60);
ServletActionContext.getResponse().addCookie(cookie);
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringgetValidcode(){
returnvalidcode;
}
publicvoidsetValidcode(Stringvalidcode){
this.validcode=validcode;
}
publicStringgetRememberPsw(){
returnrememberPsw;
}
publicvoidsetRememberPsw(StringrememberPsw){
this.rememberPsw=rememberPsw;
}
publicUserServicegetUserService(){
returnuserService;
}
publicvoidsetUserService(UserServiceuserService){
this.userService=userService;
}
publicProductServicegetProductService(){
returnproductService;
}
publicvoidsetProductService(ProductServiceproductService){
this.productService=productService;
}
publicCourseServicegetCourseService(){
returncourseService;
}
publicvoidsetCourseService(CourseServicecourseService){
this.courseService=courseService;
}
}
3).在线购书功能模块设计
用户可以查找书通过分类,关键字查看图书的详细资料。
效果如下图所示:
在线购书模块效果显示
BuyBookAction.java核心代码如下:
publicclassBuyBookActionextendsUserAction{
privatestaticfinallongserialVersionUID=-1745435427907652812L;
privateIntegerbookCount;
privateStringbookId;
privateBookServicebookService;
privateRecipientServicerecipientService;
@SuppressWarnings("unchecked")
publicStringexecute()throwsException{
Mapsession=ActionContext.getContext().getSession();
Maprequest=(Map)ActionContext.getContext().get("request");
SessionContainercontainer=(SessionContainer)session.get("container");
Bookbook=bookService.findById(bookId);
Listrecipients=recipientService.findAll(container.getUser().getUserId());
intstock=bookService.getStock(bookId);
if(bookCount>stock){
bookCount=stock;
}
request.put("recipients",recipients);
request.put("book",book);
request.put("bookCount",bookCount);
returnSUCCESS;
}
publicvoidvalidate(){
if(bookCount==null||bookCount<1){
this.addActionError(getText("buybook.quantity.error"));
}
}
publicIntegergetBookCount(){
returnbookCount;
}
publicvoidsetBookCount(IntegerbookCount){
this.bookCount=bookCount;
}
publicStringgetBookId(){
returnbookId;
}
publicvoidsetBookId(StringbookId){
this.bookId=bookId;
}
publicBookServicegetBookService(){
returnbookService;
}
publicvoidsetBookService(BookServicebookService){
this.bookService=bookService;
}
publicRecipientServicegetRecipientService(){
returnrecipientService;
}
publicvoidsetRecipientService(RecipientServicerecipientService){
this.recipientService=recipientService;
}
}
4).购物车模块页面设计
在购物车这个模块当中用户可以修改购买数量,可以删除已选图书,可以提交购物车,也可以清空购物车,同时也可以继续购书。
该模块运行时效果如图4-4所示:
购物车模块显示效果
AddCartAction.java核心代码如下:
publicclassAddCartActionextendsUserAction{
privatestaticfinallongserialVersionUID=-3429382993581128981L;
privateStringbookId;
privateProductServiceproductService;
@SuppressWarnings("unchecked")
publicStringexecute()throwsException{
SessionContainercontainer=null;
Mapsession=ActionContext.getContext().getSession();
if(session.get("container")==null){
container=newSessionContainer();
}else{
container=(SessionContainer)session.get("container");
}
Cartcart=container.getCart();
if(cart==null){
cart=newCart();
}
Listproducts=cart.getProducts();
intflag=0;
for(Productproduct:
products){
if(product.getBook().getBookId().equals(bookId)){
product.setQuantity(product.getQuantity()+1);
if(container.getUser()!
=null&&container.getUser().getUserId()!
=null){
productService.changeQuantity(product);
}
cart.setProducts(products);
flag=1;
break;
}
}
if(flag==0){
Productp=newProduct();
p.setBook(newBook(bookId));
if(container.getUser()!
=null&&container.