什麼是伺服器
伺服器就是一台高性能的電腦
電腦上安裝什麼樣的伺服器軟體,就可以稱為xxx伺服器
舉例:
安裝了資料庫軟體(mysql/Oracle…),就是資料庫伺服器
安裝了ftp服務軟體,就是ftp伺服器
安裝了郵件伺服器軟體,就是郵件伺服器
安裝了web服務軟體,就是web伺服器
web服務軟體做了那些事兒?
負責建立底層的網絡連接配接
負責将用戶端請求的檔案傳回給用戶端
web服務軟體又稱為web容器,web容器用來裝元件(Servlet), web服務軟體根據用戶端發出的請求路徑,找到對應的Servlet做出響應
什麼是Servlet
Servlet是用于擴充web服務軟體業務功能得元件,每一種業務請求都需要對應一個單獨的Servlet
如何在eclipse中關聯Tomcat
從doc.canglaoshi.org中下載下傳 Tomcat 7.0.96 解壓到一個指定目錄
打開eclipse中window->preferences->Server->Runtime->add->找到對應的版本 Create a new Local servet打鈎->下一步->選擇下載下傳的檔案夾 finish
确認eclipse為JavaEE視圖模式,并且工程目錄為Project Explorer
找到servers頁籤,在裡面的Tomcat上輕按兩下 把裡面的單選選擇中間的一個 儲存
在servers裡面Tomcat上面右鍵 start
打開谷歌浏覽器在位址欄中輸入 http://localhost:8080 在頁面中顯示出貓 說明安裝完成!
建立web工程
建立maven工程 02servlet_1_1 把jar改war
改錯: 在最長的檔案名上面右鍵點選最長的(在src/main/webapp下面生成了web.xml配置檔案)
讓工程和Tomcat建立關系:工程上右鍵properties->Targeted Runtimes->打鈎後關閉
在JavaResources裡面的src/main/java上面右鍵建立Servlet 添加包名cn.tedu 類名HelloServlet
在HelloServlet裡面删除注釋和類裡面所有代碼,重寫service方法,删除方法裡面的内容添加一個輸出,代碼如下:
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("恭喜你,接收到請求了!");
}
}
在工程上右鍵Run As-> Run on Server 打鈎 完成
在彈出的浏覽器中 或自己的谷歌浏覽器中 寫以下位址
http://localhost:8080/02servlet_1_1/HelloServlet 回車通路
如果頁面顯示空白,并且在eclipse控制台中輸出 恭喜你… ,說明一切成功!
Servlet響應流程
請求由浏覽器發出到web伺服器,由web伺服器的web服務軟體(Tomcat)攔截,Tomcat攔截到請求後,擷取出請求的字位址(/HelloServlet),通過該字位址去web.xml找到處理該請求的Servlet的完整類名,得到完整類名後Tomcat通過反射技術将該對象執行個體化,然後調用對象的service方法,進而導緻程式員寫在Servlet裡面的代碼執行
如果隻是修改了代碼沒有建立新的Servlet是不需要重新運作工程的
浏覽器送出請求的幾種方式
在浏覽器的位址欄中寫請求路徑 回車後送出請求 get
在頁面中通過超連結送出請求 get
在頁面中通過form表單送出請求 預設get/post
請求方式get和post
get: 請求參數放在請求位址的後面,請求參數大小受限 隻能傳遞幾k的資料, 由于參數使用者可見 不能傳遞敏感資訊(密碼)
post: 請求參數放在請求體裡面,沒有大小限制通常上傳檔案時使用,參數内容使用者不可見 敏感資料通過post請求
擷取傳遞到伺服器的參數
String info = request.getParameter(“info”);
請求參數中包含中文
post請求中有中文解決方案:
在擷取參數之前執行以下代碼
request.setCharacterEncoding(“UTF-8”);
get請求中有中文如果是tomcat8.0以上版本不存在亂碼問題,如果8.0以下版本找到Servers工程中的server.xml 找到65行 添加URIEncoding=“UTF-8” 改完後儲存并重新運作工程 ,隻需要改一次 以後所有Servlet都搞定
<Connector URIEncoding=“UTF-8” connectionTimeout=“20000”
sayhello練習
在webapp下建立sayhello.html頁面在頁面中準備form表單 送出位址為SayHelloServlet,表單中有一個文本框文本框的name值為info和一個送出按鈕
sayhello.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="SayHelloServlet">
<input type="text" name="info">
<input type="submit">
</form>
</body>
</html>
建立SayHelloServlet,留下doGet方法其它删除,在doGet方法中擷取傳遞過來的info,将得到的info後面拼接上“你好”兩個字傳回給浏覽器
SayHelloServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SayHelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//擷取參數
String info = request.getParameter("info");
//設定響應類型
response.setContentType("text/html;charset=utf-8");
//擷取輸出對象
PrintWriter pw=response.getWriter();
//輸出資料
pw.print(info+"你好!");
//關閉資源
pw.close();
}
}
常見錯誤:
端口号被占用錯誤 關鍵字8005,8080,8009
解決:找到Tomcat安裝包的位置 D:\java\apache-tomcat-7.0.96\bin 裡面的shutdown.bat 輕按兩下運作 重複啟動Tomcat即可.
如果運作工程通路指定路徑時控制台提示ClassNotFoundException這樣的錯誤,Clean一下工程,作用是讓工程把編譯好的内容删掉重新編譯即可解決.
如何clean:在eclipse菜單欄中Project->clean
404狀态碼,代表找不到資源(資源代表檔案資源或Servlet),檢查路徑是否書寫正确,檢查資源檔案位置是否正确
如果運作工程直接報錯,并且是以彈窗形式報錯,裡面全是英文,并且沒有端口資訊
clean工程:
(1). 在eclipse菜單欄中Project->clean
(2). 在servers面闆中的Tomcat上面右鍵Clean
1
2
如果上面沒有解決繼續往下:
把servers面闆中的Tomcat删除(Tomcat上面右鍵Delete)重新添加(點選servers面闆中出現的超連結 選擇對應的版本添加,添加之後輕按兩下Tomcat 把單選改成中間的儲存),重新添加完Tomcat伺服器後将工程重新運作.
把eclipse關聯的Tomcat删除重新添加
如何删除:window->Preferences->Server->RunTime->找到裡面已經存在的Tomcat從右側Remove,把之前解壓的Tomcat安裝封包件夾删除重新解壓一份.
如何添加:參考前面 如何在eclipse中關聯Tomcat