《学习内容》:
//========学习内容=========
购物系统练习
自己扩展了内容
《知识点—笔记》
//=========================
《代码内容》:
主要思路—->通过这个购物系统的项目,自己加上扩展了2给页面,可以在最后结算的时候,在下面加了一个
button按钮,然后把当前的总金额存在request对象作用域中,请求转发到付款页面,上面是接收结算的金额
下方是自己的微信二维码。
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html lang="en">
<head>
<title>购物系统登录</title>
<script type="text/javascript">
window.onload = function () {
var regist = document.getElementById("regist")
regist.onclick = function () {
window.location.href = "regist.html";
}
}
</script>
</head>
<%
String loginResult = (String)session.getAttribute("loginResult");
if (loginResult != null){
out.write(loginResult+"<br>");
}
%>
<body>
<H2>购物系统 请您登录!</H2>
<table>
<form action="login" method="post">
<tr>
<td>用户名:</td>
<td><input type="text" name="uname" value=""></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="upassword" value=""></td>
</tr>
<tr>
<td><input type="submit" value="登录"></td>
<td><input type="button" id="regist" value="注册" ></td>
</tr>
</form>
</table>
</body>
</html>
LoginCont**roller**
package com.atanmo.gwxt.controller;
import com.atanmo.gwxt.service.UserService;
import com.atanmo.gwxt.util.MySpring;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class LoginController extends HttpServlet {
private static UserService service = MySpring.getBean("com.atanmo.gwxt.service.UserService");
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//拿到账号 密码 调用业务层 判断登录
request.setCharacterEncoding("UTF-8");
String uname = request.getParameter("uname");
String loginResult = service.login(uname, request.getParameter("upassword"));
//把登录的结果 是否成功存进一次请求中
request.setAttribute("loginResult",loginResult);
if ("登录成功".equals(loginResult)){
//将用户名 存入一次会话中
HttpSession session = request.getSession();
session.setAttribute("uname",uname);
//重定向发起请求
response.sendRedirect("selectAllKind");
}else {
request.getRequestDispatcher("login.jsp").forward(request,response);
}
}
}
kind.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.atanmo.gwxt.domain.Kind" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>购物系统-选择商品类别</title>
<script type="text/javascript">
window.onload = function () {
var KindSelect = document.getElementById("KindSelect");
KindSelect.onchange = function () {
window.location.href = "selectCommodity?kid="+this.value
}
}
</script>
</head>
<body>
<h2>欢迎来到---不坑死你才怪---购物系统</h2>
<select id="KindSelect" name="kid">
<option>===请选择===</option>
<%
ArrayList<Kind> arrayList = (ArrayList<Kind>) session.getAttribute("allKind");
for (Kind kind : arrayList){
out.write("<option value='"+kind.getKID()+"'>"+kind.getKNAME()+"</option>");
}
%>
</select>
</body>
</html>
CloseMoney.js**p**
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>付款</title>
</head>
<body>
<table border="5" align="center" width="40%" height="40%">
<tr fo>
<th>请付款 总计:<%=session.getAttribute("sumMoney")%></th>
</tr>
<tr>
<th>
<img src="static/img/closeMoneyjpg.jpg">
</th>
</tr>
</table>
</body>
</html>
ShowClose.js**p**
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.atanmo.gwxt.domain.Commodity" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>购物账单结算</title>
<script>
window.onload = function () {
var closeButton = document.getElementById("close")
closeButton.onclick = function () {
window.location.href = "closeMoney"
}
}
</script>
</head>
<body>
<form action="closeShopping" method="post">
<table border="6" align="center" width="60%" height="30">
<tr>
<th>商品名称</th>
<th>商品价格</th>
</tr>
<%
Float sumMoney = 0f;
ArrayList<Commodity> shoppingCar = (ArrayList<Commodity>)session.getAttribute("shoppingCar");
for (Commodity commodity : shoppingCar) {
out.write("<tr>");
out.write("<td>"+commodity.getCNAME()+"</td>");
out.write("<td>"+commodity.getCPRINCE()+"</td>");
out.write("</tr>");
sumMoney += commodity.getCPRINCE();
session.setAttribute("sumMoney",sumMoney);
}
%>
<tr>
<th>总计:</th>
<th><%=sumMoney%></th>
</tr>
</table>
<table border="1" align="center">
<tr>
<td><input align="center" type="button" id="close" value="结算"></td>
</tr>
</table>
<input type="hidden" name="sumMoney" value="<%=sumMoney%>">
</form>
</body>
</html>
showCommodi**tys.jsp**
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.atanmo.gwxt.domain.Commodity" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>商品列表</title>
<style>
td{
text-align: center;
}
</style>
<script>
window.onload = function () {
var buttons = document.getElementsByClassName("countinueButton")
for (var i = 0;i<buttons.length;i++){
buttons[i].onclick = function () {
var hidden = document.getElementById("hidden")
hidden.value = this.value
var submitForm = document.getElementById("submitForm")
submitForm.submit();
}
}
}
</script>
</head>
<body>
<form id= 'submitForm' action="saveSelectedCommodity" method="post">
<table border="5" align="center" width="60%" height="60%">
<tr>
<th>已选商品</th>
<th>商品名称</th>
<th>商品单价</th>
</tr>
<%
ArrayList<Commodity> commodities = (ArrayList<Commodity>) request.getAttribute("commodities");
for (Commodity commodity : commodities){
out.write("<tr>");
out.write("<td><input type= 'checkbox' name='cid' value='"+commodity.getCID()+"'></td>");
out.write("<td>"+commodity.getCNAME()+"</td>");
out.write("<td>"+commodity.getCPRINCE()+"</td>");
out.write("</tr>");
}
%>
<tr>
<td colspan="3">
<input class= "countinueButton" type="button" value="继续购物">
||
<input class="countinueButton" type="button" value="结算清单">
</td>
</tr>
</table>
<input id='hidden' type="hidden" name="buttonValue" value="">
</form>
</body>
</html>
CloseMoneyCon**troller**
package com.atanmo.gwxt.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CloseMoneyController extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String sumMoney = request.getParameter("sumMoney");
request.getRequestDispatcher("CloseMoney.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
SaveSelectedComm**oditysController**
package com.atanmo.gwxt.controller;
import com.atanmo.gwxt.domain.Commodity;
import com.atanmo.gwxt.service.CommodityService;
import com.atanmo.gwxt.util.MySpring;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
public class saveSelectedCommodityController extends HttpServlet {
private static CommodityService service = MySpring.getBean("com.atanmo.gwxt.service.CommodityService");
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//获取前端的参数是 继续购物 还是 结算
String buttonValue = request.getParameter("buttonValue");
//获取前端的已选商品的参数
String[] cids = request.getParameterValues("cid");
HttpSession session = request.getSession();
//到session中去拿这个集合
ArrayList<Commodity> shoppingCar = (ArrayList<Commodity>)session.getAttribute("shoppingCar");
if (shoppingCar == null){
//调用service方法来通过
shoppingCar = service.getSelectedCommodityList(cids);
session.setAttribute("shoppingCar",shoppingCar);
}
//到此为止,已经把用户选择的商品全部存入了集合中 那么我们来判断他点的是继续购物还是 结算
if ("继续购物".equals(buttonValue)){
request.getRequestDispatcher("kind.jsp").forward(request,response);
}else {
request.getRequestDispatcher("ShowClose.jsp").forward(request,response);
}
System.out.println(buttonValue);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
SelectAllkindCon**troller**
package com.atanmo.gwxt.controller;
import com.atanmo.gwxt.domain.Kind;
import com.atanmo.gwxt.service.KindService;
import com.atanmo.gwxt.util.MySpring;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
public class SelectAllKindController extends HttpServlet {
private static KindService kindService = MySpring.getBean("com.atanmo.gwxt.service.KindService");
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用业务层方法 查询全部的类别
ArrayList<Kind> allKind = kindService.selectAllKind();
HttpSession session = request.getSession();
session.setAttribute("allKind",allKind);
request.getRequestDispatcher("kind.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
SelectCommodityCont**roller**
package com.atanmo.gwxt.controller;
import com.atanmo.gwxt.dao.CommodityDao;
import com.atanmo.gwxt.domain.Commodity;
import com.atanmo.gwxt.service.CommodityService;
import com.atanmo.gwxt.util.MySpring;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
public class SelectCommodityController extends HttpServlet {
private static CommodityService service = MySpring.getBean("com.atanmo.gwxt.service.CommodityService");
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String kid = request.getParameter("kid");
//调用业务层去给我找这个kid对应的全部商品
ArrayList<Commodity> commodities = service.selectAllCommmodity(Integer.parseInt(kid));
request.setAttribute("commodities",commodities);
request.getRequestDispatcher("showCommoditys.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
CommodityD**ao**
package com.atanmo.gwxt.dao;
import com.atanmo.gwxt.domain.Commodity;
import com.atanmo.gwxt.domain.Kind;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
@SuppressWarnings("all")
public class CommodityDao {
private String driver = "com.mysql.cj.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/shopping?serverTimezone=CST&characterEncoding=UTF-8";
private String username = "root";
private String password = "at123123";
public ArrayList<Commodity> selectAllCommodity(Integer kid) {
ArrayList<Commodity> kidOrmCommodity = new ArrayList<>();
Kind kind = null;
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "SELECT CID,CNAME,CPRINCE,KID FROM T_COMMODITY WHERE KID = ?";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setInt(1,kid);
ResultSet rst = pstat.executeQuery();
while (rst.next()){
Commodity commodity = new Commodity(
rst.getInt("CID"),
rst.getString("CNAME"),
rst.getFloat("CPRINCE"),
kind = new Kind()
);
kind.setKID(kid);
kidOrmCommodity.add(commodity);
}
} catch (Exception e) {
e.printStackTrace();
}
return kidOrmCommodity;
}
public Commodity selectSelectedCommoditys(Integer cid) {
Commodity commodity = null;
Kind kind = new Kind();
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "SELECT CID,CNAME,CPRINCE,KID FROM T_COMMODITY WHERE CID = ?";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setInt(1,cid);
ResultSet rst = pstat.executeQuery();
if (rst.next()){
kind.setKID(rst.getInt("KID"));
commodity = new Commodity(
rst.getInt("CID"),rst.getString("CNAME"),
rst.getFloat("CPRINCE"),kind);
}
} catch (Exception e) {
e.printStackTrace();
}
return commodity;
}
}
KindD**ao**
package com.atanmo.gwxt.dao;
import com.atanmo.gwxt.domain.Kind;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
public class KindDao {
private String driver = "com.mysql.cj.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/shopping?serverTimezone=CST&characterEncoding=UTF-8";
private String username = "root";
private String password = "at123123";
public ArrayList<Kind> selectAllKind() {
ArrayList<Kind> kindMap = new ArrayList<>();
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url,username,password);
String sql = "SELECT KID,KNAME FROM T_KIND";
PreparedStatement pstat = conn.prepareStatement(sql);
ResultSet rst = pstat.executeQuery();
while (rst.next()){
Kind kind = new Kind(rst.getInt("KID"), rst.getString("KNAME"));
kindMap.add(kind);
}
} catch (Exception e) {
e.printStackTrace();
}
return kindMap;
}
}
UserDa**o**
package com.atanmo.gwxt.dao;
import com.atanmo.gwxt.domain.User;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserDao {
private String driver = "com.mysql.cj.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/shopping?serverTimezone=CST&characterEncoding=UTF-8";
private String username = "root";
private String password = "at123123";
public User checkLoginResult(String uname){
User user = null;
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "SELECT * FROM T_USER WHERE UNAME = ?";
PreparedStatement pstat = conn.prepareStatement(sql);
if (uname != null) {
pstat.setString(1, uname);
ResultSet rst = pstat.executeQuery();
if (rst.next()) {
user = new User();
user.setUID(rst.getInt("UID"));
user.setUNAME(rst.getString("UNAME"));
user.setUPASSWORD(rst.getString("UPASSWORD"));
user.setYULIU1(rst.getString("YULIU1"));
user.setYULIU2(rst.getString("YULIU2"));
}
}else {
return user;
}
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
}
Commo**dity**
package com.atanmo.gwxt.domain;
public class Commodity {
private Integer CID;
private String CNAME;
private Float CPRINCE;
private Kind kind;
public Commodity() {}
public Commodity(Integer CID, String CNAME, Float CPRINCE, Kind kind) {
this.CID = CID;
this.CNAME = CNAME;
this.CPRINCE = CPRINCE;
this.kind = kind;
}
public Integer getCID() {
return CID;
}
public void setCID(Integer CID) {
this.CID = CID;
}
public String getCNAME() {
return CNAME;
}
public void setCNAME(String CNAME) {
this.CNAME = CNAME;
}
public Float getCPRINCE() {
return CPRINCE;
}
public void setCPRINCE(Float CPRINCE) {
this.CPRINCE = CPRINCE;
}
public Kind getKind() {
return kind;
}
public void setKind(Kind kind) {
this.kind = kind;
}
@Override
public String toString() {
return "Commodity{" +
"CID=" + CID +
", CNAME='" + CNAME + '\'' +
", CPRINCE=" + CPRINCE +
", kind=" + kind +
'}';
}
}
Kind
package com.atanmo.gwxt.domain;
public class Kind {
private Integer KID;
private String KNAME;
public Kind() {}
public Kind(Integer KID, String KNAME) {
this.KID = KID;
this.KNAME = KNAME;
}
public Integer getKID() {
return KID;
}
public void setKID(Integer KID) {
this.KID = KID;
}
public String getKNAME() {
return KNAME;
}
public void setKNAME(String KNAME) {
this.KNAME = KNAME;
}
@Override
public String toString() {
return "Kind{" +
"KID=" + KID +
", KNAME='" + KNAME + '\'' +
'}';
}
}
Us**er**
package com.atanmo.gwxt.domain;
import java.util.PrimitiveIterator;
public class User {
private Integer UID;
private String UNAME;
private String UPASSWORD;
private String YULIU1;
private String YULIU2;
public User() {}
public User(Integer UID, String UNAME, String UPASSWORD, String YULIU1, String YULIU2) {
this.UID = UID;
this.UNAME = UNAME;
this.UPASSWORD = UPASSWORD;
this.YULIU1 = YULIU1;
this.YULIU2 = YULIU2;
}
public Integer getUID() {
return UID;
}
public void setUID(Integer UID) {
this.UID = UID;
}
public String getUNAME() {
return UNAME;
}
public void setUNAME(String UNAME) {
this.UNAME = UNAME;
}
public String getUPASSWORD() {
return UPASSWORD;
}
public void setUPASSWORD(String UPASSWORD) {
this.UPASSWORD = UPASSWORD;
}
public String getYULIU1() {
return YULIU1;
}
public void setYULIU1(String YULIU1) {
this.YULIU1 = YULIU1;
}
public String getYULIU2() {
return YULIU2;
}
public void setYULIU2(String YULIU2) {
this.YULIU2 = YULIU2;
}
@Override
public String toString() {
return "User{" +
"UID=" + UID +
", UNAME='" + UNAME + '\'' +
", UPASSWORD='" + UPASSWORD + '\'' +
", YULIU1='" + YULIU1 + '\'' +
", YULIU2='" + YULIU2 + '\'' +
'}';
}
}
Commodity**Service**
package com.atanmo.gwxt.service;
import com.atanmo.gwxt.dao.CommodityDao;
import com.atanmo.gwxt.domain.Commodity;
import com.atanmo.gwxt.util.MySpring;
import javax.swing.*;
import java.util.ArrayList;
public class CommodityService {
private static CommodityDao dao = MySpring.getBean("com.atanmo.gwxt.dao.CommodityDao");
public ArrayList<Commodity> selectAllCommmodity(Integer kid){
//调用dao去读写数据库
return dao.selectAllCommodity(kid);
}
public ArrayList<Commodity> getSelectedCommodityList(String[] cids) {
ArrayList<Commodity> commodities = new ArrayList<>();
//将前端获取的cid全部获取 然后通过cid去传给service方法来查出一组对象,放到集合中
for (String cid : cids){
//调用dao来查出全部的已选商品
commodities.add(dao.selectSelectedCommoditys(Integer.parseInt(cid)));
}
return commodities;
}
}
KindServi**ce**
package com.atanmo.gwxt.service;
import com.atanmo.gwxt.dao.KindDao;
import com.atanmo.gwxt.domain.Kind;
import com.atanmo.gwxt.util.MySpring;
import java.util.ArrayList;
public class KindService {
private static KindDao kindDao = MySpring.getBean("com.atanmo.gwxt.dao.KindDao");
public ArrayList<Kind> selectAllKind(){
//调用Dao查询全部的Kind类别
return kindDao.selectAllKind();
}
}
UserSe**rvice**
package com.atanmo.gwxt.service;
import com.atanmo.gwxt.dao.UserDao;
import com.atanmo.gwxt.domain.User;
import com.atanmo.gwxt.util.MySpring;
public class UserService {
private static UserDao userDao = MySpring.getBean("com.atanmo.gwxt.dao.UserDao");
public String login(String uname,String upasssword){
//调用dao查询一条记录
User user = userDao.checkLoginResult(uname);
System.out.println(user);
if (user != null && user.getUPASSWORD().equals(upasssword)){
return "登录成功";
}
return "用户名或密码错误";
}
}
MySp**ring**
package com.atanmo.gwxt.util;
import java.util.HashMap;
public class MySpring {
private static HashMap<String,Object> beanMap = new HashMap<>();
public static <T> T getBean(String className){
T obj = (T)beanMap.get(className);
if (obj == null){
try {
Class<?> clazz = Class.forName(className);
obj = (T)clazz.newInstance();
beanMap.put(className,obj);
} catch (Exception e) {
e.printStackTrace();
}
}
return obj;
}
}
学习总结:
学懂的:
我通过这次的购物系统的练习,觉得这不仅仅是锻炼了自己的面向独享思想,作用域对象的使用,
知识的巩固,更是提升编码能力和锻炼独立思维的练习
有问题的地方:
在saveSelectedCommodity中无法把选中的全部商品结算,我觉得是session对象的存储问题
正在排查.**