【Maven】記第一次使用maven創建web工程遇到的坑

【開發IDE】

InteIliJ IDEA 2019.3.3 (Ultimate Edition)

jdk 13.0.2

apache maven 3.6.3

【創建工程】

File->New->Project->Maven,這裏選擇從maven自帶的web骨架創建一個web工程,注意要勾選“Create from archetype”,才能選擇下面的骨架類型。

創建好的工程,目錄結構如圖所示

和標準的web目錄相比還缺少了一些文件夾,手動補齊

依次  main->New->Directory,會自動提示【java】和【resources】,直接雙擊即可

補充完後的目錄結構如下:

【java】下新建一個package【com.yy.servlet】,然後在這個包下新建一個servlet叫MyServlet.java

問題1 右鍵新建的時候會發現找不到Servlet這個文件模板,當然你可以直接新建一個Java Class然後自己繼承HTTPServlet,但考慮開發效率,我們一般還是會通過模板直接創建更高效。

出現這個問題的原因是現在這個工程是通過maven直接創建的,什麼jar包都沒有依賴,工程無法識別servlet,所以直接在【pom.xml】 裏添加servlet的jar包就可以了。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

tips:假如不清楚具體怎麼寫,可以到maven的中央倉庫:https://mvnrepository.com/ 直接搜索所需要的jar包名稱,選擇合適的版本,同時會提供一段代碼,如下圖所示,直接將代碼複製到pom.xml中即可。

添加完成以後,就能正常添加servlet文件了。這裏還要注意一點,創建servlet的時候不要勾選【Create Java EE 6 annotated class】,這樣創建的servlet總是找不到會報404錯誤,應該是地址沒有指定清楚的緣故,還是手動在web.xml添加路徑比較好。

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.yy.servlet.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

打開MyServlet.java文件,在doGet方法下添加

request.getRequestDispatcher("/index.jsp").forward(request,response);

在doPost方法下添加

doGet(request,response);

現在通過maven工具欄中的“M”標誌,執行mvn tomcat:run 

打開瀏覽器,輸入:http://localhost:8080/maven_web_2/MyServlet 回車

問題2 運行報錯Compilation error

原因是maven默認使用的是tomcat6,而pom.xml文件裏顯示當前jdk是1.7,不兼容,造成compiler error

解決方案:主要有兩種方式,一種是調整jdk的版本,一種是調整Tomcat的版本

第一種調整jdk的版本,可參考maven的官方文檔 :http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html,直接在pom.xml文件中修改即可,修改也有兩種方式。

#1#->在<properties>標籤中直接修改

<project>
  [...]
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  [...]
</project>

#2#->在<plugins>中標籤中添加

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

第二種調整Tomcat的版本,默認是6,我們這裏修改成7,在pom.xml添加如下代碼

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
</plugin>

再次運行mvn tomcat7:run,成功!請注意這裏不再是tomcat:run而是tomcat7:rum

【參考資料】

http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html

http://tomcat.apache.org/maven-plugin-2.1/tomcat7-maven-plugin/plugin-info.html

http://www.05bk.com/714.html

https://segmentfault.com/a/1190000021673498

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章