【问题标题】:Why i get client & server side output for same JSP method?为什么我获得相同 JSP 方法的客户端和服务器端输出?
【发布时间】:2014-08-05 14:50:48
【问题描述】:

我已经看到方法 out.write() 需要一个 int 和一个字符串。问题是当我传递一个 int 时,它不会显示在客户端或服务器端。,(我不知道网络 bean 中的确切服务器端)。当我传递一个字符串时,它会显示在客户端。我的问题是为什么 write 类的创建者开发该方法,int 用于服务器端显示和 string 用于客户端显示....或者我错了..,请帮助..,我将附上下面的代码。,

</head>
<body>

    <% 
    int abc=10;

    out.write(abc);//server side
    out.write(""+abc);//client side
    out.write("<br>");
    out.write(abc);//server side
    out.write("<br>");
    out.write(abc*2);//server side
    out.write("<br>");
    out.write(abc*3);//server side
    out.println("<h1>"+(abc*abc)+"<br>");//client side

    %>

</body>
</html>

【问题讨论】:

  • 您在传递一个 int 时正在写入原始字节。您的客户收到了它们,但它们无法打印。
  • 您当前代码中的服务器端客户端是什么意思?一切都将在服务器端执行,因为是 scriptlet(您应该避免使用这种用法)。
  • @ElliottFrisch 如果我们传递一个 int..,它会在服务器端打印出来吗?如果是服务器端,我们在 netbeans 哪里可以看到它?
  • 所有内容都写入相同的输出流。它是写给客户的。但字符不可打印。
  • @Elliott Frisch 好的,我知道了,谢谢。

标签: java jsp servlets


【解决方案1】:

首先,您的所有输出都将发送到客户端。当您在 scriptlet 中使用 out 时,您将得到一个 JspWriter,当您根据 javadoc 调用 out.write(int) 时,它又是一个 java.io.Writer -

写入单个字符。要写入的字符包含在给定整数值的低 16 位中; 16 个高位被忽略。

因此,您正在编写具有整数值 10、20 和 30 的字符。ASCII 表将 10 定义为换行符,将 20 定义为(设备控制 4),将 30 定义为(记录分隔符)。当嵌入您的 HTML 并在浏览器中呈现时,这些都不会正确显示。小写 'a' 是 97 并且 'a' 可打印,所以如果你有

int abc='a';      // 97 - because ASCII 
out.write(abc++); // 'a', then increment to 'b'
out.write(abc++); // 'b', then increment to 'c'
out.write(abc++); // 'c', then increment to 'd'
System.out.println((char) abc); // <-- 'd' on the server.

如果您想在服务器上输出,您可能应该使用(并配置)记录器

Logger logger = Logger.getLogger(this.getClass());
logger.info((char) abc); // <-- 'd' in the server log (assuming info or up)

最后,我敦促您避免使用 scriptlet。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2019-07-10
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2020-04-18
    相关资源
    最近更新 更多