JSP 导入文件

new*_*bie 1 java jsp

再会!

我在运行 JSP 程序时遇到以下错误。

java.lang.IllegalStateException: PWC3991: getOutputStream() has already been called for this response
Run Code Online (Sandbox Code Playgroud)

我的 JSP 中的 html 文件似乎不起作用。我的代码如下:

<%@page import  = "java.util.*"%>
<%@page import  = "javax.servlet.*"%>
<%@page import  = "javax.servlet.http.*"%>
<%@page import= "session.*" %>


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <%
            Item item = (Item) request.getAttribute("invenItem");

            if (item != null) {
                out.println("<html><title>Inventory Item</title>");
                out.println("<body><h1>Inventory Item Details:</h1>");
                out.println("Stock ID  : " + item.getStockID() + "<br/>");
                out.println("Name      : " + item.getItemName() + "<br/>");
                out.println("Unit Price: " + item.getUnitPrice() + "<br/>");
                out.println("On Stock  : " + item.getOnStock() + "<br/>");
                out.println("</body>");
                out.println("</html>");
            } else {
                RequestDispatcher rd = request.getRequestDispatcher("DataForm.html"); //NOT WORKING
                rd.include(request, response);

                out.println("<br>Item not found...<br>");

                rd = request.getRequestDispatcher("ItemEntry.html"); //NOT WORKING
                rd.include(request, response);
            }
            %>
        </body>
    </html>
Run Code Online (Sandbox Code Playgroud)

我的 html 文件位于文件夹WEB-INF 内。我怎样才能让它工作?我还需要导入吗?谢谢你。

Bal*_*usC 5

不要使用scriptlet(那些<% %>东西)。JSP 是 HTML 的模板技术。out.println()对于 HTML,您不需要所有这些讨厌的东西。只需在 JSP 中编写纯 HTML。

所以,而不是

<%
    out.println("<html><title>Inventory Item</title>");
%>
Run Code Online (Sandbox Code Playgroud)

做就是了

<html><title>Inventory Item</title>
Run Code Online (Sandbox Code Playgroud)

(注意,这会导致无效的HTML,应该只有一个<html>在HTML网页代码和一个<title><head>,但是这是一个不同的问题,W3 HTML验证应该给很多提示和答案,也让自己通过一些HTML教程)


JSP提供EL(表达式语言,那些${ }东西),以访问后端数据,这是目前在属性即数据pagerequestsessionapplication范围。可以使用属性名称访问它。

所以,而不是

<%
    Item item = (Item) request.getAttribute("invenItem");
%>
Run Code Online (Sandbox Code Playgroud)

${invenItem}
Run Code Online (Sandbox Code Playgroud)

而不是

<%
    out.println("Stock ID  : " + item.getStockID() + "<br/>");
%>
Run Code Online (Sandbox Code Playgroud)

Stock ID: ${invenItem.stockID}<br/>
Run Code Online (Sandbox Code Playgroud)

JSP 还提供了像JSTL这样的标签库来控制页面流和输出。

所以,而不是

<%
    if (item != null) {

    } else {

    }
%>
Run Code Online (Sandbox Code Playgroud)

<c:choose>
    <c:when test="${invenItem != null}">

    </c:when>
    <c:otherwise>

    </c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)

JSP 还提供<jsp:include>标签来包含页面片段。

所以,而不是

<%
    RequestDispatcher rd = request.getRequestDispatcher("DataForm.html"); //NOT WORKING
    rd.include(request, response);
%>
Run Code Online (Sandbox Code Playgroud)

<jsp:include page="/WEB-INF/DataForm.jsp" />
Run Code Online (Sandbox Code Playgroud)

(并将其重命名为.jsp

并且异常将消失。


也可以看看:


与具体问题无关,这个答案中的几乎所有链接都已经(in)在您之前的问题中直接提供给您。认真对待他们。要成为一名出色的程序员(正如您在问题/评论中所说的那样),请花一些时间来了解这些链接(以及链接中的链接)。