JAVAWEB课程设计实验报告
目录
第一章 概述.......................................... 3
【实验目的】....................................... 3
【需求分析】....................................... 3
第二章 网上商店结构分析与设计.......................... 3
【前言】........................................... 3
2.1 系统结构图..................................... 4
2.2系统功能分析.................................... 4
第三章 详细设计....................................... 5
3.1数据库设计...................................... 5
3.2 商品模块实现.................................. 6
3.2.1 模块功能实现和关键代码说明................ 6
3.3 用户注册/登录模块实现.......................... 10
3.3.1 模块功能实现和关键代码说明............... 10
3.4 购物车模块实现................................ 13
3.4.1 模块功能实现和关键代码说明............... 13
3.5 结算功能模块.................................. 16
第四章 总结.......................................... 18
【技术总结】...................................... 18
【心得体会】...................................... 18
第一章 概述
【实验目的】
1.掌握java-web网站设计的全过程;
2.进一步熟练Servlet技术、数据库、标签等一般java-web应用技术;
3.掌握整个java-web应用架构、目录结构以及服务器使用。
【需求分析】
1.设计一个较完善的网上军靴商店;
2.账户模块:提供用户注册、登录,考虑用户数量增减,需要用数据库技术;
3.商品显示模块:出于增加销售量考虑,需要有简单广告功能,并提供商品详细参数;推广商品,网站需要对热销商品展示以及商品分类显示、商品查询;
4.订单管理模块、订单详细信息模块:显示已保存的订单的详细信息;
5.购物车模块:添加/删除商品,结帐,显示订单信息。
第二章 网上商店结构分析与设计
【前言】
随着信息化技术在生活中的应用越来越广泛,网上购物也逐渐成为人们的一种生活方式。本系统正是基于这样一种环境下应运而生。本电子商城为前台部分,前台主要实现会员的网上购物业务流程、用户注册、用户资料修改。
本商城主要利用javaservlet技术进行开发,有很强的逻辑性、可扩展性,便于维护。商城界面设计主要实用了CSS,美化了店面。其次本商城设计还使用了JSP技术、JDBC技术、JavaBean技术、css。
2.1 系统结构图
图2.1 系统整体框图
2.2系统功能分析
新品上市模块:在首页框架中显示新品列表
畅销商品模块:在首页框架中显示畅销列表
购物车模块:显示已点击购买但没结账的商品
结账模块:直接显示当前订单
查看商品信息模块:显示当前商品详细信息
商品分类模块:分类显示商品
全部商品模块:显示商品列表
查询商品模块:搜寻商品,显示商品信息
用户注册模块:实现用户注册统功能分析
第三章 详细设计
3.1数据库设计
商品表(shoe)
用户表(user)
用户订单表(orderinfo)
3.2 商品模块实现
3.2.1 模块功能实现和关键代码说明
先由JSP页面发出请求调用mypack包下GetshoeServlet,调用里面的 doGet方法,然后调用db.executeQuery(sql)方法,查询数据库,查到热销商品的列表,保存进requeset对象的resault变量里,然后通过调用取出其中的值,显示到主页面。商品查询模块按商品ID、关键词查询,商品显示模块使用同样方法根据不同条件查询数据库。
主要代码如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String typeId = req.getParameter("typeId");
String shoeId = req.getParameter("shoeId");
String keyword = req.getParameter("keyword");
String sql = "select * from shoe";
String sql1 = "select * from shoe where typeId = ?";
String sql2 = "select * from shoe where shoeId = ?";
List shoelist = new ArrayList();
HttpSession session = req.getSession();
BookDB db = null;
CachedRowSet result = null;
try {
db = new BookDB();
if(typeId != null){
if(typeId.equals("0")){
result = db.executeQuery(sql);
}else{
result = db.executeQuery(sql1, typeId);
}
while(result.next()){
Shoe shoe = new Shoe();
shoe.setType(result.getString(1));
shoe.setShoeId(result.getInt(2));
shoe.setName(result.getString(3));
shoe.setPrice(result.getFloat(4));
shoelist.add(shoe);
}
session.setAttribute("shoelist", shoelist);
resp.sendRedirect(req.getContextPath()+"/catalog.jsp");
}
if(shoeId != null){
result = db.executeQuery(sql2, Integer.parseInt(shoeId));
if(result.next()){
Shoe shoeDetail = new Shoe();
shoeDetail.setType(result.getString(1));
shoeDetail.setShoeId(result.getInt(2));
shoeDetail.setName(result.getString(3));
shoeDetail.setPrice(result.getFloat(4));
shoeDetail.setSale_amount(result.getInt(5));
session.setAttribute("shoedetail", shoeDetail);
}
resp.sendRedirect(req.getContextPath()+"/shoedetail.jsp");
}
if(keyword != null){
result = db.executeQuery(sql);
while(result.next()){
if(result.getString(3).contains(keyword)){
Shoe shoe = new Shoe();
shoe.setType(result.getString(1));
shoe.setShoeId(result.getInt(2));
shoe.setName(result.getString(3));
shoe.setPrice(result.getFloat(4));
shoelist.add(shoe);
}
}
session.setAttribute("shoelist", shoelist);
resp.sendRedirect(req.getContextPath()+"/catalog.jsp");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.3 用户注册/登录模块实现
3.3.1 模块功能实现和关键代码说明
先由JSP页面发出请求调用mypack包下UserRegistServlet/UserLoginServlet,调用里面的 doGet方法,然后调用db.executeQuery(sql1, username, password)方法,更新数据库。
主要代码如下:
登录(UserLoginServlet):
HttpSession session = req.getSession();
try {
db = new BookDB();
result = db.executeQuery(sql1, username, password);
if (result.next()) {
user = new User();
user.setUsername(result.getString(1));
user.setPassword(result.getString(2));
user.setMail(result.getString(3));
user.setTel(result.getString(4));
session.setAttribute("user", user);
resp.sendRedirect(req.getContextPath() + "/index.jsp");
} else {
resp.sendRedirect(req.getContextPath() + "/login.jsp?statu=no");
}
注册(UserRegistServlet):
String username = req.getParameter("username");
String password = req.getParameter("password");
String mail = req.getParameter("mail");
String tel = req.getParameter("tel");
String sql1 = "select * from user where username = ?";
String sql2 = "insert into user values(?, ?, ?, ?)";
BookDB db;
CachedRowSet result = null;
try {
db = new BookDB();
result = db.executeQuery(sql1, username);
if(result.next()){
resp.sendRedirect(req.getContextPath()+"/regist.jsp?statu=no");
}else{
db.executeUpdata(sql2, username, password, mail, tel);
resp.sendRedirect(req.getContextPath()+"/regist.jsp?statu=ok");
}
3.4 购物车模块实现
3.4.1 模块功能实现和关键代码说明
先由JSP页面发出请求调用org.action包下的findId方法,findId调用DaoImpl包里的findOrderById,把得到的结果,保存到session里取名order1通过orderdetail里取变量得到这个值,显示到主页面。
主要代码如下:
Add()方法:
public synchronized void add(String shoeId, Shoe shoe) {
if(items.containsKey(shoeId)) {
ShoppingCartItem scitem = (ShoppingCartItem) items.get(shoeId);
scitem.incrementQuantity();
} else {
ShoppingCartItem newItem = new ShoppingCartItem(shoe);
items.put(shoeId, newItem);
}
numberOfItems++;
}
Remove()方法:
public synchronized void remove(String shoeId) {
if(items.containsKey(shoeId)) {
ShoppingCartItem scitem = (ShoppingCartItem) items.get(shoeId);
scitem.decrementQuantity();
if(scitem.getQuantity() <= 0)
items.remove(shoeId);
numberOfItems--;
}
}
Gettotal()方法:
public synchronized double getTotal() {
double amount = 0.0;
for(Iterator i = getItems().iterator(); i.hasNext(); ) {
ShoppingCartItem item = (ShoppingCartItem) i.next();
Shoe shoe = (Shoe) item.getItem();
amount += item.getQuantity() * shoe.getPrice();
}
return roundOff(amount);
}
private double roundOff(double x) {
long val = Math.round(x*100); // cents
return val/100.0;
}
public synchronized void clear() {
items.clear();
numberOfItems = 0;
}
}
3.5 结算功能模块
从showcart.jsp转到cashier.jsp,调用HandleOrderServlet的db.buyBooks(cart)方法和db.executeUpdata( )方法更新数据库。
主要代码如下:
String sql = "insert into orderinfo values(?, ?, ?, ?, ?)";
BookDB db;
try {
db = new BookDB();
db.buyBooks(cart);
db.executeUpdata(sql, orderId,username, cardname, cardnum, payment);
resp.sendRedirect(req.getContextPath()+"/cashier.jsp?makeorder=ok");
} catch (Exception e) {
.printStackTrace();
}
第四章 总结
【技术总结】
1.一个Servlet往往对应了不同的操作,一个对象的增删改查,都放在了一个Servlet里面实现,这样设计可有效减少Servlet数量;
2.对于网页页面效果要求较高的时候,多采用JSP来编写,对于后台处理要求较高时,多采用Servlet。
3.尽量使用和数据库版本一致的驱动,否则jdbc连接可能不正常;
4. 在编写样式表之前一定要注意CSS文档的编码类型一定要和HTML文档的字符集类型一致。
【心得体会】
通过这次课程设计,使我加深了对javaweb应用结构的理解,掌握了javaweb应用设计的流程及各个模块间协同关系,学会了使用css美化个人设计。