基本上,我想在JSP页面上的ArrayList中显示产品。我已经在servlet代码中做到了。但是没有输出。
还需要将products.jsp放在/ WEB-INF文件夹中吗?当我这样做时,会收到请求的非资源错误。
我的Servlet代码(InventoryServlet.java)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub try { List<Product> products = new ArrayList<Product>(); products = Inventory.populateProducts(); // Obtain all products. request.setAttribute("products", products); // Store products in request scope. request.getRequestDispatcher("/products.jsp").forward(request, response); // Forward to JSP page to display them in a HTML table. } catch (Exception ex) { throw new ServletException("Retrieving products failed!", ex); } }
我的JSP页面(products.jsp)
<h2>List of Products</h2> <table> <c:forEach items="${products}" var="product"> <tr> <td>${product.Description}</td> <td>${product.UnitPrice}</td> </tr> </c:forEach> </table>
Web.xml
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>Inventory</servlet-name> <servlet-class>com.ShoppingCart.InventoryServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Inventory</servlet-name> <url-pattern>/products</url-pattern> </servlet-mapping> </web-app>
您需要通过请求servlet URL而不是JSP URL来打开页面。这将调用该doGet()方法。
doGet()
将JSP放置在其中可以/WEB-INF有效地防止最终用户直接打开它,而无需doGet()使用servlet 的方法。/WEB- INF即,其中的文件不可公共访问。因此,如果必须对Servlet进行预处理,则需要这样做。将JSP放在/WEB- INF文件夹中,然后将requestdispatcher更改为指向它。
/WEB-INF
/WEB- INF
request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
但是您需要更改所有现有链接以指向Servlet URL而不是JSP URL。