需求
实现买书购物车,图书信息后面有一个“添加到购物车”的链接,单机,可以将图书添加到购物车。页面底部有一个“查看购物车”链接,点击跳转到购物车页面,购物车内容显示时,后面有一个“删除”链接,单机,又能将该图书从购物车中删除,要求所有动作用Servlet完成。
实现思路
- 首先,我们要从数据库中拿出数据,显示到页面上
- 当我们点击“添加到购物车”的时候,将这本书的书名作为参数传递到相应的Servlet,用ArrayList保存到session域中
- 点击“查看购物车”,跳转到购物车页面,购物车页面获取session域中保存的ArrayList,并将其显示在页面上
- 点击“删除”,再将相应的书名作为参数传递给相应的Servlet,接收参数后的Servlet将该书名从ArrayList中remove掉,然后更新session域中的ArrayList
具体代码
@WebServlet("/servlet/query")
public class QueryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码格式
request.setCharacterEncoding("utf-8");
//接收前端参数
String bookName = request.getParameter("bookName");
QueryService service = new QueryServiceImp();
ArrayList<TBook> bookList = new ArrayList<TBook>();
//调用service层,获取查询到的数据
bookList = service.selectTBookByBookNameLike(bookName);
//将查到的数据放入到request域中
request.setAttribute("bookList", bookList);
//跳转到显示图书列表的页面
ServletContext application = this.getServletContext();
RequestDispatcher rd = application.getRequestDispatcher("/jsp/page01.jsp");
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
以上代码,使用了DAO设计模式访问数据库,并调用service层获得数据
<form action="${pageContext.request.contextPath }/servlet/query" method="get">
请输入你要找的书籍:<input type="text" name="bookName">
<input type="submit" value="提交">
</form>
<table>
<%
ArrayList<TBook> bookList = (ArrayList<TBook>)request.getAttribute("bookList");
if(bookList != null){
for(int i = 0;i < bookList.size();i++){
%>
<tr>
<%
TBook tBook = bookList.get(i);
%>
<td><%=tBook.getBookId() %></td>
<td><%=tBook.getBookName() %></td>
<td><%=tBook.getBookPrice() %></td>
<td><a href="${pageContext.request.contextPath }/servlet/add?bookName=<%=tBook.getBookName() %>">添加到购物车</a></td>
</tr>
<%
}
}
%>
</tr>
</table>
<a href="${pageContext.request.contextPath }/jsp/car.jsp">查看购物车</a>
这是显示书籍的前端界面
@WebServlet("/servlet/add")
public class AddServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//保存所有添加到购物车的书本
ArrayList<String> bookList = new ArrayList<String>();
//获取参数
String bookName = request.getParameter("bookName");
bookList.add(bookName);
//获取session对象
HttpSession session = request.getSession();
session.setAttribute("bookList", bookList);
//跳转回买书页面
ServletContext application = this.getServletContext();
RequestDispatcher rd = application.getRequestDispatcher("/jsp/page01.jsp");
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
处理添加到购物车业务的Servlet
@WebServlet("/servlet/delete")
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session域对象
HttpSession session = request.getSession();
ArrayList<String> bookList = (ArrayList<String>) session.getAttribute("bookList");
//获得要删除的书
String bookName = request.getParameter("bookName");
bookList.remove(bookName);
//将bookList重新放入到session域中
session.setAttribute("bookList", bookList);
//跳转回购物车页面
response.sendRedirect("/test02_2/jsp/car.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
处理从购物车中删除业务的Servlet
小结
其实最主要的是搞懂需求的逻辑,实现思路,然后码代码就很快了。