编者在测试Scriplet(代码段)的用法的时候写了下面这一段代码
<%@ page contentType="text/html";charset=UTF-8" %>
<html>
<head>
<title> Scriplet 应用</title>
<meta charset = "UTF-8">
</head>
<body>
<%!
public static final String MSG = "Hello World !";
%>
<%
int num = 0 ; //局部变量
for (int i = 0 ; i < 10 ;i ++)
{
num = num + i ;
}
%>
<h3><%=MSG%></h3>
<h2>0+1+2+3+...+9的和为:<% = num % ></h2>
</body>
</html>
如果运行正常应该会输出以下结果:
但是运行的结果却是这样的:
系统提示HTTP Status 500 – Internal Server Error的错误,错误的具体信息是1.jsp (line: [1], column: [2]) Unterminated [<%@ page] tag 意思是第一行第二列的标签未闭合,于是根据错误提示我检查了自己的代码发现了如下错误:
问题就出在这里的contentType="text/html "; charset=UTF-8" 上,这里的contentType 后面的应该是个完整的句子,正确的写法应该是contentType="text/html ; charset=UTF-8" ,即把中间的双引号去掉就好了。
在浏览器中运行一下,发现竟然是不行。。。不过这次是另一个错误,是第19行的标签未闭合(所以在运行代码前要检查好还有没有其他的错误。。。)
查看第19行的代码(这里建议用Notepad编写jsp代码,因为很直观的可以看到类似与标签未闭合的错误)找到了错误所在
右边的 "%>" 没标黄说明没有成对,仔细看了一下,发现多了个空格在 "%" 和 " > " 之间,把空格删掉。检查下代码,貌似没问题了。。。
然鹅运行之后。。。WTM竟然还有问题
额,,,尴尬,编程小白总是容易踩到各种坑,按照上面的提示,还是第19行,这次,而是出在那个等号上,查看了一些资料,发现scriplet中有三种常用的Scriplet标记,<% %> 、<%= %> 、<%! %> ,通常用<%...%>区域定义局部变量、编写逻辑代码。在"<%!...%>"区域定义全局变量。通常使用"<%=...%>"替代out.println()语句输出返回值。这里主要是想提醒各位,"<%" 、"<%=" 、"<%!" 可以看作是一个完整的符号,它们之间不能有空格,否则会导致上面提到的类似的错误。把下面箭头处的空格去掉
变成这样
运行一下,成功输出。
PS:有的浏览器可能输出的是下面的结果,这是因为浏览器的默认编码格式不一样,本例中用的是UTF-8编码,但是很多浏览器的默认编码格式为gbk,这时候只要修改一下编码格式为gbk就能正确输出了。
本人是菜鸟,才疏学浅,以上有什么不对的地方还请各位大佬批评指正。