java - 为什么我得到相同 JSP 方法的客户端和服务器端输出?

标签 java jsp servlets

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

</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>

最佳答案

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

Writes a single character. The character to be written is contained in the 16 low-order bits of the given integer value; the 16 high-order bits are ignored.

因此,您正在使用整数值 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。

关于java - 为什么我得到相同 JSP 方法的客户端和服务器端输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25141858/

相关文章:

java - 当我按点按钮时,我希望在输入 1 中只按一次该点按钮吗?

java - 如何在多个 JTextfield 上调用 `setText`?

javascript - 迭代器内 Javascript 中的单选按钮验证

java - Spring WebContent 资源 - ServletContext 外部访问

javascript - 处理验证邮件

java - 无法解析属性 - hibernate

java - 对于非常大的 N 求斐波那契第 N 项

javascript - 使用jsp标签库将jsp变量传递给外部js

javascript - JQuery 无法解析 JSP EL

java - 如果我想编写 servlet,是否必须重写所有 Java 服务器?