2016-03-29 2 views
-1

Я не могу найти, что не так с моим webApp. Это мой первый проект, и я немного застрял. Все, что я знаю, это то, что что-то происходит неправильно в ShoppingCart.java всякий раз, когда я нажимаю кнопку «Добавить в корзину» в index.html, он дает мне код ошибки серии 500, который я пытался просмотреть в консоли, но не понял его полностью. Это очень простой код, пожалуйста, скажите мне, если вы видите что-то ..Ошибка сервлета ShoppingCart?

index.html

<table border="1px"> 
    <th>PIZZA NAME</th>  <th>PRICE</th> <th>ADD TO CART</th> 
    <form action="addToCart"> 
     <tr> 
      <td> Peppereno</td> 
      <td> 20$ </td> 
      <td align="center"> 
       <input type="hidden" name="name" value="peppereno"/> 
       <input type="hidden" name="price" value="20"/> 
       <input type="submit" value="Add to Cart"/> 
      </td> 
     </tr>  
    </form> 

    <form action="addToCart"> 
     <tr> 
       <td> Barbeque</td> 
       <td> 10$</td> 
       <td align="center"> 
       <input type="hidden" name="name" value="barbeque"> 
       <input type="hidden" name="price" value="10"/> 
       <input type="submit" value="Add to Cart" /> 
       </td> 

     </tr> 
    </form>  

    <form action="addToCart"> 
     <tr> 
      <td> Farmhouse</td> 
      <td> 35$ </td> 
      <td align="center"> 
       <input type="hidden" name="name" value="farmhouse"/> 
       <input type="hidden" name="price" value="35"/> 
       <input type="submit" value="Add to Cart"/> 
      </td> 
    </form> 
</table> 

Cart.java

package com.cart; 

import java.util.HashMap; 

public class Cart { 
    HashMap<String, Integer> cartItems; 

    public Cart() { 
     cartItems = new HashMap<>(); 
    } 

    public HashMap<String, Integer> getItems() { 
     return cartItems; 
    } 

    public void addToCart(String item, Integer price) { 
     cartItems.put(item, price); 
    } 

    public void deleteFromCart(String item) { 
     cartItems.remove(item); 
    } 
} 

ShoppingCart.java

package com.cartServlet; 

import com.cart.*; 

@WebServlet("/ShoppingCart") 
public class ShoppingCart extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public ShoppingCart() { 
     super(); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     response.setContentType("text/html"); 
     HttpSession session = request.getSession(); 
     Cart shoppingCart = (Cart) session.getAttribute("cart"); 
     if (shoppingCart == null) { 
      shoppingCart = new Cart(); 
      session.setAttribute("cart", shoppingCart); 
     } 
     String name = request.getParameter("name"); 
     Integer price = Integer.parseInt(request.getParameter("price")); 
     shoppingCart.addToCart(name, price); 
     session.setAttribute("cart", shoppingCart); 

     RequestDispatcher dispatch = request.getRequestDispatcher("response.html"); 
     dispatch.include(request, response); 

     HashMap<String, Integer> items = shoppingCart.getItems(); 

     PrintWriter out = response.getWriter(); 
     out.println("<table border='1px'>"); 

     for (String key : items.keySet()) { 
      out.println("<tr><td>" + key + " - </td><td>" + "$" + items.get(key) + "</td></tr>"); 
     } 

     out.println("</table>"); 
    } 
} 

response.html

<h3>Pizza successfully added to the cart</h3> 
<form action="index.html"> 
Add more pizza to cart<input type ="submit" value="go"/> 
</form> 
<h2>Cart</h2> 

web.xml

<servlet> 
    <servlet-name>abc</servlet-name> 
    <servlet-class>com.cartServlet.ShoppingCart</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>abc</servlet-name> 
    <url-pattern>/addToCart</url-pattern> 
</servlet-mapping> 

logFile

Mar 30, 2016 7:42:26 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [abc] in context with path  [/ShoppingCart] threw exception 
    java.lang.IllegalStateException: getOutputStream() has already been called for this response 
    at org.apache.catalina.connector.Response.getWriter(Response.java:679) 
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:213) 
    at com.cartServlet.ServletCart.doGet(ServletCart.java:46) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 
+0

Просьба предоставить исключение из файла журнала. – tak3shi

+0

@ tak3shi Я добавил файл журнала, пожалуйста, взгляните на него .... – vinay

ответ

0

Я думаю, что вы используете @WebServlet ("/ ShoppingCart") из-за которой шаблон URL становится http://host:port/ShoppingCart вместо http://host:port/addToCart Так я предлагаю вы должны изменить действие в своем html с помощью

<form action="ShoppingCart"> <tr> <td> Farmhouse</td> <td> 35$ </td> <td align="center"> <input type="hidden" name="name" value="farmhouse"/> <input type="hidden" name="price" value="35"/> <input type="submit" value="Add to Cart"/> </td> </form>

Надеюсь, что это сработает для вас! :)

+0

привет abhishek, спасибо за ваш ответ, но ShoppingCart, о котором вы упоминаете, является actaully именем этого веб-приложения. Я думаю, вы можете запутаться, потому что я также дал моему сервлету то же имя ... – vinay

0

Вы смешиваете сервлеты и JSP'ы. Подумайте о том, какая технология вам действительно нужна. Вы можете комбинировать эти технологии, если хотите. Здесь описано, как это сделать: getOutputStream() has already been called for this response