Java web基础知识 尾声 一个项目如何进行需求分析

尾声 一个项目如何进行需求分析

      • 一、项目需求分析
      • 二、功能结构
      • 三、项目预览
      • 四、数据库设计
      • 五、项目环境搭建
      • 六、划分包结构
      • 七、其它

一、项目需求分析

  1. 项目概述:
    传智书城是一个B2C项目,电商模式网站。
    B2B:Business to Business 即企业对企业——阿里巴巴
    B2C:Business to Customer 即企业对用户——京东
    C2C:Customer to Customer 即用户对用户——淘宝
    O2O:目前微信二维码营销的超火概念,即Online To Offline,也将线下商务与互联网结合在了一起,让互联网成为线下交易的前台。
  2. 满足需求:
    1、友好的界面,良好的体验
    2、商品分类,按不同种类查看商品
    3、网站首页滚动图
    4、公告栏,本周热卖商品
    5、用户信息注册、登录、退出
    6、通过书名模糊搜索图书信息
    7、通过购物车一次购买多个商品
    8、提供简单的安全模型:只有在用户登录时才可以购买图书
    9、用户可以购买商品,在线提交订单
    10、用户可以查询自己订单信息
    11、设计网站后台,用来管理网站的各项基本数据
    12、系统运行安全并响应及时
    13、用户付款,卖家发货
    14、用户设置自己的发送地址
    15、用户确认收货、退货

  1. 项目开发基本流程:
    1、需求分析:分析项目具体实现功能,形成一个需求分析文档
    2、概要设计:根据需求分析文档中功能,分析功能具体执行流程,并对数据表设计,形成一个概要设计文档。
    3、项目原型(Demo):前端UI和UE 对项目功能做一个简单的demo(只有页面,没有数据——模型)
    4、编码阶段:代码编写
    5、测试阶段:测试项目
    6、上线:发布到公网,供用户访问。

  2. 项目周期:
    如果一个项目周期是一年,编码阶段大概为3-4个月,主要时间用于需求分析(重复与确认).

二、功能结构

  1. 传智书城项目分为前台与后台,一般情况下项目都有前台与后台
    前台:供用户访问、浏览。
    后台:供管理员管理前台的基本数据。

  2. 第一块:网上书城——前台网站
    1、用户操作:用户注册、登录、退出、用户信息更改、用户图书购买流程、订单查询
    2、图书浏览:首页轮播图、图书公告栏、本周热卖、根据书名搜索图书、等

  3. 第二块:网上书城——后台管理系统
    1、商品管理:添加商品(上架)、编辑商品、删除商品(下架)、查询商品
    2、销售榜单:下载销售数据
    3、公告管理:查询公告、编辑公告、删除公告、添加公告
    4、订单管理:查询订单、删除订单

  4. 小细节:流程图:通常使用visio软件画的。

三、项目预览

  1. 项目具体有哪些页面?
    主页面、商品页面、商品详情页面、购买页面等。

四、数据库设计

  1. 开发程序离不开对数据库操作,数据库设计根据需求分析和功能的具体实现去制定,数据库设计要合理。

  2. 数据库设计(数据表)至关重要。

  3. E-R图概述:
    Entity Relationsh Diggram,是实体-联系图,表示实体、属性和联系之间的管理关系
    比如:实体用户User,属性是用户名username,password等,联系就是与用户相关的实体,如订单。

  4. E-R图设计:

    1. 用户(user)的E-R图:用户名、密码、性别、电话、邮箱、状态、注册激活码、用户角色、注册时间等
    2. 商品实体(products)的E-R图:商品名称、商品价格、商品分类、商品库存、图片、商品描述等
    3. 订单实体(orders)的E-R图:所属用户、订单价格、收货姓名、收货人地址、收货人电话、订单状态、下单时间等
    4. 订单项(orderitem)的E-R图:所属订单、所属商品、购买数量(订单中同一个商品的一个条目)
    5. 公告栏实体(notice)的E-R图: 公告标题、公告内容、创建时间
  5. 数据表结构:

    1. user表:【常用】用户唯一标志:id,username,password,gender,email,telephone,introdeute,activeCode,state,role,registTime等
    2. products表:【常用】商品唯一标志:id,name,price,category,prum,imgurl,descrip等
    3. orders表:【常用】订单唯一标志:id,money,receieverName,receiverAddress,receiverPhone,payState,orderTime,user_id等
      注意:订单实体和用户实体是一个多对一的关联关系。
    4. orderitem表:【常用】order_id,product_id,buynum
      注意:订单实体和订单条目是一对多的关联关系;商品实体和订单条目是一对多的关联关系。
    5. notice表:【常用字段】:公告栏唯一标志:n_id,title,details,n_time等。
  6. 小细节:开发中,设计E-R图用visio,设计表用PowerDesianger软件


