好久沒有更新了,中間經曆了“泄密”時間,隨處都能查到我的密碼,鬱悶啊,光改密碼就花了很長時間,一度曾對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.jspSyntax error on token "=", @ expected10: <% 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的錯誤。 許可權問題,只能上傳圖片,程式碼就不上傳了。