天天看點

maven一波流(5)——如何部署maven web項目

編寫一個servlet用于測試

為了測試部署之後項目可用,我們至少得寫一個servlet。

在src/mian/java下建立包:com.panda.webdemo.servlet,并在該包建立類:HelloServlet,代碼如下:

@WebServlet("/hello")

public class HelloServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

   public HelloServlet() {

       super();

   }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 response.getWriter().write("Hello World");

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 doGet(request, response);

}

注意該servlet通過注解@WebServlet标注,是以通路/hello即指向該Servlet。

如果通路成功,則輸出Hello World。

部署方法1——手工打包、手工部署

最簡單的,直接右鍵單擊項目-run as-maven install,控制台輸出:

[INFO] --- maven-install-plugin:2.4:install (default-install) @ webdemo ---

[INFO] Installing D:\\Workspace\\EclipsePhoton\\webdemo\\target\\webdemo.war to G:\\MavenRepo\\com\\panda\\webdemo\\0.0.1-SNAPSHOT\\webdemo-0.0.1-SNAPSHOT.war

将webdemo/target/webdemo.war手工拷貝到tomcat下webapps下,啟動tomcat,通路如下位址,注意我的tomcat端口設為預設的80,是以可以不用寫端口号。

http://127.0.0.1/webdemo/hello

1

打開浏覽器,在浏覽器位址欄輸入上述位址,網頁顯示:

Hello World

大功告成。

但是每次打包都需要手工拷貝部署也太麻煩了,尤其是在開發階段,這個沒關系,maven通過插件提供了更快捷的部署方式。

部署方法2——通過maven-jetty-plugin插件部署

首先添加插件,添加方式很簡單,在pom.xml中添加一個插件坐标即可,maven會自動将坐标對應插件弄到項目中來。

<build>

 <finalName>webdemo</finalName>

 <plugins>

  <plugin>

   <groupId>org.mortbay.jetty</groupId>

   <artifactId>jetty-maven-plugin</artifactId>

   <version>8.1.15.v20140411</version>

   <configuration>

    <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>

    <webApp>

     <!-- 注意,如果不配置該參數,則通路位址為127.0.0.1:8080/hello -->

     <!-- 配了,則通路:127.0.0.1:8080/webdemo/hello  -->

     <contextPath>/webdemo</contextPath>

    </webApp>

    <connectors>

     <connector

      implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">

      <!-- 指定端口 -->

      <port>8080</port>

      <maxIdleTime>60000</maxIdleTime>

     </connector>

    </connectors>

   </configuration>

  </plugin>

 </plugins>

</build>

然後選中項目,右擊項目名-Run as-Maven Build…,在項目配置視窗中的Goals項輸入:jetty:run,然後點選Run按鈕運作。

然後就不幸報錯了,這個錯原因是端口被占用,

Exception in thread "Shutdown" java.lang.NoClassDefFoundError: org/apache/jasper/runtime/JspApplicationContextImplException in thread "Shutdown" java.lang.NoClassDefFoundError: org/apache/jasper/runtime/JspApplicationContextImpl

仔細檢視控制台日志發現[INFO] Stopped [email protected]:8080,說明應該是8080被占用了,OK,我習慣使用TCPView直接幹掉8080口程序。

然後再次Run as-Maven Build,注意因為之前已經配置過插件,是以點選後直接運作了。

控制台此次輸出,說明啟動成功。

[INFO] Started [email protected]:8080

[INFO] Started Jetty Server

在浏覽器位址欄輸入:

http://127.0.0.1:8080/webdemo/hello

,頁面顯示Hello World。