JavaWeb之项目练习(十)

简介

这两个项目是前期所学的知识综合,结合MVC思想完成的小项目。这里只写了类似伪代码的思路。没有提供代码,因为代码很多,没有思路来得实际。做完这两个项目心得就是,初期学这个没有一下敲出来的。只有不断的反复练习才能掌握

用户注册案例

1. 搭建环境
	1.1 导开发包
	dom4j开发包
	BeanUtils开发包/logging
	jstl开发包
	
	1.2 创建组织包
	com.itheima.domain
	com.itheima.dao
	com.itheima.dao.impl
	com.itheima.service
	com.itheima.service.impl
	com.itheima.web.controller
	com.itheima.utils
	junit.test
	
	WEB-INF/jsp		放所有网站jsp
	
	1.3 创建代表数据库xml文件

开发前奏
导包 BeanUtils/logging		Dom4J/jaxen		jstl/standard
1. users.xml作为数据库存储文件
2. 定义User实体类
	private String id;
	private String username;
	private String password;
	private String email;
	private Date birthday;
	private String nickname;
3. 操作实体类
4. 定义接口UserDao-->定义实现类UserDaoImpl(判断是否存在这个用户)
		-->定义工具类操作xml文件Dom4JUtils
5. 定义业务逻辑,为上一层提供服务UserService接口--->UserServiceImpl

界面:
	主页index.jsp(判断是否有user登录c:if标签)
	登录页login.jsp(隐藏域设置操作信息,目的为了地址栏不显示请求参数)
	注册页register.jsp (注册表单 value-<span区域显示错误信息>)/隐藏域设置id

UserFormBean类
	private String id;
	private String username;
	private String password;
	private String repass;
	private String email;
	private String birthday;
	private String nickname;
	private Map<String,String> errorMsg = new HashMap<String,String>();
	
	validate()方法
	
ControllerServlet类
1. 解决表单乱码问题
2. 获取操作类型参数
	2.1 用户登录操作
		2.1.1 获取用户名和密码的值
		2.1.2 调用业务逻辑(判断是否登录成功)
		2.1.3 如果登录成功,将用户信息存储session中,重定向首页
			否则失败,提示信息,并跳到登录
			
	2.2 注册操作
		2.2.1 注册页面输入的值填充到UserFormBean对象中
			建立一个WebUtils工具类,定义填充的fillBean方法
		2.2.2
			验证业务实体类(formBean类)是否有效(validate),不为空说明有问题
				将formbean设置request域中--->转发到register.jsp当前页面
				方法结束
		2.2.3
			ConvertUtils---(DateLocaleConverter,Date.class)
			将formBean的数据拷贝到user中(拷贝前要注册日期,否则类型不一致)
			注册日期方式2.
				ConvertUtils中register方法重写Converter方法
				1. 判断是否为空 2. 强转string类型判断是否为""
				3. 创建一个日期格式化类		4. 然后解析成日期格式返回
		2.2.4
			业务逻辑实现注册用户,提示注册成功,1秒后跳到登录页面
			否则就是用户名已存在,将错误信息添加到集合中,在request域中设置formBean,转发到当前注册页面
	2.3 注销操作
		2.3.1
			将用户信息移除
			重定向到首页
			
	总结: 涉及到request域使用转发	涉及到session域使用重定向	有跳转需求设置刷新头信息


页面设计
1. 主页index.jsp使用标签库中c:if标签判断user是否为空,如果不为空就显示欢迎提示
如果为空就显示登录和注册提示
2. 登录页login.jsp,登录表单提交到控制器中,隐藏域设置提交方式
3. 注册页register.jsp, 日期控件使用方式
	3.1 Birthday-Calendar.js日历控件的使用
	<script type="text/javascript" src="${pageContext.request.contextPath}/js/Birthday-Calendar.js"></script>
	<input readonly="readonly" οnclick="new Calendar().show(this);" type="text" name="birthday" />
	3.2 span区域和输入框中使用el表达式获取session中的值

 

 

购物车代码思路

前期准备
	DB/domain/dao/service/controller/UI
	2. 开发dao	3. 开发service	4. 开发web
	
1. 用DB类模拟书籍数据库	
	1.1 DB类
	Map--->LinkedHashMap
	map.put("1", new Book("1","javaweb开发","老张",38,"一本好书"));
	map.put("2", new Book("2","jdbc开发","老黎",18,"一本好书"));
	map.put("3", new Book("3","ajax开发","老毕",328,"一本好书"));
	map.put("4", new Book("4","jbpm开发","老方",58,"一本好书"));
	map.put("5", new Book("5","struts开发","老张",28,"一本好书"));
	map.put("6", new Book("6","spring开发","老黎",98,"一本好书"));
	---getAll()方法--获取所有书籍
	1.2 ----Book类-----
		private String id;
		private String name;
		private String author;
		private int price;
		private String description;
	
