【问题标题】:Problems with elements order in JSPJSP中元素顺序的问题
【发布时间】:2013-09-19 17:43:35
【问题描述】:

几天前我开始学习 Java EE 和 Web 开发(首先:Tomcat、Servlets、JSP)

所以现在我有了这个 JSP 页面代码。 如您所见,标题Hello World with JSP 停留在<% ... %> 块之前。:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.*" %>

<html>
<body>
<h1 align=”center”>Hello World with JSP</h1>
<br>
<%
    List styles = (List)request.getAttribute("styles");
    for(Object style: styles){
    response.getWriter().println("<br>try: " + style);
    }
%>

</body>
</html>

但在结果网页中来自&lt;% ... %&gt; 的结果位于Hello World with JSP 标头之前。为什么?

附:抱歉,我是网络开发的新手。

【问题讨论】:

    标签: java jsp tomcat servlets


    【解决方案1】:

    JSP 使用名为 out 的隐式 JspWriter 实例来写入输出流。它与您从 response.getWriter() 收到的 PrintWriter 实例并不完全相同,因为它在实际写入流之前会进行一些额外的缓冲。

    当您直接打印到PrintWriter 时,基本上是在刷新JspWriter 缓冲区之前写入流,因此您的List 在“Hello World”HTML 之前打印。

    您需要改为使用隐式 JspWriter 实例 out as

    <%
        List styles = (List)request.getAttribute("styles");
        for(Object style: styles){
            out.println("<br>try: " + style);
        }
    %>
    

    顺便说一句,JSP 中的 scriptlets &lt;% %&gt; 现在已被弃用。请查看 JSP EL 和 JSTL 标签。

    【讨论】:

      【解决方案2】:

      我认为您想使用 out.println 而不是 response.getWriter().println。见How to output HTML from JSP <%! … %> block?

      【讨论】:

        【解决方案3】:

        一个 JSP 被编译成一个 Java servlet。当您执行以下脚本代码时

        response.getWriter().println(...);
        

        您将获得HttpServletResponsePrintWriter,它直接写入OutputStream,在编写任何HTML(来自jsp)之前执行。举个例子

        <%@ page contentType="text/html;charset=UTF-8" language="java" %>
        <%@ page import="java.util.*" %>
        
        <html>
        <head>
        
        </head>
        <body>
        <%
            response.getWriter().println("hellllooooooooo"); // using response.getWriter().println()
        %>
        the time is now
        <h1 align=”center”>Hello World with JSP</h1>
        <br>
        <%
            List styles = (List)request.getAttribute("styles");
            for(Object style: styles){
                out.println("<br>try: " + style); // using out.println()
            }
        %>
        
        </body>
        </html>
        

        您将收到的响应内容是

        hellllooooooooo
        
        
        
        <html>
        <head>
        
        </head>
        <body>
        
        the time is now
        <h1 align=”center”>Hello World with JSP</h1>
        <br>
        <br>try: asdaS
        <br>try: asdasdasda
        
        
        </body>
        </html>
        

        注意hellllooooooooo 在任何东西之前打印。 JSPs 给你一个out 类型的变量JspWriter,它允许你按预期的顺序输出。从请求属性styles 中写入元素请参见上面的示例。

        重要这是不推荐使用脚本的原因之一。考虑改用JSTL

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-20
          • 2015-12-25
          • 1970-01-01
          • 1970-01-01
          • 2019-07-24
          • 2011-11-22
          • 1970-01-01
          相关资源
          最近更新 更多