但是当我使用 test"); } %> 我的输出将显示在我的代码编辑器控制台中,而不是按预期显示在我的网站上。 -6ren">
gpt4 book ai didi

java - JSP/Java/HTML | JSP out.println();在方法中打印到控制台

转载 作者:太空宇宙 更新时间:2023-11-04 14:31:00 26 4
gpt4 key购买 nike

我正在使用 jsp 开发一个动态网站。

现在我的问题是:当我使用 <% 时,编写我的 java,一切正常。

<%
out.println("<p>test</p>");
%>

但是当我使用 <%!像这样:

<%!
private void test() {
out.println("<p>test</p>");
}
%>

我的输出将显示在我的代码编辑器控制台中,而不是按预期显示在我的网站上。

作为导入,我使用了 <%@ page import="static java.lang.System.out" %> .这是正确的导入还是其他地方的问题?

如果需要更多信息,请评论! :)

最佳答案

您可能知道,JSP 由 Java EE 容器即时转换为 servlet。在 <% ... %> block ,out是生成的 _jspService 中的局部变量(或类似的)方法在生成的 servlet 中。这是一个JspWriter用于写入页面的输出。

<%! ... %> 中 block ,你在生成 _jspService外面 (或类似的)方法,所以你的静态导入意味着你的 out引用是System.out ,这不是应该发送页面输出的地方。

如果您想在 <%! ... %> 中的 JSP 中定义方法 block ,你必须通过 out进入他们:

<%!
private void test(JspWriter out) throws IOException {
out.println("<p>test</p>");
}
%>

关于 JSP -> servlet 的事情,假设我们有这个 JSP:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>
<%
out.println("The current date/time is " + new java.util.Date());
this.test(out, "Hi, Mom!");
%>
<%!
private void test(JspWriter out, String msg) throws java.io.IOException {
out.println(msg);
}
%>
</body>
</html>

注意它有一个 <%...%> block 和一个 <%! ... %> block 。

Java EE 容器将其转换为有点像以下内容。注意我们的test在哪里方法结束了,我们的代码在哪里 <%...%> block 结束(连同我们的原始 JSP 文本/标记):

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class test_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {

private void test(JspWriter out, String msg) throws java.io.IOException {
out.println(msg);
}

/* ...lots of setup stuff omitted... */

public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {

PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;


try {
response.setContentType("text/html");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;

out.write("<!doctype html>\n");
out.write("<html>\n");
out.write("<head>\n");
out.write("<meta charset=\"utf-8\">\n");
out.write("<title>Example</title>\n");
out.write("</head>\n");
out.write("<body>\n");

out.println("The current date/time is " + new java.util.Date());
this.test(out, "Hi, Mom!");

out.write("\n");
out.write("</body>\n");
out.write("</html>\n");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try { out.clearBuffer(); } catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else log(t.getMessage(), t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}

关于java - JSP/Java/HTML | JSP out.println();在方法中打印到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36597425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com