maven中央倉庫:Maven Repository: Search/Browse/Explore (mvnrepository.com)
maven倉庫是國外的一個網站,由於網路問題,我們也常使用maven倉庫的映象
maven的原理和java程式運算元據庫,然後資料庫返回相關資料類似。
預設建立的專案結構如下:
新增新映象如下:
<mirror>
<id>alimaven</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
返回idea的視窗中,選擇剛才設定的xml檔案和要儲存下載的jar包的目錄,點選override,點選ok
這樣就完成了maven的映象設定
在專案的pom.xml檔案中新增設定
在dependency元素中新增設定如下:
<!--引入Servlet.jar-->
<!--1.為了開發servlet,需要引入其jar包
2.dependency 表示引入一個包
3.groupId 表示包的開發公司/組織/個人 的資訊 javax.servlet
4.artifactId 表示包的專案名稱 javax.servlet-api
補充:groupId+artifactId是以目錄形式體現
5.version 表示該包當前的版本
6.scope 表示引入的包的作用範圍
7.provided 表示 這裡你引入的jar包,在編譯,測試有效,但是在打包釋出的時候,不要帶上這個jar包
(因為Tomcat本身有jar包)
8.下載的包在你指定的目錄中
9.可以去修改我們要下載的目錄位置
10.可以去指定maven倉庫,即設定maven映象
-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
點選右邊的Maven,點選迴圈按鈕,開始下載依賴
下載完畢後,可以在設定的下載目錄中看到該依賴:
下一次如果要使用依賴,就會先到下載目錄下去找該依賴。
編寫如下的測試案例
建立java目錄,存放原始檔
建立Servlet(如果選項中沒有Servlet,點選右邊的maven,重新導一下包)
在web.xml檔案中設定Servlet(使用註解也可以)
<servlet>
<servlet-name>CalServlet</servlet-name>
<servlet-class>com.li.servlet.CalServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CalServlet</servlet-name>
<url-pattern>/calServlet</url-pattern>
</servlet-mapping>
編寫程式
WebUtils:
package com.li.utils;
public class WebUtils {
/**
* 將一個字串數位轉成int,如果轉換失敗,就返回傳入的defaultVal
*
* @param strNum
* @param defaultVal
* @return
*/
public static int parseInt(String strNum, int defaultVal) {
try {
return Integer.parseInt(strNum);
} catch (NumberFormatException e) {
System.out.println(strNum + "輸入的格式錯誤");
}
return defaultVal;
}
}
CalServlet:
package com.li.servlet;
import com.li.utils.WebUtils;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class CalServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收提交的資料進行計算
String strNum1 = request.getParameter("num1");
String strNum2 = request.getParameter("num2");
//把strNum1和strNum2轉成int型別
int num1 = WebUtils.parseInt(strNum1, 0);
int num2 = WebUtils.parseInt(strNum2, 0);
int result = num1 + num2;
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.print("<h1>" + num1 + "+" + num2 + "=" + result + "</h1>");
writer.flush();
writer.close();
}
}
cal.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>計算器</title>
</head>
<body>
<h1>計算器</h1>
<!--這裡的路徑是瀏覽器要解析的,因此如果寫成/calServlet的話,就會解析成http://主機名/calServlet
想要這樣設定的話,tomcat的路徑就不要寫專案名了-->
<form action="/calServlet" method="post">
num1:<input type="text" name="num1"/><br/>
num2:<input type="text" name="num2"/><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
設定Tomcat(注意application context的設定)
點選執行tomcat,在瀏覽器位址列中輸入:http://localhost:8080/cal.html
,顯示頁面如下:
輸入資料,點選提交:
我們建立web專案,都要依賴於Tomcat等web服務以及實現繼承Servlet介面。
可以看出對Tomcat的底層機制和呼叫到Servlet的流程的理解是十分重要的。
現在我們來模擬Tomcat底層實現,並能呼叫我們自己設計的Servlet,完成相同的功能。
說明:Tomcat有三種執行模式(BIO,NIO,APR),因為核心講解的是Tomcat如何接受使用者端請求,解析請求,呼叫Servlet,並返回結果的流程機制,因此採用BIO執行緒模型來模擬。
整個流程如下: