软件三层设计入门-表单校验,购物车

1.搭建开发环境
        1.1 导入项目所需的开发包
                dom4j-1.6.1.jar
                jaxen-1.1-beta-6.jar
                commons-beanutils-1.8.0.jar
                commons-logging.jar
                jstl.jar
                standard.jar

         1.2 创建程序的包名
                cn.itcast.domain
                cn.itcast.dao
                cn.itcast.dao.impl
                cn.itcast.service
                cn.itcast.service.impl
                cn.itcast.web.controller  
                cn.itcast.web.UI  (user interface)(放为用户提供用户界面的servlet)
                cn.itcast.utils
                junit.test

                在web-inf\jsp目录,保存jsp页面

          1.3 在类目录下面,创建用于保存用户数据的xml文件(users.xml)


2、开发实体user
        private String id;
        private String username;
        private String password;
        private String email;
        private Date birthday;

3、开发dao
       3.1  开发UserDaoXmlImpl
            public void add(User user)
            public User find(String username)
            public User find(String username,String password)

       3.2  抽取接口

       3.3  开发工具类: XmlUtils 
       3.4  开发测试类


4、开发service(service 对web层提供所有的业务服务)
        4.1  开发BusinessService
  public void registerUser(User user) throws UserExistException
  public User loginUser(String username,String password);
 
 
 5、开发web层
  5.1 开发注册
  5.1.1  写一个RegisterUIServlet为用户提供注册界面,它收到请求,跳到register.jsp
  5.1.2  写register.jsp
  5.1.3  register.jsp提交请求,交给RegisterServlet处理

  5.1.4  写RegisterServlet

  1.设计用于校验表单数据RegisterFormbean 
  2、写WebUtils工具类,封装请求数据到formbean中
  3、如果校验失败跳回到register.jsp,并回显错误信息
  4、如果校验通过,调用service向数据库中注册用户
 
  5.2 开发登陆
  5.2.1   写一个LoginUIServlet为用户提供注册界面,它收到请求,跳到login.jsp

  5.2.2   login.jsp提交给LoginServlet处理登陆请求


校验:

/*
private String username;  用户名不能为空,并且要是3-8的字符 abcdABcd
private String password;  密码不能为空,并且要是3-8的数字
private String password2; 两次密码要一致
private String email;     可以为空,不为空要是一个合法的邮箱
private String birthday;  可以为空,不为空时,要是一个合法的日期
 * 
 */
public boolean validate(){
	
	boolean isOk = true;
	
	if(this.username==null || this.username.trim().equals("") ){
		isOk = false;
		errors.put("username", "用户名不能为空!!");
	}else{
		if(!this.username.matches("[a-zA-Z]{3,8}")){
			isOk = false;
			errors.put("username", "用户名必须是3-8位的字母!!");
		}
	}
	
	
	if(this.password==null || this.password.trim().equals("")){
		isOk = false;
		errors.put("password", "密码不能为空!!");
	}else{
		if(!this.password.matches("\\d{3,8}")){
			isOk = false;
			errors.put("password", "密码必须是3-8位的数字!!");
		}
	}
	
	//private String password2; 两次密码要一致
	if(this.password2!=null){
		if(!this.password2.equals(this.password)){
			isOk = false;
			errors.put("password2", "两次密码不一致!!");
		}
	}
	
	//private String email;     可以为空,不为空要是一个合法的邮箱
	// flx_itcast@sina.com.cn
	if(this.email!=null){
		if(!this.email.matches("\\w+@\\w+(\\.\\w+)+")){
			isOk = false;
			errors.put("email", "邮箱不是一个合法邮箱!!");
		}
	}
	
	
	//private String birthday;  可以为空,不为空时,要是一个合法的日期
	if(this.birthday!=null){
		try{
			DateLocaleConverter conver = new DateLocaleConverter();
			conver.convert(this.birthday);
		}catch (Exception e) {
			isOk = false;
			errors.put("birthday", "生日必须要是一个日期!!");
		}
	}
	
	return isOk;
} 				


数据封装:

package cn.itcast.utils;

import java.util.Enumeration;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;

public class WebUtils {

	//把request对象中的请求参数封装到bean中
	public static <T> T request2Bean(HttpServletRequest request,Class<T> clazz){
		try{
			
			T bean = clazz.newInstance();
			//username=aa password=bb email=aa@sina.com
			Enumeration e = request.getParameterNames(); 
			while(e.hasMoreElements()){
				String name = (String) e.nextElement();  //username=aaa password=123
				String value = request.getParameter(name);
				BeanUtils.setProperty(bean, name, value);
			}
			return bean;
		}catch (Exception e) {
			throw new RuntimeException(e);
		}
		
	}
	
	
	public static String makeId(){
		//UUID   128 36位字符
		
		return UUID.randomUUID().toString();
	}
	
}


购物车案例:
购物车:
package cn.itcast.domain;

import java.util.LinkedHashMap;
import java.util.Map;

//代表购物车
public class Cart {

	//用于保存购物车中所有商品
	private Map<String,CartItem> map = new LinkedHashMap();
	private double price;  //0
	
	public void add(Book book){  //javaweb
		
		CartItem item = map.get(book.getId());
		if(item!=null){
			item.setQuantity(item.getQuantity()+1);
		}else{
			item = new CartItem();
			item.setBook(book);
			item.setQuantity(1);
			map.put(book.getId(), item);
		}
		
	}
	
	
	public Map<String, CartItem> getMap() {
		return map;
	}
	public void setMap(Map<String, CartItem> map) {
		this.map = map;
	}
	public double getPrice() {
		double totalprice = 0;
		for(Map.Entry<String,CartItem> me : map.entrySet()){
			CartItem item = me.getValue();
			totalprice += item.getPrice();
		}
		return totalprice;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	
	
	
}

购物项:

package cn.itcast.domain;

//cartItem代表某本书,并表示书出现多少次
public class CartItem {

	private Book book;
	private int quantity;
	private double price;
	
	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
	public int getQuantity() {
		return quantity;
	}
	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}
	public double getPrice() {
		return book.getPrice()*this.quantity;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	
	
	
}













  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值