1. 程式人生 > 其它 >Servlet+Maven建立Javaweb專案,部署到Tomcat上

Servlet+Maven建立Javaweb專案,部署到Tomcat上

1. Servlet簡介

  • Servlet是sun公司開發的動態web的一項技術
  • Sun在API中提供一個介面叫做:Servlet,開發一個Servlet程式需要完成兩個小步驟:
    1. 編寫一個類,實現servlet介面;
    2. 把開發好的Java類部署到web伺服器上。

把實現了Servlet介面的Java程式叫做,Servlet

2. 編寫HelloServlet程式

Serlvet介面Sun公司有兩個預設的實現類:HttpServlet,GenericServlet

2.1 構建一個普通的Maven專案,刪掉裡面的src目錄,在這個專案裡面建立Moudel(模組),這個空的工程就是Maven主工程;

2.2 在Maven父子工程中,父專案的pom.xml中自動生成

    <modules>
        <module>servlet-01</module>
        <module>servlet-02</module>
    </modules>
    //告訴編譯器,在讀取主pom時,去找兩個子pom

2.3 Maven環境優化

  1. 修改web.xml為最新(去tomca資料夾下的webapps下去取);
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

</web-app>
  1. 將maven結構搭建完整,,main下建java資料夾,resources資料夾

2.4 編寫一個Servlet程式

  1. 編寫一個普通類
  2. 實現Servlet介面,這裡我們直接繼承HttpServlet(HttpServlet實現了Servlet介面)
public class HelloServlet extends HttpServlet {

    //get post只是請求實現的不同方式,所有這裡兩個豐富可以相互呼叫,業務邏輯是相同的
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doget");
        PrintWriter writer = resp.getWriter();//響應流
        writer.print("hello,servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

2.5 編寫Servlet的對映

為什麼需要對映?
我們寫的是Java程式,但是需要通過瀏覽器訪問,而瀏覽器需要連線web伺服器,所以我們需要在web服務中註冊我們寫的Servlet(web.xml中註冊),還需要給它一個瀏覽器能夠訪問的路徑;

  <!--註冊Servlet-->
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>cn.zafu.servlet.HelloServlet</servlet-class>
  </servlet>
  <!--Servlet的請求路徑-->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

2.6 配置Tomcat

注意配置專案釋出路徑即可。

2.7 啟動專案

啟動後通過請求路徑訪問程式。

3. Servlet原理

Servlet是由Web伺服器呼叫的,web伺服器收到瀏覽器請求後:

4. Mapping問題

  1. 一個Servlet可以指定一個對映路徑
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
  1. 一個Servlet可以指定多個對映路徑
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello3</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello4</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello5</url-pattern>
    </servlet-mapping>
  1. 一個Servlet可以指定通用對映路徑
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello/*</url-pattern>
    </servlet-mapping>
  1. 預設請求路徑
    <!--預設請求路徑-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
  1. 指定一些字尾或者字首等等….
<!--可以自定義字尾實現請求對映
    注意點,*前面不能加專案對映的路徑
    hello/sajdlkajda.qinjiang
    -->
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>*.cxd</url-pattern>
</servlet-mapping>
  1. 優先順序問題

指定了固有的對映路徑優先順序最高,如果找不到就會走預設的處理請求;

<!--404-->
<servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>cn.zafu.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>