966
技術社區[雲棲]
servlet注意事項
1:亂碼
沒有設置charset=gbk文本會顯示亂碼,所以要加上,但是charset = gbk,如果在等好旁邊有空格,則無法識別該語句,仍然出現亂碼。所以得出結論:小心空白符。
response.setContentType("text/html;charset = gbk");
2:用response.sendRedirect(String)來跳轉頁麵和傳遞參數
sendRedirect的參數是一個字符串。假設已擁有一個String u = "123",要把這個String 傳遞給一個Wel的servlet,
那麼語句是sendRedirect("Wel?uvalue="+u); //如果要傳遞多個值,那麼它們之間要用&號隔開。(“wel?uvalue="+u+"&u2value="+u2)
在Wel裏麵如何得到這個值呢?用request.getParameter("uvalue")
很遺憾,sendRedirect隻能傳遞字符串,而不能傳遞對象。
3:關於getSession()參數的true,false的區別。
getSession方法返回與當前請求相關的httpSession對象.
其根據傳遞的參數來決定是否創建新的httpSession對象.
參數為true,則在相關的httpSession對象不存在時創建並返回一個新的httpSession對象,否則不創建新的httpSession對象,而是返回null
最好用true,不然對httpsession調用函數時,有可能會出現nullpointerException.調用空指針
4:鏈接數據庫的具體參見我日誌中的java鏈接數據庫
5:在servlet中引用圖片。
很簡單,在工程目錄下創建一個imgs文件夾,裏麵放圖片1.gpg
out.println("<img src='./imgs/1.jpg'>")
或者
out.println("<img src='imgs/1.jpg'>")
注意,這裏imgs文件夾要放在tomcat/webapps/工程目錄/
而不是在workspace裏麵的工程目錄下。(應該是可以調整的,具體就沒調試過)
可以用getContextPath獲取目錄
另外
用Servlet插入圖片eg:
pw.println("<img src='"+req.getContextPath()+"/images/bf1.jpg' width='200' hight='200'>");
用jsp插入圖片eg:
<img src="./images/logo4.gif">
6:網頁生成了 過多的重定向
有可能頁麵之間的跳轉形成了循環。
7:IllegalStateException:response already commited
在response.sendRedirect()方法後加return語句即可,如下:
response.sendRedirect("login.jsp");
return;
否則有可能運行下一個sendRedirect();
1.小規模的修改,沒有改變類的塊結構,不用重啟服務器,也可以立即生效.(前提是同步發布,即要勾上菜單
project->build automatically)
2.修改了類的結構(如增加或刪除類的方法,字段).如果是這種情況,myeclipse會有"hot code replace fail"的提
示,和失敗的原因的說明(如add method not implemented, scheme change not implemented 等),並且提
示重新啟動服務器.這種情況要重啟服務器才可以生效.
3.還有一種情況,對java文件進行小的修改(如 代碼中不重要的地方加一個空格 )然後保存,myeclipse也會提示
hot code replace fail.這種情況遇到的幾率很小. 這種情況的很可能是服務器(如tomcat)下麵發布了多個web
應用程序,而所修改的類的名字在多個web應用中存在(如 有app1和app2兩個應用, app1中有個類
com.company.LoginAction, app2中也有個類com.company.LoginAction. 修改的是app1中的LoginAction
).
個人猜測:jvm在進行hot code replace的之前,將所修改的類(app1中的LoginAction)與另外一個應用中的同名
類(app2中的LoginAction)對比,發現兩者有結構上的差異,於是認為該類的改變很大,不能夠進行hot code
replace.
有種簡單的方法可以驗證,是否屬於第三種情況.隻部署一個工程在服務器下,啟動後,再修改java類,如果是小的修
改,這個時候myeclipse就不會再有hot code replace fail 的提示了.
最後更新:2017-04-02 22:16:36