2. 定义数据访问层的		类BookDaoImpl,其实就是两个方法
	2.1 获取所有书籍返回map
	2.2 根据id返回这本书
	
3. 	购物车类Cart/
	private Map<String,CartItem> map = new LinkedHashMap();(存储书的id和购物项)
	private double price;	购物车所有商品的总价
		getPrice()----totalprice--->遍历map集合中所有购买项,每个购买项相加得到总价
	public void add(Book book)
		通过书的id获取购物项---map.get(book.getId());
		如果购物项为空
			创建一个购物项-->将book添加到购物项(setBook)--->数量quantity为1
		否则
			直接修改数量setQuantity(item.getQuantity()+1);
4.  购物项类CartItem
	private Book book;
	private int quantity;
		注意在设置数量时,同时要修改价格
		price = getPrice()*quantity
	private double price;

5. 业务逻辑处理
BusinessServiceImpl类
	1. 获取所有书籍/通过书籍id查找书
	2. 删除购物车中的购物项--id,card
	3. 清空购物车cart
	4. 修改购物车中的数量--首先根据指定id得到购物项,然后在购物项中修改数量id,cart,quantity
	
6. 	UI页面转发类 ListCartUIServlet
	转发到购物车页面getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward();
	
7.  Web控制层写个总控制器ControllerServlet
	
	1). 首先将客户端请求的操作类型获取到使用op保存
	2). 通过session域获取购物车(购物车在购买时创建)
	3). 获取请求书籍的id,方便操作这本书籍
	if("showbooks".equals(op)) {
		showbooks(request,response);
		request.getRequestDispatcher("/WEB-INF/jsp/listbook.jsp").forward(request, response);
		return;
	} else if("buy".equals(op)) {
		buy(request,response, cart,id);
	} else if("change".equals(op)) {
		change(request,response,cart,id);
	} else if("delete".equals(op)) {
		delete(request,response,cart,id);
	} else if("clear".equals(op)) {
		clear(request,response,cart);
	}
	
	7.1 请求显示所有书籍showBooks
		获取所有书的集合,将集合设置到request域中
		重定向到listbook.jsp页面上
	7.2 请求购买操作类型buy
		2). 业务逻辑层通过请求的id实现查找书籍
		3). 通过session域得到购物车
		4). 如果购物车为空,创建购物车,将该购物车设置到session域中
		5). 把书籍添加到购物车中
	7.3 请求删除类型
		3). 业务逻辑实现通过id删除购物项
	7.4 请求清空类型
		2). 业务逻辑实现通过购物车清空购物车所有书籍
	7.5 请求修改类型
		1). 获取修改的数量
		3). 业务逻辑实现通过购物车,id,修改数量
				
		
	
页面设计
1. index.jsp浏览书籍-->超链接到-->ControllerServlet类,请求参数为showBooks
2. listbook.jsp书籍页面-->*头部*:书名/作者/售价/描述/操作
	遍历map集合显示所有书籍:(操作-->超链接到购买页将id发给ControllerServlet类,请求参数为buy)
3. 购物车页面listcart.jsp
	3.1 判断购物车是否有书籍,没有书籍就直接输出没有购买任何商品
	3.2. 否则就将购物车表单详情显示出来
		*头部*: 书名/作者/单价/数量/小计/操作
		forEach遍历购物车中的书籍cart.map
		1). *(操作-->删除操作-->(超链接javascript:void(0))-->点击事件deletItem(entry.key书的id传过去))
			通过window.confirm确定是否删除,若删除就window.location.href=ControllerServlet?id='"+id+"'",请求参数类型为delete
		2). *****(quantity数量可以手工录入--->改变事件changeQuantity(this,书id,书数量)****
			1>.定义变量接收数量的值   判断录入的数量是否小于0 或者quantity!=parseInt(quantity),
			若成立提示信息,将老值赋给value,直接返回
			2>.window.confirm否则提示确认修改数量+quantity
				window.location.href若确认ControllerServlet?id="+id+"&quantity="+quantity;,请求参数类型为change
		3).**尾部**: 
			总价---->cart.price
			(清空购物车超链接javascript:void(0))--->点击事件clearcart();
			通过window.confirm确定是否删除,若删除就window.location.href="ControllerServlet",请求参数类型为clear
		

转载于:https://www.cnblogs.com/codingpark/p/4251544.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值