即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

javaweb项目之(书城项目)的功能实现(最全没有之一)

编程语言 yuexianchang 10℃ 0评论

用户的登陆注册


-bean:实体类的创建(要和数据库字段一一对应);


-dao|daoimpl:


-1.根据用户和密码查找用户是否存在(登陆)


-2.查找是否用户名被占用(注册)


-3.保存用户信息(注册)


-service|serviceImpl:


-1.登陆的功能


-2.查找用户名是否存在


-3.注册的功能


-servlet:


-1.登陆的功能:


-步骤: 1.)首先是获取前台输入的账号和密码


2.)调用service中的根据用户和密码查找用户的方法


3.)如果有返回成功页面,如果没有该用户返回登陆页面,并回显错误信息


4.)登陆成功时将用户信息保存到session的域对象中


-2.注册的功能:


-步骤: 1.)获取前台的数据信息并封装到bean中


2.)首先获取输入的验证码,和谷歌的验证码进行对比,如果一致说明正确。不一致,则错误并回显信息


3.)如果验证码一致,则进行用户名的查新和判断。如果用户名已存在,则注册失败,回显信息。如果成功则注册成功。


-3.注销的功能:


-步骤: 1.)首先获取session的对象的user的对象


2.)调用session 的remove的方法进行移除


3.)转发到起始页


常用知识点:


1.把用户存到session域中(为了过滤器的使用,过滤没有登录就不能查看的页面)


2.谷歌验证码:


1.)添加类库kaptcha





2.)配置web.xml(如果是中文的话要说明格式,图片的格式要修改)





kaptcha


com.google.code.kaptcha.servlet.KaptchaServlet








kaptcha.textproducer.font.names

楷体










kaptcha


/kaptcha.png








3.)servlet的编写:


// 获取之前生成的验证码


String code = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);


// 移除生成的验证码


request.getSession().removeAttribute(Constants.KAPTCHA_SESSION_KEY);








4.)在页面中使用标签的src属性引入访问路径。(验证码前端验证需要结合Ajax使用。)





验证码找不到








3.登陆表单验证:








4.注册表单验证:





-1)获取姓名输入框:servlet的验证


public void checkUsername(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {


//1.先获取用户名参数。


String username = request.getParameter(“username”);


// 2.调用UserService.existUsername验证用户名是否存在。


boolean existUsername = userService.existUsername(username);


// 3.把结果输出给客户端


// 如果返回值为真,说明用户名已存在





Gson gson = new Gson();


Map result = new HashMap();


if (existUsername) {


//表示用户名已存在


result.put(“result”, “1”);


} else {


//用户名不存在的情况


result.put(“result”, “0”);


}


String mapJson = gson.toJson(result);


response.getWriter().write(mapJson);


}


2.)JQuery 的验证以及用Ajax对用户名是否存在的验证的编写








图书的增删查改以及分页


-bean:实体类book和page的创建(要和数据库字段一一对应);


-dao|daoimpl:


-1.保存图书


-2.修改图书


-3.删除图书


-4.根据id查找图书


-5.查询所有的图书


-6.分页后的数据展现


-7.图书总记录数


-8.按照价格分页


-9.分页之后的记录数


-service|serviceImpl:


-1.保存图书


-2.修改图书


-3.删除图书


-4.根据id查找图书


-5.查询所有的图书


-6.分页


-7.按照价格分页


-servlet:


-1.图书展现的功能:


-步骤: 1.)首先调用service的方法查找所有的数据


2.)将查找的所有的数据保存到request的中去


3.)用转发的方式进行数据的传输


4.)在展台的页面的时候进行数据的遍历


-2.图书分页后的展现的功能:


-步骤: 1.)首先获取前台传过来的页码和每页的数据条数


2.)首先调用service的方法查找所有的数据


3.)将查找的所有的数据保存到request的中去


4.)用转发的方式进行数据的传输


5.)在展台的页面的时候进行数据的遍历


-3.图书的删除功能:


-步骤: 1.)首先获取前台传过来的id


2.)根据id,调用service的方法进行删除操作


3.)并返回当前页面


-4.图书的添加功能:


-步骤: 1.)首先获取前台传来的图书的信息


2.)调用service的方法进行保存


3.)保存完之后返回到当前页面


-5.图书的修改功能+获取图书的功能:(由于修改图书需要将信息回显到修改的页面)


-步骤:


获取图书的功能:


1.)首先获取到前台要修改的id


2.)根据id,调用service的方法查找图书信息


3.)将图书信息保存到rquest域中并将转发当前页面


修改图书的功能:


1.)首先获取前台修改后的数据,并封装到bean


2.)调用service的修改的方法,并将修改后的数据保存到request 的域中


3.)转发到当前页面


前台展示页面:


常用知识点:


1.)隐藏域的使用,用于存放方法名,通过baseServlet 的反射进行servlet的方法的调用


2.)JTEL的使用判断是否


































3.)是否确定删除





4.)分页的页面


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


















购物车的模块:(利用session域的形式来进行购物车模块的编写)


-bean:
实体类cartItem的创建(id,name,count,price,totalMoney)


实体类cart的创建;(注意:金钱的属性用BigDecimal,值不能为double类型,可以在后边+””的形式)


-1.)Map(Integer,Object)商品的信息


-2.)总的数量(创建初始值为零,并进行商品的遍历,进行数量的累加,返回累加的值)


-3.)总的价格(创建总价格的初始值BigDecimal为零,进行遍历,并将单类总价格累加,返回所有商品总的价格)


