Tomcat的啓動問題
下載:http://tomcat.apache.org/
安裝:解壓即可使用,不需要安裝
啓動:雙擊bin/startup.bat就可以啓動,啓動的黑窗口不能關閉
訪問自己:http://localhost:8080
訪問別人:http://別人ip地址:8080
卸載:直接刪除解壓的文件夾即可
正常關閉tomcat:
1.雙擊bin/shutdown.bat
2.ctrl+c也是正常關閉
tomcat的啓動問題:啓動黑窗口一閃而過
問題1:JAVA_HOME環境變量沒有配置
解決:正確配置JAVA_HOME環境變量
問題2:tomcat端口號衝突,一般是啓動了多個tomcat服務器
在logs目錄中查看日誌信息:Caused by: java.net.BindException: Address already in use: bind表示端口號衝突。
解決:
1.在cmd窗口查看所有進程的端口號:netstat -ano,找到8080端口號對應進程的pid;
2.在任務管理器中根據pid找到該進程,結束掉之前啓動的tomcat進程
項目的3種發佈方式
- 3種發佈方式
1. 直接將項目放到webapps目錄下即可。(掌握這個就可以了)
* /hello:項目的訪問路徑-->虛擬目錄
* 簡化部署:將項目打成一個war包,再將war包放置到webapps目錄下。
* war包會自動解壓縮
2. 配置conf/server.xml文件的<Host>標籤體中配置
<Context docBase="D:\hello" path="/hehe" />
* docBase:項目存放的路徑
* path:虛擬目錄
3. 在conf\Catalina\localhost創建任意名稱的xml文件。在文件中編寫:
<Context docBase="D:\hello" />
* 虛擬目錄:xml文件的名稱,不帶後綴名。
說明:idea編輯器採用的是該方式
- 訪問路徑解析
Servlet概述以及實現思路
- Servlet的概念和作用
servlet 是運行在 Web 服務器中的小型 Java 程序,本質是一個接口。servlet 通常通過 HTTP(超文本傳輸協議)接收和響應來自 Web 客戶端的請求。- 實現一個Servlet的步驟
1.定義一個類實現Servlet接口,重寫抽象方法;
public class ServletDemo1 implements Servlet{
}
2.配置這個Servlet
2.1 在web.xml中配置Servlet(瞭解)
<!--配置servlet的類信息-->
<servlet>
<!--Servlet的名稱-->
<servlet-name>ServletDemo1</servlet-name>
<!--servlet的全類名-->
<servlet-class>com.itheima.web.servlet.ServletDemo1</servlet-class>
</servlet>
<!--配置servlet的映射信息,也就是訪問路徑和servlet類的對應關係-->
<servlet-mapping>
<!--Servlet的名稱,和上面保持一致-->
<servlet-name>ServletDemo1</servlet-name>
<!--Servlet的訪問路徑-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
2.2 使用註解配置Servlet(吐血推薦)
//當註解的參數有且僅有一個,而且參數名叫value時,value可以省略不寫
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet{}
Servlet生命週期
- 描述Servlet生命週期
思路:三個方法分別是什麼時候被調用的?調用幾次?作用分別是什麼?
當我們第一次訪問Servlet時,服務器會創建Servlet對象,調用init()方法初始化,該方法只調用一次,可以用來加載配置文件;每當我們訪問Servelt時,service()方法都會被調用,訪問一次就調用一次,用來接收客戶端請求以及對客戶端作出響應;服務器正常關閉的時候銷燬Servlet對象,destory()方法會被調用,調用一次,一般在該方法中釋放資源; - 配置啓動時加載
在web.xml中的<Servlet>標籤中配置<load-on-startup>2</load-on-startup>,值越小優先級越高;
訪問路徑問題
1. 完全路徑匹配:以/開頭,不包含通配符* 例如:/servletDemo1 /demo1 /abc /aaa/bbb /abc.do (常用)
2. 目錄匹配:以/開頭,以*結尾;在瀏覽器訪問時*表示任意字符 例如:/abc/* /*
3. 擴展名匹配:以*開頭,以固定的後綴名結尾 例如 *.jsp *.abc 但是/abc/*.do錯誤
HTTP協議
- 概念:http協議規定的是客戶端和服務器之間通信的規則;
- 特點:http協議是基於請求和響應;一定是先有請求後有響應,一次請求對應一次響應;
- 請求部分:分4個部分
請求行:
請求方式 url路徑 協議/版本
POST /day14/servletDemo5 HTTP/1.1
請求頭:一般是一個key對應一個value,也有一個key對應多個value;
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
告訴服務器瀏覽器的版本信息,一般用來解決瀏覽器兼容性問題;
Referer: http://localhost:8080/day14/login.html
告訴瀏覽器當前請求的來源,用於防盜鏈以及統計工作;
請求空行:用於分隔請求頭和請求體
請求體:只有post請求才有請求體,get請求沒有,post請求參數就在請求體中
username=zhaoying