JSP导入文件
美好的一天!
运行我的JSP程序时遇到以下错误。
java.lang.IllegalStateException: PWC3991: getOutputStream() has already been called for this response
看起来我的JSP中的html文件不起作用。 我的代码如下:
JSP Page <% Item item = (Item) request.getAttribute("invenItem"); if (item != null) { out.println("Inventory Item "); out.println("Inventory Item Details:
"); out.println("Stock ID : " + item.getStockID() + "
"); out.println("Name : " + item.getItemName() + "
"); out.println("Unit Price: " + item.getUnitPrice() + "
"); out.println("On Stock : " + item.getOnStock() + "
"); out.println(""); out.println(""); } else { RequestDispatcher rd = request.getRequestDispatcher("DataForm.html"); //NOT WORKING rd.include(request, response); out.println("
Item not found...
"); rd = request.getRequestDispatcher("ItemEntry.html"); //NOT WORKING rd.include(request, response); } %>
我的html文件位于WEB-INF文件夹中。 我怎样才能使它工作? 我还需要import吗? 谢谢。
不要使用scriptlet (那些<% %>
东西)。 JSP是HTML的模板技术。 对于HTML,你不需要那些讨厌的out.println()
。 只需在JSP中编写HTML plain即可。
所以,而不是
<% out.println("Inventory Item "); %>
做就是了
Inventory Item
(请注意,这会导致HTML无效,HTML页面中只应有一个标记,而
只有一个
,但这是一个不同的问题, w3 HTMLvalidation器应该提供很多提示和答案,也可以通过一些HTML教程)
JSP提供EL (表达式语言,那些${ }
东西)来访问后端数据,即在page
, request
, session
和application
范围中作为属性存在的数据。 可以使用属性名称访问它。
所以,而不是
<% Item item = (Item) request.getAttribute("invenItem"); %>
使用
${invenItem}
而不是
<% out.println("Stock ID : " + item.getStockID() + "
"); %>
使用
Stock ID: ${invenItem.stockID}
JSP还提供像JSTL这样的taglib来控制页面流和输出。
所以,而不是
<% if (item != null) { } else { } %>
使用
JSP还提供
标记以包含页面片段。
所以,而不是
<% RequestDispatcher rd = request.getRequestDispatcher("DataForm.html"); //NOT WORKING rd.include(request, response); %>
使用
(并将其重命名为.jsp
)
而exception将消失。
也可以看看:
- JSP标记信息页面
- 如何避免JSP文件中的Java代码?
- Java Web开发,我需要哪些技能?
与具体问题无关,此答案中的几乎所有链接都已在您之前的问题中直接提供给您。 认真对待他们。 要成为一名优秀的程序员(正如您在问题/评论中所述),请花一些时间来完成这些链接(以及链接中的链接)。
首先,尽量避免将代码放到JSP页面上 – 它违反了作为JSP核心部分的MVC /关注分离范式。
其次,普通的旧JSP有点陈旧 – 现在推荐使用JSF / facelets / etc。
至于你的实际问题,我并不完全熟悉你所使用的技术,但是这个例外基本上意味着你已经尝试在最后一点之后发送内容(通常是在发送标题之后)。 在这种情况下,我认为发生的事情是,当您要求它发送不同的页面时,您已经开始发送当前页面。
我能想到的最简单的修复:而不是根据结果尝试条件包含,只需重定向到不同的页面。
该错误表明一旦在jsp中打印出输出流的某些内容(甚至包括doctype声明),就无法调用代码的错误行
因此,您可以尝试将这些代码放在页面顶部。
你不能用
out.print()和Requestdispatcher同时….
这意味着在执行out.print()之后,不应该使用requestdispatcher.forward()执行任何语句….
所以删除out.println()form else块。