-4.)添加商品(形参为CartItem ,根据形参的id,来用map的key判断是否存在该商品,如果不存在就直接保存到map集合,如果存在就修改数量和总价格)


-5.)修改商品(id,count)根据id判断是否存在该商品,如果存在就直接修改数量和总价格,并返回总的价格。


-6.)删除商品(id)根据id直接在map中移除商品


-7.)清空购物车 直接调用clear()方法


-servlet:


调用bookService的方法


1.添加功能:


-1.)首先获取id,根据id 查找图书


-2.)在session域中查找cart,如果没有就创建并添加到session域中,如果有直接添加,并将图书名传到session域中


-3.)使用ajax的方法 Gson,并创建map对象,将总的数量和最后添加的图书名传进去,


-4.)response.getWriter().write(gson.toJson(result));





2.修改功能:


-1.)获取id和数量


-2.)在session域中查找cart,如果没有就创建并添加到session域中,如果有直接调用修改的方法


-3.)使用ajax的方法 Gson,并创建map对象,将商品的总价和购物车总的数量和购物车总的价格传进去,


-4.)输出到客户端response.getWriter().write(gson.toJson(result));





3.删除商品:


-1.)获取商品的id


-2.)在session域中查找cart,存在时就调用删除的方法


-3.)返回到当前页面response.sendRedirect(request.getHeader(“referer”));


4.清空购物车


-1.)在session域中查找cart,存在时就调用清空的方法


-2.)返回到当前页面response.sendRedirect(request.getHeader(“referer”));


前台页面:


常用知识点:


1.)进行购物车的清空和删除提示,商品数量的修改








2.)在主页面中进行商品添加的事务操作











订单管理模块:





-bean:实体类orderItem和order的创建(要和数据库字段一一对应);


-dao|daoimpl:


orderDao|orderDaoImpl:


-1.保存订单


-2.根据userid查找我的订单


-3.查询所有的订单


-4.修改订单状态


orderItemDao|orderItemDaoImpl:


-1.保存订单项


-2.查询订单项


-service|serviceImpl:


orderService|orderServiceImpl:


-1.生成订单


-2.根据userid查找我的订单


-3.订单详情(根据订单id)


-4.查询所有的订单(管理员)


-5.发货


-6.收货


-servlet:


1、订单的生成



2、我的订单列表  


3、订单详情



4、管理员–查看所有订单


5、确认发货



6、用户确认收货


7、最后优化批量SQL





常用知识点:


优化批量的sql:


我们先在BaseDaoImpl中添加方法:








/**


* 执行批量操作





* @param sql


*            要执行的sql语句


* @param params


*            参数


* @return 返回每个语句修改的数量


*/


public int[] batch(String sql, Object[][] params) {


Connection connection = null;








try {


// 获取数据库连接


connection = JDBCUtils.getConnection();


// 执行查询语句


return queryRunner.batch(connection, sql, params);


} catch (SQLException e) {


e.printStackTrace();


} finally {


JDBCUtils.closeConnection(connection);


}








return null;


}




















在OrderItemDao中添加接口方法:


/**


* 保存订单项





* @param item


*            保存的订单项


*/


public void batchSaveOrderItem(Collection items);





在OrderItemDaoImpl方法中添加实现:


@Override


public void batchSaveOrderItem(Collection items) {


// 插入sql语句


String sql = “insert into t_order_item(`name`,`price`,`total_money`,`count`,`order_id`) values(?,?,?,?,?)”;


// 创建一个二组数组


Object[][] params = new Object[items.size()][5];


int i = 0;


// 遍历每一个订单项,创建参数


for (OrderItem item : items) {


Object[] oneParams = params[i];


oneParams[0] = item.getName();


oneParams[1] = item.getPrice();


oneParams[2] = item.getTotalMoney();


oneParams[3] = item.getCount();


oneParams[4] = item.getOrderId();


i++;


}


// 执行sql


batch(sql, params);


}











订单的创建:


public String createOrder(Cart cart, int userId) {


// 生成订单号,使用用户id+当前时间


String orderId = userId + “” + System.currentTimeMillis();


// 生成一个订单对象


Order order = new Order(orderId, new Date(), cart.getTotalMoney(), 0, userId);


// 把订单保存到数据库


orderDao.saveOrder(order);


//我在保存订单之后 ,生成一个错误。


// int i = 12 / 0;





// 保存订单项


List orderItems = new ArrayList();


// 遍历购物车中的每一个购物项,生成订单项OrderItem


for (CartItem cartItem : cart.getItems().values()) {


// 把购物车中的每一个商品项转化成为订单项


OrderItem orderItem = new OrderItem(0, cartItem.getName(), cartItem.getCount(),


cartItem.getMoney(), cartItem.getTotalMoney(), orderId);


orderItems.add(orderItem);


// 保存到数据库


// orderItemDao.saveOrderItem(orderItem);


// 从购物项的id中获取商品的编号


Book book = bookDao.queryBook(cartItem.getId());


// 把原来的销量加上购物车中的数量 ,得到新的销量


book.setSales( book.getSales() + cartItem.getCount() );


// 把原来 的库存量,减去,购物车中的数量,得到新的库存量


book.setStock( book.getStock() – cartItem.getCount() );


bookDao.updateBook(book);


}










































































































































































转载请注明:CodingBlog » javaweb项目之(书城项目)的功能实现(最全没有之一)

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情