本節通過一個簡單的javaweb項目來體會gradle的使用
需求
構建一個javaweb項目,搭建jsp+servlet開發環境
可以將需求分解為兩步:
- 使用gradle構建一個java項目
- 為該項目構建web視圖層
工具
- gradle4.3
- idea
- jdk 1.8
實驗過程
-
首先在idea中創建一個空的gradle項目
-
創建如下目錄-文件結構
這里需要特別說明,下面的目錄結構與文件組織方式是gradle的java插件和war插件對於java和javaweb項目的默認約定結構,如果該項目遵守約定,則幾乎不需要配置源代碼文件、web.xml、測試文件等的路徑,這也是體現gradle汲取了maven的優點:約定優於配置。
-
在構建腳本中寫入如下內容
group 'com.shy'
version '1.0-SNAPSHOT'
apply plugin:'java'
apply plugin:'war'
apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'//這里使用了gradle官方提供的Gretty插件來完成傳統web容器的功能,這個插件提供了各種run、start、debug 的task,做實驗比較方便
//執行jar任務時會在jar文件代碼清單中加入Main-Class頭
jar{//Groovy的閉包委托特性
manifest{
attributes 'Main-Class':'com.shy.todo.ToDoApp'
}
}
repositories{
mavenCentral();//對maven central 2倉庫訪問的快捷方式
}
dependencies{
providedCompile 'javax.servlet:servlet-api:2.5'
runtime 'javax.servlet:jstl:1.2'
}
task wrapper(type:Wrapper ){
gradleVersion = '4.3'
}
4.web.xml配置如下
使用一個ToDoServlet來接受所有的請求
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>ToDoServlet</servlet-name>
<servlet-class>com.shy.todo.web.ToDoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ToDoServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
5.ToDoServlet負責轉發請求
public class ToDoServlet extends HttpServlet{
private ToDoRepository toDoRepository = new InMemoryToDoRepository();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String servletPath = req.getServletPath();
String view = processRequest(servletPath,req);
RequestDispatcher dispatcher = req.getRequestDispatcher(view);
dispatcher.forward(req,resp);
System.out.println("hello");
}
private String processRequest(String servletPath,HttpServletRequest request){
if(servletPath.equals("/all")){
return "/jsp/todo-list.jsp";
}else {
return "not-found.jsp";
}
}
}
以上便是項目源碼,可以看出如果遵守gradle的插件對於項目的一系列約定,則構建腳本非常簡潔,實際上構建java項目只需要一行:
apply plugin:'java'
而構建web項目也僅需要如下腳本,聲明插件和依賴
apply plugin:'war'
repositories{
mavenCentral();//對maven central 2倉庫訪問的快捷方式
}
dependencies{
providedCompile 'javax.servlet:servlet-api:2.5'
runtime 'javax.servlet:jstl:1.2'
}
實驗結果
由於使用了Gretty插件,則編譯打包部署的步驟僅需要執行一個task
gradle appRun
然后便可在瀏覽器中訪問:默認訪問地址為localhost:8080/[項目名],這個請求被servlet攔截到並進行處理。