一个空格引发的错误

来源:互联网 发布:chm reader for mac 编辑:程序博客网 时间:2024/04/28 19:20

好久没有更新了,中间经历了“泄密”时间,随处都能查到我的密码,郁闷啊,光改密码就花了很长时间,一度曾对csdn比较失望,还好一切都被时间冲淡。

最近比较忙,天天加班写代码,从正月初八忙到现在,基本上第一阶段可以告一段落了,可以松口气,写点东西了。

这次内容还是源于一个学生的问题,虽然简单,但很典型,供初学者参考:

邮件正文如下:

-----------------------------------------割割更清楚-----------------------------------------

大家好!
 
呵呵,今天收邮件,看到有同学问了一个问题,我感觉这个问题问的还是很有代表性的,所以把我的回复发给大家看一下。
 
问题是这样的(附件中“修改前.zip”是产生问题的代码):
 
老师您好,我在实验一的第三个实验中编写了one.jsp,但是在浏览器中查看时,不提示输入整数,而是直接跳转到
two.jsp,并显示由于没有图片的高和宽的数值导致的错误,浏览器地址还是现实one.jsp,把two.jsp中图片的高和宽直
接赋值后会显示two.jsp的正确页面,我试着直接把n的值赋值为40还是直接跳转two.jsp并报错,把这段代码()
<jsp:forward page="two.jsp"><jsp:param name="number" value="<% =n %>"/></jsp:forward>删除后,
又直接跳到three.jsp,错误一样,我觉着应该是没有经过if判断直接执行了这段代码,但是不知道怎么改,麻烦老师告诉
我错误是什么,怎么改,谢谢老师。
 
这个问题问的很典型,上课的时候我没有强调这个问题,咱们先来看看错误:
An error occurred at line: 13 in the jsp file: /two.jsp
Syntax error on token "=", @ expected
10: <% String s=request.getParameter("number");
11: out.println("<br>传递过来的值是"+s);
12: %>
13: <br><img src="a.jpg" width="<% =s %>" height="<% =s %>"></img>
14: </font>
15: 
16: </body>
 
错误中很明显的提示在第13行有错误,错误是语法错误,在“=”号附近,我们单独来看看这一行:
13: <br><img src="a.jpg" width="<% =s %>" height="<% =s %>"></img>
有没有发现一些问题?
 
呵呵,空格,在%号和=号之间有个空格,我说过电脑有时候挺傻的,很“较真”,我们看起来很正常的东东,在电脑看起来就是错误的,比如大小写问题,比如“<%=”中间有空格的问题,这个跟大家编译原理中学到的相关知识是有密切联系的,实际在编译过程中,空格是区分一个完整语法的“关键字”,如果我们把“<%=”中间用空格隔开,编译过程中会把这三个符号分割成两个语法,这时候就会出现这样的问题"<%"是符合语法的,按照JSP的规则,<%里面应该是Java程序片,可里面紧跟着是个“=”号,这样会不会是有语法错误?Java语法里=是不能这样用的,所以编译器会报在"="号附近有错误。错误类型是:
org.apache.jasper.JasperException: Unable to compile class for JSP:
Syntax error ......
 
另外,有些同学会有疑问,为什么显示的是two.jsp的错误,而不是one.jsp的错误?
 
JSP的编译顺序是按照代码的顺序来的,我们来看看one.jsp的代码:
<%@ page contentType="text/html;charset=GB2312" %>
<head>
<jsp:include page="head.txt"/>
</head>
<html>
<body bgcolor=yellow>
<FORM action="" method=get name=form>
请输入1-100之间的整数:<input type="text" name="number">
<br><input type="submit" value="送出" name=submit>
</FORM>
< % String num=request.getParameter("number");
if(num==null)
num="0";
try{ int n=Integer.parseInt(num);
if(n>=1 && n<=50){
% > <jsp:forward page="two.jsp">
<jsp:param name="number" value="<% =n %>"/>
</jsp:forward>
......
 
one.jsp中的错误在<jsp:forward page="two.jsp">这个语句后面,所以先显示two.jsp的错误,大家改好two.jsp中的错误后,才会显示one.jsp的错误。
 
权限问题,只能上传图片,程序代码就不上传了。

 

原创粉丝点击