主要内容:
- 1、购物车类的实现 - 2、按功能模块组织Servlet,利用method属性(或命名为其他)的值进行不同的处理
课堂记录:
1、网上购物系统购物车如何实现:
思路:建立购物车类(实体类),内含:
(1)属性:
- 商品与商品数量对应数据的集合——采用HashMap数据结构;
- 商品总金额
(2)方法:
- 2个属性的SET、GET方法
- 计算金额的方法
- 购物车中增加商品的方法(若购物车中没有此商品,则在集合中增加新商品及数量,若已经有此商品,则修改其数量)
- 购物车中删除商品的方法
另外,为了判断属性值相同,就认定为同一商品,需要在Product类中重写hashCode方法和equals方法。
具体代码为:
Cart类的实现如下:(Cart.java)
package cn.sdut.po;
import java.util.HashMap;
import java.util.Set;
public class Cart {
HashMap<Product, Integer> goods;
double totalPrice;
public Cart()
{
goods=new HashMap();
this.totalPrice=0.0;
}
public boolean addGoods(Product product,int number)
{
if(goods.containsKey(product))
{
goods.put(product, number+goods.get(product));
}
else
{
goods.put(product, number);
}
calTotolPrice();
return true;
}
public boolean removeGoods(Product product)
{
goods.remove(product);
calTotolPrice();
return true;
}
public void calTotolPrice()
{
double sums=0.0;
Set<Product> products = goods.keySet();
for(Product product:products)
{
sums+=product.getProprice()*goods.get(product);
}
this.totalPrice=sums;
}
public HashMap<Product, Integer> getGoods() {
return goods;
}
public void setGoods(HashMap<Product, Integer> goods) {
this.goods = goods;
}
public double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(double totalPrice) {
this.totalPrice = totalPrice;
}
}
Product类的实现如下(Product.java):
package cn.sdut.po;
public class Product {
private int proid;
private String proname;
private double proprice;
private int procount;
private String prosupplier;
private String propic;
public Product() {
super();
}
public Product(int proid, String proname, double proprice, int procount,
String prosupplier, String propic) {
super();
this.proid = proid;
this.proname = proname;
this.proprice = proprice;
this.procount = procount;
this.prosupplier = prosupplier;
this.propic = propic;
}
public int getProid() {
return proid;
}
public void setProid(int proid) {
this.proid = proid;
}
public String getProname() {
return proname;
}
public void setProname(String proname) {
this.proname = proname;
}
public double getProprice() {
return proprice;
}
public void setProprice(double proprice) {
this.proprice = proprice;
}
public int getProcount() {
return procount;
}
public void setProcount(int procount) {
this.procount = procount;
}
public String getProsupplier() {
return prosupplier;
}
public void setProsupplier(String prosupplier) {
this.prosupplier = prosupplier;
}
public String getPropic() {
return propic;
}
public void setPropic(String propic) {
this.propic = propic;
}
@Override
public String toString() {
return "Product [proid=" + proid + ", proname=" + proname
+ ", proprice=" + proprice + ", procount=" + procount
+ ", prosupplier=" + prosupplier + ", propic=" + propic + "]";
}
@Override
public int hashCode() {
int result = this.proid + this.proname.hashCode();
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Product other = (Product) obj;
if (proid != other.proid)
return false;
if (proname == null) {
if (other.proname != null)
return false;
} else if (!proname.equals(other.proname))
return false;
return true;
}
}
2、按功能模块组织Servlet,利用method属性(或命名为其他)的值进行不同的处理以用户管理功能为例,建立UserServlet,其中根据method属性的值,进行不同的处理;在页面或Servlet中需要调用该Servlet时,在…../ UserServlet?………后增加处理分支:&method=xxx,如:…../ UserServlet?id=…&method=del …../ UserServlet?id=…&method=byid…../ UserServlet?id=…&method=add …../ UserServlet?id=…&method=update
UserServlet.java示意如下:
package cn.sdut.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.sdut.dao.UserDao;
import cn.sdut.po.User;
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
UserDao userDao = new UserDao();
public UserServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String method = request.getParameter("method");
switch (method) {
case "all":
queryAllUsers(request, response);
break;
case "add":
addUser(request, response);
break;
case "del":
delUser(request, response);
break;
case "update":
updateUser(request, response);
break;
case "byid":
queryUserById(request, response);
break;
case "batchDel":
batchDelStudent(request, response);
break;
case "batchPwdReset":
batchPwdReset(request, response);
break;
case "login":
login(request, response);
break;
case "regist":
regist(request, response);
break;
case "logout":
logout(request,response);
break;
}
}
private void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
HttpSession session = request.getSession();
session.invalidate();
response.getWriter().write("<script>history.go(-1);</script>");
}
private void regist(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String msg = "用户注册失败";
String name = request.getParameter("name");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String birthday = request.getParameter("birthday");
String[] hobby = request.getParameterValues("hobby");
StringBuilder builder = new StringBuilder();
if (hobby != null) {
for (String str : hobby) {
builder.append(str).append(",");
}
}
builder.deleteCharAt(builder.length() - 1);
String telephone = request.getParameter("telephone");
String address = request.getParameter("address");
User user = new User();
user.setName(name);
user.setPassword(password);
user.setSex(sex);
user.setHobby(builder.toString());
user.setAddress(address);
user.setBirthday(birthday);
user.setTelephone(telephone);
user.setType(2);
int result = userDao.addUser(user);
if (result > 0) {
msg = "用户注册成功";
}
request.setAttribute("msg", msg);
request.getRequestDispatcher("/prouser/u_userLogin.jsp")
.forward(request, response);
}
private void batchPwdReset(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String msg = "批量修改密码失败!";
String[] ids = request.getParameterValues("id");
boolean flag = userDao.batchPwdReset("111111", ids);
if (flag) {
msg = "批量修改密码成功!";
}
request.setAttribute("msg", msg);
request.getRequestDispatcher("/UserServlet?method=all").forward(
request, response);
}
private void batchDelStudent(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String msg = "批量删除用户失败!";
String[] ids = request.getParameterValues("id");
boolean flag = userDao.batchDelUser(ids);
if (flag) {
msg = "批量删除用户成功!";
}
request.setAttribute("msg", msg);
request.getRequestDispatcher("/UserServlet?method=all").forward(
request, response);
}
private void queryAllUsers(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
List<User> users = userDao.queryUserByCondition(null);
request.setAttribute("userList", users);
request.getRequestDispatcher("/prouser/m_userMain.jsp").forward(
request, response);
}
private void addUser(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String msg = "用户插入失败";
String name = request.getParameter("name");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String birthday = request.getParameter("birthday");
String[] hobby = request.getParameterValues("hobby");
StringBuilder builder = new StringBuilder();
if (hobby != null) {
for (String str : hobby) {
builder.append(str).append(",");
}
}
builder.deleteCharAt(builder.length() - 1);
String telephone = request.getParameter("telephone");
String address = request.getParameter("address");
User user = new User();
user.setName(name);
user.setPassword(password);
user.setSex(sex);
user.setHobby(builder.toString());
user.setAddress(address);
user.setBirthday(birthday);
user.setTelephone(telephone);
user.setType(2);
int result = userDao.addUser(user);
if (result > 0) {
msg = "用户插入成功";
}
request.setAttribute("msg", msg);
request.getRequestDispatcher("/UserServlet?method=all").forward(
request, response);
}
private void delUser(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String msg = "用户删除失败";
int userid = Integer.parseInt(request.getParameter("userid"));
int result = userDao.delUser(userid);
if (result > 0) {
msg = "用户删除成功";
}
request.setAttribute("msg", msg);
request.getRequestDispatcher("/UserServlet?method=all").forward(
request, response);
}
private void updateUser(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String msg = "用户修改失败";
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String birthday = request.getParameter("birthday");
String[] hobby = request.getParameterValues("hobby");
StringBuilder builder = new StringBuilder();
if (hobby != null) {
for (String str : hobby) {
builder.append(str).append(",");
}
}
builder.deleteCharAt(builder.length() - 1);
String telephone = request.getParameter("telephone");
String address = request.getParameter("address");
User user = new User();
user.setId(id);
user.setName(name);
user.setPassword(password);
user.setSex(sex);
user.setHobby(builder.toString());
user.setAddress(address);
user.setBirthday(birthday);
user.setTelephone(telephone);
user.setType(2);
System.out.println(user);
int result = userDao.updateUser(user);
if (result > 0) {
msg = "用户修改成功";
}
request.setAttribute("msg", msg);
request.getRequestDispatcher("/UserServlet?method=all").forward(
request, response);
}
private void queryUserById(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
int userid = Integer.parseInt(request.getParameter("userid"));
User user = userDao.queryUserById(userid);
request.setAttribute("user", user);
System.out.println(request.getContextPath()
+ "/prouser/m_updateUser.jsp");
request.getRequestDispatcher("/prouser/m_updateUser.jsp").forward(
request, response);
}
// 用户登录
private void login(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
String password = request.getParameter("password");
User user = userDao.login(name, password);
if (user != null) {
request.getSession().setAttribute("user", user);
if (user.getType() == 1) {// 管理员
response.sendRedirect(request.getContextPath()
+ "/promanager/main.jsp");
} else if (user.getType() == 2) {// 普通用户
response.sendRedirect(request.getContextPath()
+ "/servlet/QueryAllProduct");
}
} else {
// 登录不正确,重新登录或者进行注册
String msg = "未查到此用户,请继续登陆或注册!";
request.setAttribute("msg", msg);
request.getRequestDispatcher("/prouser/userLogin.jsp").forward(
request, response);
}
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
布置作业:
自己根据IMOOC视频资料学习过滤器和监听器。
Java Web开发技术应用——过滤器 http://www.imooc.com/learn/213
JAVA Web开发技术应用——监听器 http://www.imooc.com/learn/271