五、项目环境搭建

  1. 确定项目开发环境
    操作系统:win10
    web服务器:tomcat7.0
    Java开发包:jdk7.0
    数据库:mysql5.5
    开发工具:eclipse
    浏览器:IE8.0或更高

  2. 创建数据表
    首先创建数据库,及创建数据表。

  3. 创建项目,导入jar包
    c3p0-0.9.1.2.jar: 得到c3p0数据库对象
    commons-beanutils-1.8.3.jar: 封装数据
    commons-badutils-1.8.3.jar: 处理器对象、封装查询、更新等数据
    commons-fileupload-1.2.1.jar:上传
    commons-loggong-1.1.1.jar: 上传依赖包(封装数据)
    jsp-api.jar:引入jsp环境
    servlet-api.jar:引入Servlet环境
    commons-io-1.4.jar:IO
    jstl.jar:引入JSTL标签库
    standard.jar:引入JSTL标签库
    mail.jar:邮箱包

  4. 配置c3p0-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
    	<default-config>
    		<property name="driverClass">com.mysql.jdbc.Driver</property>		<!-- 注测数据库驱动 -->
    		<property name="jdbcUrl">jdbc:mysql:///数据库名		
    		<property name="user">root</property>
    		<property name="password">填写数据库密码</property>
    	</default-config> 
    </c3p0-config> 
    
  5. 编写filter过滤器
    EncodingFilter 处理整个项目中文乱码问题。

    /**
     * 编码过滤器(用于统一项目编码)
     */
    import;
    public class EncodingFilter implements Filter {
    	public void init(FilterConfig filterConfig) throws ServletException {
    
    	}
    	public void doFilter(ServletRequest request, ServletResponse response,
    			FilterChain chain) throws IOException, ServletException {
    		// 处理请求乱码
    		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    		HttpServletRequest myRequest = new MyRequest(httpServletRequest);
    		// 处理响应乱码
    		response.setContentType("text/html;charset=utf-8");
    		chain.doFilter(myRequest, response);
    	}
    	public void destroy() {
    
    	}
    }
    // 自定义request对象
    class MyRequest extends HttpServletRequestWrapper {
    	//1、定义增强的request对象
    	private HttpServletRequest request;
    	//2、定义参数目的,处理get请求的中文乱码问题处理一次
    	private boolean hasEncode;
    	public MyRequest(HttpServletRequest request) {
    		super(request);// super必须写
    		this.request = request;
    	}
    	// 对需要增强方法 进行覆盖
    	//3、获取请求参数的方法,都需要处理中文乱码问题
    	@SuppressWarnings({ "unchecked", "rawtypes" })
    	@Override
    	public Map getParameterMap() {
    		//1. 先获得请求方式
    		String method = request.getMethod();
    		if (method.equalsIgnoreCase("post")) {
    			//2. post请求
    			try {
    				// 处理post乱码
    				request.setCharacterEncoding("utf-8");
    				return request.getParameterMap();
    			} catch (UnsupportedEncodingException e) {
    				e.printStackTrace();
    			}
    		} else if (method.equalsIgnoreCase("get")) {
    			//3. get请求
    			Map<String, String[]> parameterMap = request.getParameterMap();
    			//4. 遍历map集合,获取里面没一个参数,进行中文乱码问题处理,处理一次
    			if (!hasEncode) { // 确保get手动编码逻辑只运行一次
    				for (String parameterName : parameterMap.keySet()) {
    					String[] values = parameterMap.get(parameterName);
    					if (values != null) {
    						for (int i = 0; i < values.length; i++) {
    							//String value = values[i];
    							try {
    							      values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");
    							     //value = new String(value.getBytes("ISO-8859-1"),"utf-8");
    							    } catch (UnsupportedEncodingException e) {
    								    e.printStackTrace();
    							}
    						}
    					}
    				}
    				hasEncode = true;
    			}
    			return parameterMap;
    		}
    		return super.getParameterMap();
    	}
    	@Override
    	public String getParameter(String name) {	//针对一个单选框的值,如用户名
    		@SuppressWarnings("unchecked")
    		Map<String, String[]> parameterMap = getParameterMap();
    		String[] values = parameterMap.get(name);
    		if (values == null) {
    			return null;
    		}
    		return values[0]; // 取回参数的第一个值
    	}
    	@Override
    	public String[] getParameterValues(String name) {	//获取复选框的值
    		@SuppressWarnings("unchecked")
    		Map<String, String[]> parameterMap = getParameterMap();
    		String[] values = parameterMap.get(name);
    		return values;
    	}
    }
    
  6. 编写工具类DataSourceUtils

    /**
     * 数据源工具
     */
     import;
    public class DataSourceUtils {
    	//1、得到数据源对象
    	private static DataSource dataSource = new ComboPooledDataSource();	//创建数据源对象,前提不许创建好c3p0数据库连接池——c3p0-config.xml
    	//2、提供静态方法得到数据源对象
    	public static DataSource getDataSource() {
    		return dataSource;
    	}
    	//3、处理事务:保证事务里面用同一个连接对象。t1对象底层使用的map集合的值<线程的编号,Connection>
    	private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
    	/**
    	 * 当DBUtils需要手动控制事务时,调用该方法获得一个连接
    	 * @return
    	 * @throws SQLException
    	 */
    	//4、提供得到唯一连接对象的方法
    	public static Connection getConnection() throws SQLException {
    		Connection con = tl.get();
    		if (con == null) {		//本地对象t1里面没有链接对象
    			con = dataSource.getConnection();
    			tl.set(con);
    		}
    		return con;
    	}
    	//5.开启事务
    	public void startTransaction() throws SQLException{
    		Connection con = getConnection();
    		if(con != null){
    			con.setAutoCommit(false);
    		}
    	}
    	//6.释放连接,结束事务(正常情况下)
    	public static void releaseAndCloseConnection() throws SQLException{
    		Connection con = getConnection();
    		if(con != null){
    			con.commit();
    			tl.remove();
    			con.close();
    		}
    	}
    	//特殊情况下
    	public static void rollback() throws SQLException{
    		Connection con = getConnection();
    		if(con != null){
    			con.rollback();
    			tl.remove();
    			con.close();
    		}
    	}
    }
    

六、划分包结构

  1. src:
    dao包:操作数据库类
    domain:(javabean)Java实体类
    exception:自定义异常类
    service:对应业务逻辑层,通过dao里代码,最终操作数据库
    tag:村的自定义标签库
    utils:工具类

  2. Web-Content:
    admin:后台管理页面,css,js,jsp页面等。
    bookcover:图书图片
    client:前台所有页面
    error:错误页面
    productimg:上架图书所有图片

七、其它

  1. MyEclipse里面项目自动回导入jstl相关的包,但是eclipse不会这就需要我们自己导入包,导入包可以分为两步:
  2. 将jstl.jar 和standard.jar两个包粘贴到 Eclipse 项目下的WebContent ——eclipse在后面使用的时候就会自动提示URI路径了 ,也可以直接导入到Tomcat的项目文件夹下但是必须配置xml等,比较麻烦
  3. 导入标签库
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    导入的两个包可以在Tomcat 的例子里面找到。

End.

你可能感兴趣的:(Java,web基础学习)