我已经看到方法 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/