本小项目旨在联系【Cookie对象的数据共享】
流程图分析
这个流程图多多少少有点拉跨
申请卡页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
<h1>申请会员卡</h1>
<form action="/OneServlet">
<table border="1px solid red">
<tr>
<td> 用户名: </td>
<td> <input type="text" name="userName" /> </td>
</tr>
<tr>
<td> 预存金额: </td>
<td> <input type="text" name="money" /> </td>
</tr>
<tr>
<td> <input type="submit" value="申请会员卡"/> </td>
</tr>
</table>
</form>
</center>
</body>
</html>
开卡Servlet
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/OneServlet")
public class OneServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//处理请求头中的参数
String userName = request.getParameter("userName");
String money = request.getParameter( "money" );
//创建两个cookie对象
Cookie card1 = new Cookie( "userName" ,userName );
Cookie card2 = new Cookie( "money" , money );
//将Cookie对象发送到响应头中去
response.addCookie( card1 );
response.addCookie( card2 );
//将订餐页面写入响应头中
RequestDispatcher rd = request.getRequestDispatcher("/index2.html");
rd.forward( request ,response );
//response.sendRedirect( "/index2.html" );
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
点餐页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
<h1>订餐页面</h1>
<form action="/TwoServlet">
食物类型: <input type="radio" name="food" value="饺子"/>饺子 (30元)
<input type="radio" name="food" value="面条"/>面条 (20元)
<input type="radio" name="food" value="盖饭"/>盖饭 (10元)<br>
<input type="submit" value="划卡消费"/>
</form>
</center>
</body>
</html>
消费页面
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/TwoServlet")
public class TwoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//三种食物的单价
int jz_money = 30;
int mt_money = 20;
int gf_money = 10;
//食物类型
String food = null,userName = null;
//卡的用户名
//卡里预存的钱
int money = 0;
//消费的钱数;
int xiaofei = 0;
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
//创建一张新卡,用于将消费之后的数据更新然后归还给用户
Cookie newCard = null;
//处理请求参数判断订餐的food类型
food = request.getParameter("food");
//读取请求体中的Cookie
Cookie[] cookies = request.getCookies();
//根据食物类型进行消费;
if ( cookies != null ){
for (Cookie cookie : cookies) {
//Cookie的key
String key = cookie.getName();
//Cookie的value
String value = cookie.getValue();
//根据不同的消费来处理消费情况
if ( "userName".equals(key) ){
userName = value;
}else if ("money".equals(key)){
money = Integer.valueOf( value );
if ( "饺子".equals(food) ){
if (jz_money > money){
pw.print( "用户" + userName + "余额不足,充值" );
}else {
newCard = new Cookie( "money" , (money - jz_money) + "");
xiaofei = jz_money;
}
}else if ("面条".equals(food)){
if (mt_money > money){
pw.print( "用户" + userName + "余额不足,充值" );
xiaofei = mt_money;
}else {
newCard = new Cookie( "money" , (money - mt_money) + "" );
xiaofei = mt_money;
}
}else if ("盖饭".equals(food)){
if (gf_money > money){
pw.print( "用户" + userName + "余额不足,充值" );
}else {
newCard = new Cookie( "money" , (money - gf_money) + "" );
xiaofei = gf_money;
}
}
}
}
}
//将Cookie对象(消费过后的卡归还用户)
response.addCookie( newCard );
//在for后面来打印消费信息
pw.print("用户" + userName + "本次消费" + xiaofei + ",余额:" + (money - xiaofei));
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
成品展示