再会!
我在运行 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 内。我怎样才能让它工作?我还需要导入吗?谢谢你。
不要使用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(表达式语言,那些${ }东西),以访问后端数据,这是目前在属性即数据page,request,session和application范围。可以使用属性名称访问它。
所以,而不是
<%
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)在您之前的问题中直接提供给您。认真对待他们。要成为一名出色的程序员(正如您在问题/评论中所说的那样),请花一些时间来了解这些链接(以及链接中的链接)。
| 归档时间: |
|
| 查看次数: |
8756 次 |
| 最近记录: |