【发布时间】:2015-04-27 01:31:51
【问题描述】:
我对使用 Servlet 和 JSP 很陌生,但我想知道是否有人可以帮助我解决以下问题。
我的问题源于我的 Servlet 没有被调用,我似乎无法弄清楚原因。
目前我的 steup 是我有一个名为 VisitShopFilter 的过滤器类,它检查客户是否在他们访问商店之前登录,如果他们登录,它只是将请求转发到 shop.jsp 页面,如果他们没有然后它将它们转发到 login.jsp 页面。
这是 VisitShopFilter:
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpSession sess = ((HttpServletRequest)servletRequest).getSession();
if(sess.getAttribute("loggedIn") == null){
servletRequest.getRequestDispatcher("login.jsp").forward(servletRequest,servletResponse);
return;
}
if(sess.getAttribute("cart") == null){
sess.setAttribute("cart",new ShoppingCart());
}
servletRequest.getRequestDispatcher("shop.jsp").forward(servletRequest,servletResponse);
}
过滤器映射到 URL 模式 /Shop
在 shop.jsp 页面上,我有以下表单:<form onaction="Shop" method = "POST">
<input type = "hidden" name = "itemname" value = "testItem"/>
<input type = "hidden" name = "itemprice" value = "10.00"/>
<input type = "hidden" name = "itemquantity" value = "1"/>
<button type="submit" class="btn btn-default btn-submit">Add to cart</button>
</form>
我还有一个名为“Shop”的 Servlet:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("responding to post");
if(req.getSession().getAttribute("cart") == null || req.getSession().getAttribute("loggedIn") == null){
req.getRequestDispatcher("login.jsp").forward(req,resp);
}
ShoppingCart cart = (ShoppingCart) req.getSession().getAttribute("cart");
try{
cart.addItem(
req.getParameter("itemname"),
Double.valueOf(req.getParameter("itemprice")),
Integer.valueOf(req.getParameter("itemquantity"))
);
}catch (NumberFormatException e){
e.printStackTrace();
}
req.getSession().setAttribute("itemNamesInCart",cart.getItemNames());
req.getSession().setAttribute("itemPricesInCart",cart.getItemPrices());
req.getSession().setAttribute("itemQuantitiesInCart",cart.getItemQuantities());
req.getSession().setAttribute("totalItemsInCart",cart.getTotalCartSize());
req.getSession().setAttribute("totalPurchasePrice",cart.getTotal());
req.getRequestDispatcher("shop.jsp").forward(req, resp);
}
我的问题是,单击表单的提交按钮时甚至没有打印出“回复帖子”。在我的 web.xml 文件中,我尝试将 servlet 映射到 /Shop、/shop.jsp 和其他一些东西,包括在 GET 和 POST 方法之间切换,但我似乎无法弄清楚我做错了什么。
感谢您的帮助!
【问题讨论】:
-
请也发布您的 web.xml。
-
该 POST 请求的 URL 路径是什么?尝试在表单上设置它(也许你想用
onaction='Shop'来做,应该是action='Shop')。 -
你应该有行 chain.doFilter(request, response);在你的 doFilter 方法中的某个地方。