六,本设计Servlet&Jsp代码实现过程
用一句话概括,用户在客户端请求jsp页面,jsp页面将结果提交到Servlet,由Servlet负责处理结果,访问数据库等操作,并将参数结果放在request,session,application等元素中,然后通过请求转发和重定向转发到其他jsp页面或者Servlet
6.1进入主页和查看书籍详细信息功能
客户通过客户端请求地址http://localhost:8080/ShoppingCart/frame.jsp,请求主页面,主页面采用框架标签frameset,框架中页面再转发请求Http://localhost:8080/ShoppingCart/PageQueryServlet, 返回的books.jsp页面
frame.Jsp的代码
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
package com.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.Dao.PageQueryDao;
import com.beans.Book;
public class PageQueryServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int currpage=1;
if(request.getParameter("page")!=null){
currpage=Integer.parseInt(request.getParameter("page"));
}
PageQueryDao pagedao=new PageQueryDao();
List<Book> list=pagedao.getPageList(currpage);//查询当前页记录
request.setAttribute("list", list);
int pages; //计算查询总页数
int count=pagedao.FindCounts();
if(count%Book.PAGE_SIZE==0){
pages=count/Book.PAGE_SIZE;
}
else{
pages=count/Book.PAGE_SIZE+1;
}
StringBuffer sb=new StringBuffer();
//构建分页条
for(int i=1;i<=pages;i++){
if(i==currpage){
sb.append("『" + i + "』");
}
else{
sb.append("<a href='PageQueryServlet?page="+i+"'>"+i+"</a>");
}
sb.append(" ");
}
request.setAttribute("bar", sb.toString());
request.getRequestDispatcher("books.jsp").forward(request, response); //请求转发
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Books.jsp是显示书籍
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
<%@page import=“java.util.List”%>
<%@page import=“com.beans.Book”%>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<style type="text/css">
a:link{color:#FF4500;text-decoration:none}/*未访问,红色,无下划线*/
a:active{color:blue;}/*激活,红色*/
a:visited{color:red;text-decoration:none}/*已访问,紫色,无下划线*/
a:hover{color:yellow;text-decoration:underline}/*鼠标移动上面,蓝色,下划线*/
</style>
<%! int i=1,j=1; %> <% List list=(List)request.getAttribute("list");%> <% for(j=1;j<=2;j++){ %> <% for(Book b:list){ if(j==2){ if(b.getBookId()<=3||(b.getBookId()>=7&&b.getBookId()<=9)) continue; } %> <% if(b.getBookId()%3==0) break; %> <%} %> <%} %>
喵喵网上书店 | |||||
ISDN :<%=b.getBookId() %> 书 名:<%=b.getName() %> 作 者:<%=b.getAuthor() %> 出 版:<%=b.getPublisher() %> 价 格:<%=b.getPrice() %> 查看详细信息 | |||||
<%= request.getAttribute("bar") %> |
点击“查看详细信息”会把该书的bookId放入request中,然后跳转到相应的书的详细信息页:
Id=1的书的代码,1.jsp
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
<%@ page import=“com.Dao.BookDao” %>
<%@ page import=“com.beans.Book” %>
<br><br><br><br>
<form action="http://localhost:8080/ShoppingCart/CheckLogin?bookid=<%=b.getBookId() %>" method="post" name="checkform">
<table align="center" width="800">
<tr>
<td width="100" height="140"><img src="Http://localhost:8080/ShoppingCart/images/<%=String.valueOf(b.getBookId()-1) %>.jpg"/></td>
<td >
<font color="#000000" face="隶书" size="4">ISDN :<%=b.getBookId() %></font><br>
<font color="#000000" face="隶书" size="4"> 书 名:<%=b.getName() %></font><br>
<font color="#000000" face="隶书" size="4"> 作 者:<%=b.getAuthor() %></font><br>
<font color="#000000" face="隶书" size="4">出 版:<%=b.getPublisher() %></font><br>
<font color="#000000" face="隶书" size="4">价 格:<%=b.getPrice() %> </font><br>
</td>
</tr>
<tr><td colspan="2"> <hr color="#FF0000"></td></tr>
<tr>
<td colspan="2"> <h2><font color="#8B0000" face="隶书">简介:</font></h2></td>
</tr>
<tr>
<td colspan="2">
<p style="font-family:'楷体'"> 《三国演义》是中国第一部长篇章回体历史演义小说,以描写东汉末年的战争为主,反映了魏、蜀、吴三个政治集团之间的政治和军事斗争。分为黄巾之乱、董卓之乱、三国鼎立三大部分。在广阔的背景上,上演了一幕幕气势磅礴的战争场面。</p>
<p style="font-family:'楷体'"> 罗贯中将兵法三十六计融于字里行间,既有情节,也有兵法韬略。本书反映了丰富的历史内容,人物名称、地理名称、主要事件和人物性格与《三国志》基本相同,是在固定形象基础上,进行再发挥,这也是历史演义小说的套路。本书一方面反映了真实的三国历史,照顾到读者希望了解真实历史的需要;另一方面,根据明朝社会的实际情况对三国人物进行了夸张、美化、丑化等等。</p></td>
</tr>
<tr>
<td colspan="2" align="right">
<input value="加入购物车" type="submit"> <a href="Http://localhost:8080/ShoppingCart/PageQueryServlet">继续购物</a></td>
</tr>
</table>
</form>
<% if(msg!=null){ %>
<%=msg %>
<%} %>
结果图:
在该页面中点击“加入购物车”,请求会提交到CheckLogin的Servlet,在该Servlet中完成检查用户有无登录的操作和将书加入到该用户的购物车的操作。如果用户为登录会“用户为登录”窗口提示信息,如果登录了,就成功加入了该用户的购物车,感觉淘宝的模式有点像,点击该用户的“查看我的购物车”即可看到刚加的书籍。若购物车中有书籍会提示“此书已加入购物车,请勿重复添加!”,只需在购物车中调整购买数量即可。
CheckLogin.java
package com.servlets;
import java.io.IOException;
import java.io.PrintWriter;
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 com.Dao.BookDao;
import com.Dao.CartDao;
import com.beans.Book;
public class CheckLogin extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding(“gb2312”);
HttpSession session=request.getSession();
//String user=(String) session.getAttribute(“user”);//从session中获取用户
System.out.println("加入购物车");
String bookid=request.getParameter("bookid");
BookDao bookdao=new BookDao();
Book b=bookdao.getBookById(Integer.parseInt(bookid));//通过传过来的bookid返回书的对象
System.out.println("以获取用户");
if( session.getAttribute("userid")==null){//如果用户未登录
System.out.println("用户未空");
request.setAttribute("msg", "<script language='javascript'>window.alert('用户未登录!');</script>");
request.getRequestDispatcher("BookInfo/"+b.getBookId()+".jsp").forward(request, response);
}
else{
//加入购物车的操作
CartDao cartdao=new CartDao();
String userid=(String)session.getAttribute("userid");
//System.out.println(b.getName());
//System.out.println((String)session.getAttribute("userid"));
boolean cc=cartdao.isContainBook(userid, bookid);
if(cc){//如果此书已添加
request.setAttribute("msg", "<script language='javascript'>window.alert('此书已加入购物车,请勿重复添加!');</script>");
request.getRequestDispatcher("BookInfo/"+b.getBookId()+".jsp").forward(request, response);
}else{//如果此书没添加
boolean bb=cartdao.InsertBook((String)session.getAttribute("userid"), b);
if(bb){//如果插入书籍成功
/*PrintWriter out=response.getWriter();
out.print("<script language='javascript'>window.alert('成功加入购物车!');</script>");
out.flush();
out.close();*/
request.setAttribute("msg", "<script language='javascript'>window.alert('成功加入购物车!');</script>");
request.getRequestDispatcher("BookInfo/"+b.getBookId()+".jsp").forward(request, response);
}
else{
request.setAttribute("msg", "<script language='javascript'>window.alert('加入购物车失败!');</script>");
request.getRequestDispatcher("BookInfo/"+b.getBookId()+".jsp").forward(request, response);
}
}
}
}
}
6.2用户注册和用户登录功能
在用户登录使用之前用户首先要注册,注册过程我采用的是为每个用户新建一张表,这张表就代表了该用户的购物车,存放的是该用户选购的书籍
Register.jsp是显示注册的代码
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
<table align="center" width="300" >
<tr>
<td colspan="2" align="center" style="color:#00F;font-size;36px" rowspan="1"><b>用户注册</b></td>
</tr>
<tr>
<td>账 号:</td>
<td><input name="ID" type="text" > </td>
</tr>
<tr>
<td>密 码:</td>
<td><input name="Password" type="password" > </td>
</tr>
<tr>
<td>性 别:</td>
<td><input name="Sex" type="radio" value="男">男 <input name="Sex" type="radio" value="女">女</td><!--单选按钮-->
</tr>
<tr>
<td>电话号码:</td>
<td><input name="Phone" type="text"/></td>
</tr>
<tr>
<td>家 乡:</td>
<td>
<select name="Home" ><!--下拉列表-->
<option value="北 京">北 京</option>
<option value="上 海">上 海</option>
<option value="广 州">广 州</option>
<option value="深 圳">深 圳</option>
</select>
</td>
</tr>
<tr>
<td>电子邮件:</td>
<td><input name="Email" type="text"/></td>
</tr>
<tr>
<td>上传头像:</td>
<td >
<div style="border:1px solid;width:50px;height:50px;" >
<img name="place" src="Sheader/1.jpg" width="50" height="50"></img>
</div>
<select name="Header" style="width:50px;" οnclick="selectheader()"><!--下拉列表-->
<option value="Sheader/1.jpg" >1</option>
<option value="Sheader/2.jpg" >2</option>
<option value="Sheader/3.jpg" >3</option>
<option value="Sheader/4.jpg" >4</option>
<option value="Sheader/5.jpg" >5</option>
<option value="Sheader/6.jpg" >6</option>
<option value="Sheader/7.jpg" >7</option>
<option value="Sheader/8.jpg" >8</option>
<option value="Sheader/9.jpg" >9</option>
<option value="Sheader/10.jpg" >10</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value=" 注 册 " > <input type="button" value=" 取 消 " οnclick="cancelregister()"></td>
</tr>
</table>
</form>
结果图:
该注册页面点击“取消”会返回显示书籍的主页面,点击“注册”请求提交到RegServlet,注册成功之后会弹出一个注册成功提示框并且数据库会生成以账号为表名的表:
RegServlet.java
package com.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.Dao.UserDao;
import com.tools.DBConnection;
public class RegServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
String id= request.getParameter("ID");
String password=request.getParameter("Password");
String sex= request.getParameter("Sex");
String phone=request.getParameter("Phone");
String home=request.getParameter("Home");
String email=request.getParameter("Email");
String header=request.getParameter("Header");
DBConnection DB=new DBConnection();
Connection conn=null;
conn=DB.getCon();
if(conn!=null){
try {
UserDao dao=new UserDao();
if(!dao.isContainUser(id)){//是否存在用户
String sql="insert into users values(?,?,?,?,?,?,?)";
PreparedStatement pstm=conn.prepareStatement(sql);
pstm.setString(1, id);
pstm.setString(2, password);
pstm.setString(3, sex);
pstm.setString(4, phone);
pstm.setString(5, home);
pstm.setString(6, email);
pstm.setString(7, header);
pstm.executeUpdate();
System.out.println("注册成功!");
//同时新建一张购车表,即每个用户注册成功都会建一张表
String sql1="create table "+id+"(ID int(20),Name varchar(20),Price varchar(20),Num int(20),Total int(20),primary key(ID))";
PreparedStatement pstm1=conn.prepareStatement(sql1);
pstm1.executeUpdate();
response.sendRedirect("Http://localhost:8080/ShoppingCart/PageQueryServlet");//登录成功后重定向到books界面
}
else{
PrintWriter out=response.getWriter();
out.print("<script language='javascript'>window.alert('注册失败!');</script>");
out.flush();
out.close();
System.out.println("用户已存在!");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Bug分析:
本来想搞个上传头像的功能,但是感觉图片规格大小之类的技术不太会,只想出了使用剪辑好了的图片作为备选项,想实现选中了某个头像就更换显示对应的头像,这涉及了web前端的javascript知识,我只懂一点点,所以就没有修改了……
用户登录功能:
Login.jsp
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
欢迎登陆网上书店系统
账 号: | |
密 码: | |
该页面有三部分,登录框,公告信息,友情链接。
登录框很简单form提交到LoginServlet就可以了,在LoginServlet中查询数据库判断等操作:
LoginServlet.java
package com.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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 com.Dao.BookDao;
import com.Dao.UserDao;
import com.beans.Book;
import com.beans.User;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
System.out.println("接收数据");
String id=request.getParameter("id");//获得用户名
String password=request.getParameter("password");//获得密码
UserDao dao=new UserDao();
BookDao bdao=new BookDao();
User user=null;
user=dao.getUser(id, password);
HttpSession session=request.getSession();
if(user!=null){
System.out.println("用户已查到");
session.setAttribute("userid",user.getID());//把查到的用户放进session中,便于登录检查
response.sendRedirect("loginsuccess.jsp");
}
else
{
PrintWriter out=response.getWriter();
out.print("<script type='text/javascript'>");
out.print("window.alert('用户名或密码不正确!');");
out.print("</script>");
out.flush();
out.close();
}
}
}
公告信息采用Ajax技术,不刷新页面更新
关键代码:
公告信息:结果图:
6.3查看购物车,商品结算和生成订单功能
点击“查看我的购物车”,表单提交到CartServlet,在此CartServlet中查询该用户的购物车表,查询所有已添加到购物车的书籍,并请求转发到Carts.jsp
CartServlet.java
package com.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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 com.Dao.CartDao;
import com.beans.CartBook;
public class CartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session=request.getSession();
String userId=(String) session.getAttribute("userid");//登录成功后用户的Id放在session中
System.out.println(userId);
String m=request.getParameter("m");//删除书籍的时候判断标记
if(m!=null){
if(m.equals("1")){
request.setAttribute("msg", "<script language='javascript'>window.alert('成功删除!');</script>");
}
else if(m.equals("0")){
request.setAttribute("msg", "<script language='javascript'>window.alert('删除失败!');</script>");
}
else if(m.equals("2")){
request.setAttribute("msg", "<script language='javascript'>window.alert('清空购物车失败!');</script>");
}
}
CartDao ccdao=new CartDao();
List<CartBook> list=ccdao.getAllCartBooks((String)session.getAttribute("userid"));
request.setAttribute("booklist", list);//把已购买的书单放进request中
request.getRequestDispatcher("Carts.jsp").forward(request, response);
}
}
Carts.jsp
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
<%@ page import=“com.beans.CartBook” import=“com.Dao.CartDao”%>
<table align="center" width="900" >
<tr bgcolor="#ff0000" >
<td colspan="8"><font face="隶书" size="5" >我的购物车</font></td>
</tr>
<tr>
<td width="60" align="center" ><font color="blue"><b>商品</b></font></td>
<td align="center" ><font color="blue"><b>商品名称</b></font></td>
<td align="center"><font color="blue"><b>价格</b></font></td>
<td align="center" width="20"></td>
<td align="center" width="60"><font color="blue"><b>数量</b></font></td>
<td align="center" width="20"></td>
<td align="center"><font color="blue"><b>总价</b></font></td>
<td align="center"><font color="blue"><b>操作</b></font></td>
</tr>
<tr>
<td colspan="8"><hr></td>
</tr>
<%
List<CartBook> list=(List<CartBook>)request.getAttribute("booklist");
String userid=(String) session.getAttribute("userid");
CartDao cdao=new CartDao();
int total=cdao.getTotalPrice(userid);
// int total=0;
int i=1;
System.out.print(list.size());
%>
<%
if(list.size()==0){
%>
<tr>
<td colspan="8" align="center" height="30">请添加书籍!</td>
</tr>
<%
}
else{
for(i=0;i<list.size();i++){
%>
<tr align="center">
<td height="80" width="60"><img src="Simages/<%=list.get(i).getBookId()-1 %>.jpg"></td>
<td align="center"><%=list.get(i).getName() %></td>
<td align="center">¥<%=list.get(i).getPrice()%></td>
<td align="center" width="20">
<form action="UpdateNumServlet?bookidtext=<%=list.get(i).getBookId() %>" method="post" name="numform"><!--减数量 -->
<br>
<input value="-" type="submit" name="sub" >
<input type="hidden" value="-1" name="hid">
</form>
</td>
<td align="center" width="60">
<input type="text" size="10" readonly value="<%=list.get(i).getNum() %>" style="text-align:center">
</td>
<td align="center" width="20">
<form action="UpdateNumServlet?bookidtext=<%=list.get(i).getBookId() %>" method="post" ><!-- 加数量 -->
<br>
<input value="+" type="submit" name="add" >
<input type="hidden" value="1" name="hid">
</form>
</td>
<td align="center">¥<%=list.get(i).getTotal()%></td>
<td align="center">
<a href="http://localhost:8080/ShoppingCart/DeleteBookServlet?bookid=<%=list.get(i).getBookId()%>">删除</a>
</td>
</tr>
<%} }%>
<tr>
<td colspan="8"><hr></td>
</tr>
<tr>
<td width="80">总金额:</td>
<td colspan="7">¥<%=total %></td>
</tr>
<tr>
<td colspan="8"><hr></td>
</tr>
<tr>
<td colspan="2">
<a href="ClearCartServlet">清空购物车</a>
</td>
<td align="right" colspan="6" valign="bottom">
<form action="orders.jsp" method="post">
<br>
<input value="商品结算" type="submit"> <a href="http://localhost:8080/ShoppingCart/PageQueryServlet">返回继续购物</a>
</form>
</td>
</tr>
<tr>
<td colspan="8"><hr></td>
</tr>
</table>
<%
String msg=(String)request.getAttribute("msg"); //弹窗信息
if(msg!=null){ %>
<%=msg %>
<%} %>
购物车结果图:
在这个购物车页面中会有比较多的功能,比如:删除书籍,清空购物车,修改书籍数量,商品结算等功能
删除书籍:
点击“删除”请求提交到DeleteBookServlet,该Servlet中实现删除操作
DeleteBookServlet.java
package com.servlets;
import java.io.IOException;
import java.io.PrintWriter;
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 com.Dao.CartDao;
public class DeleteBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
HttpSession session=request.getSession();
String userid=(String)session.getAttribute("userid");
String bookid=request.getParameter("bookid");
CartDao cartdao=new CartDao();
boolean b=cartdao.DeleteBook(userid, Integer.parseInt(bookid));//删除书籍
if(b){
System.out.println("删除成功");
response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet?m=1");
}
else{
response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet?m=0");
}
}
}
清空购物车:
点击“清空购物车”,请求提交到ClearCartServlet
ClearCartServlet.java
package com.servlets;
import java.io.IOException;
import java.io.PrintWriter;
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 com.Dao.CartDao;
public class ClearCartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session=request.getSession();
String userid=(String)session.getAttribute("userid");
CartDao cd=new CartDao();
boolean b=cd.ClearCartBook(userid);
if(b){
response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet");
}
else{
response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet?m=2");
}
}
}
修改书籍数量:点击“+”/“-”操作,请求提交到UpdateNumServlet,修改数量之后总价格也会变化,修改完成之后重定向到本页面
UpdateNumServlet.java
package com.servlets;
import java.io.IOException;
import java.io.PrintWriter;
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 com.Dao.CartDao;
public class UpdateNumServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
HttpSession session=request.getSession();
String userid=(String)session.getAttribute("userid");
int bookid=Integer.parseInt((String)request.getParameter("bookidtext"));
String hid=(String)request.getParameter("hid");
int dnum=Integer.parseInt(hid);//hid的值是+1,-1
CartDao cd=new CartDao();
cd.ModifyNum(userid, bookid, dnum);
System.out.println("进入修改数目servlet");
response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet");
}
}
商品结算:
点击“商品结算”,请求提交到orders.jsp
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
填写订单信息: | |
| |
收货人信息 | |
收 货 人: | |
详细地址: | |
邮政编码: | |
移动电话: | 固定电话:(如:027-12345678) |
送货方式: | |
普通快递送货上门 送货时间: --请选择送货时间-- 三天内 一周内 十天内 (支持货到付款)【运费5元】 | |
普通邮递(不支持货到付款)【运费8元】 | |
邮政特快专递(不支持货到付款)【运费20元】 | |
支付方式: | |
网上支付 工商银行 中国银行 建设银行 支付宝支付 | |
货到付款 | |
邮政汇款 | |
银行转账 | |
给卖家留言: | |
| |
点击”生成订单”,请求提交到OrderServlet,此Servlet需要 封装order.jsp的所有信息,然后请求转发到确认页面
OrderServlet.java
package com.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 com.Dao.CartDao;
import com.beans.CartBook;
public class OrderServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String receiver=request.getParameter("receiver");
String address=request.getParameter("address");
String post=request.getParameter("post");
String mobile=request.getParameter("mobile");
String fixphone=request.getParameter("fixphone");
String songhuoway=request.getParameter("songhuoway");
String songhuotime=request.getParameter("songhuotime");
String payway=request.getParameter("payway");
String message=request.getParameter("message");
int yunfei=0;
if(songhuoway.equals("<b>普通快递送货上门 。</b>【运费5元】 ")){
yunfei=5;
}
else if(songhuoway.equals("<b>普通邮递</b>(不支持货到付款)【运费8元】")){
yunfei=8;
}
else if(songhuoway.equals("<b>邮政特快专递</b>(不支持货到付款)【运费20元】")){
yunfei=20;
}
Map<String,String> hashmap=new HashMap<String,String>();
hashmap.put("receiver",receiver);
hashmap.put("address", address);
hashmap.put("post", post);
hashmap.put("mobile", mobile);
hashmap.put("fixphone", fixphone);
hashmap.put("songhuoway", songhuoway);
hashmap.put("songhuotime", songhuotime);
hashmap.put("payway", payway);
hashmap.put("message", message);
hashmap.put("yunfei", String.valueOf(yunfei));//把运费也传过去
request.setAttribute("hashmap", hashmap);//封装订单信息
HttpSession session=request.getSession();
CartDao ccdao=new CartDao();
List<CartBook> list=ccdao.getAllCartBooks((String)session.getAttribute("userid"));
request.setAttribute("booklist", list);//把已购买的书单放进session中
request.getRequestDispatcher("confirmorder.jsp").forward(request, response);
}
}
Bug分析:
1,确认页面没有返回按钮。
2,点击“退出登录”之后,虽然在session中销毁了userid,但是右框架页面还停留在之前的页面,不能返回到主页面。
3,当没有注册就登录时,也能到成功登录界面,只不过用户名是“null”,应该给出提示信息@TOC
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