您的位置:首页 > 运维架构 > 网站架构

Servlet学习笔记---用Session做简单买书网站

2016-08-27 20:54 253 查看
无论是哪种方式,Book都相同

Book类

class  Book
{
String id;
String name;
String description;
private static Map<String,Book> map=new LinkedHashMap();
static{
map.put("1",new Book("1","javaweb","a good book!"));
map.put("2",new Book("2","spring","a good book!"));
map.put("3",new Book("3","jsp","a good book!"));
}
public static Map<String,Book>  getMap()
{
return map;
}
public Book(String id, String name, String description) {
super();
this.id = id;
this.name = name;
this.description = description;
}
public Book() {
super();
// TODO Auto-generated constructor stub
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}

}
最初方案:

如果用户限制了Cookie,便要通过URL来携带图书信息。

pay.java

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
Writer out=response.getWriter();

HttpSession sess=request.getSession(false);
if(sess==null)
{
out.write("您未购买任何书");
return ;
}
String id=request.getParameter("id");
Map<String,Book>map=Book.getMap();
Book book=map.get(id);
LinkedList<Book> link=(LinkedList) sess.getAttribute("booklist");
if(link==null)
{
link=new LinkedList<Book>();
}
link.add(book);
sess.setAttribute("booklist", link);
out.write("您已购买如下书籍:<br/>");
for(Book b:link)
{			out.write(b.getName()+"该书"+book.getDescription()+"<br/>");
}
}
buy.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
Writer out=response.getWriter();

HttpSession sess=request.getSession();

Map<String,Book>map=Book.getMap();
out.write("本网站有以下书籍:<br/>");
for(Map.Entry<String, Book> entry:map.entrySet())
{
Book book=entry.getValue();
out.write(book.getName()+"<a href='"+"/SessionShop/servlet/Pay?id="+book.getId()+"'>购买</a><br/>");
}
}
这种方案问题是每次一刷新,都会添加一件物品进购物单。

为解决此问题,便需要重定向。

buy.java中修改代码:

for(Map.Entry<String, Book> entry:map.entrySet())
{
Book book=entry.getValue();
out.write(book.getName()+"<a href='"+"/SessionShop/servlet/mid?id="+book.getId()+"'>购买</a><br/>");
}
mid.java来处理数据加入,重定向到pay.java

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
Writer out=response.getWriter();

HttpSession sess=request.getSession(false);
if(sess==null)
{
out.write("您未购买任何书");
return ;
}
String id=request.getParameter("id");
Map<String,Book>map=Book.getMap();
Book book=map.get(id);
LinkedList<Book> link=(LinkedList) sess.getAttribute("booklist");
if(link==null)
{
link=new LinkedList<Book>();
}
link.add(book);
sess.setAttribute("booklist", link);

response.sendRedirect("/SessionShop/servlet/Pay");
pay.java只是展示。

上述方案,还有储存问题,就是用户购买了书籍后,退出浏览器,重新查看,购物车没有选过的书籍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息