編寫一個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/hello1
打開浏覽器,在浏覽器位址欄輸入上述位址,網頁顯示:
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。