背景
失敗是成功之母,前提是沒有被遺忘的失敗,本文記錄這幾天學習 Java,自己遇到的幾個問題和解決方案,希望能達到強化記憶的作用。
開發環境是:Eclipse + Tomcat7.0。
第一個:依賴的第三方 jar 必須拷貝到 WEB-INF\lib 或 Tomcat 的 lib 目錄
如果只是將第三方 jar 包添加到 build path 中只能保證編譯通過,不能保證運行成功,關於如何配置運行期間類型的加載路徑,我還沒有查資料。
第二個:使用了 == 號
java 中不能重寫運算符,對於 Class 和 Interface 來說,equals 的語義是值比較,== 的語義是引用比較。
第三個:在 Tomcat7.0 中使用了默認包
默認包中的類型在 JSP 中使用的時候,編譯時沒有問題,運行時就出錯了。
第四個:在一個會話里測試 Page 指令的 isThreadSafe 配置
isThreadSafe 為 false 會導致所有請求串行化,為 true 會導致會話內的請求串行化。
如果你用同一個會話測試的話,true 和 false 的效果是一樣的,使用兩個瀏覽器可以到達期望的效果。
1 <%@ page language="java" session="false" isThreadSafe="false" 2 contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; utf-8"> 7 <title>page 指令學習</title> 8 </head> 9 <body> 10 <p>isThreadSafe為false會導致所有請求串行化,為true會導致會話內的請求串行化。</p> 11 開始時間是: 12 <% 13 out.println(new java.util.Date()); 14 %> 15 <br /> 16 <% 17 Thread.sleep(5000); 18 %> 19 結束時間是: 20 <% 21 out.println(new java.util.Date()); 22 %> 23 <br /> 24 <%=Thread.currentThread().getId()%> 25 </body> 26 </html>
第五個:獲取請求參數還要手工解碼
不明白 Java 為啥不自動解碼,是不是有地方可以配置?有知道的兄弟告訴我一下。
1 <%@page import="java.net.URLDecoder"%> 2 <%@ page language="java" contentType="text/html; charset=utf-8" 3 pageEncoding="utf-8"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; utf-8"> 8 <title>request study</title> 9 </head> 10 <body> 11 <p>to get the parameter,you must set the character encoding first.</p> 12 <% 13 request.setCharacterEncoding("utf-8"); 14 %> 15 <p> 16 get love: 17 <% 18 if (request.getParameter("love") != null) { 19 %> 20 <%=new String(request.getParameter("love").getBytes( 21 "iso-8859-1"), "utf-8")%> 22 <% 23 } 24 %> 25 </p> 26 <p> 27 post name:<%=request.getParameter("name")%></p> 28 <form method="get"> 29 get form<input type="text" name="love" value="段光偉" /> <input 30 type="submit" /> 31 </form> 32 <form method="post"> 33 post form<input type="text" name="name" value="段光偉" /> <input 34 type="submit" /> 35 </form> 36 </body> 37 </html>
備注
將自己的遇到的問題記錄下來,即使是“白痴”級別的問題。