錯誤現象
Vector cannot be resolved to a type
v cannot be resolved
Date cannot be resolved to a type
根因分析
- 缺少導入:
Vector 屬於 java.util,Date 同理。原始碼 <%@ page import="java.ytil.*"%> 拼寫錯誤 (ytil → util)。
- 變數作用域:
v 宣告在宣告片段 (<%! %>) 中,但方法 sendMessage 也是宣告片段,理論可見;實際上 JSP 編譯後 v 成為 Servlet 實例欄位,無問題。真正錯誤源於第 1 點導致編譯中斷,後續錯誤為連帶效應。
- HTML 拼寫錯誤:
<A href="showMessage,jsp"> 應為 .jsp,雖不影響 Java 編譯,但會造成 404。
修正後指令區
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.util.*" %> <!-- 修正拼寫 -->
<%@ page import="java.sql.*" %> <!-- 若用 JDBC 需補充 -->
<HTML><BODY>
<%!
Vector v = new Vector();
ServletContext application;
synchronized void sendMessage(String s) {
application = getServletContext();
v.add(s);
application.setAttribute("Mess", v);
}
%>
<%
// ... 業務邏輯 ...
String time = new java.util.Date().toString(); // 明確完整類名
// ...
out.print("<A href=\"showMessage.jsp\">查看留言板"); // 修正逗號
%>
</BODY></HTML>
最佳實踐
- **杜絕 Scriptlet**:改用 MVC (Spring MVC/Struts2) + JSTL/EL,將 Java 代碼移出 JSP。
- **啟用 IDE 即時檢查**:Eclipse/IDEA 會紅線提示導入缺失。
- **統一編碼**:頁面、資料庫、JVM
file.encoding 全鏈路 UTF-8。