通过Gretty插件内嵌jetty/tomcat容器启动Java web项目
一、环境要求
一个好用的IDE编辑工具
Java环境(>=8)
Gradle构建工具(>=4.10.3)
二、创建应用结构 gradle使用war
插件来进行java web项目构建,war
插件继承了Java 插件并添加了对web应用程序的支持。默认情况下,使用src/main/webapp
目录作为web的资源目录。
为webdemo
项目建立如下目录结构
1 2 3 4 5 6 7 webdemo/ src/ main/ java/ webapp/ test java/
servlet或其他Java类都将放在src / main / java
中,测试代码写在src / test / java
,其他Web资源将放在src / main / webapp
。
三、添加Gradle脚本 在项目根目录下创建一个build.gradle
文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 plugins { id 'war' } repositories { jcenter() } dependencies { providedCompile 'javax.servlet:javax.servlet-api:3.1.0' testCompile 'junit:junit:4.12' }
① 添加并使用war插件
② 引入servlet依赖包,版本为3.1.0或更高
war插件添加了providerCompile和providerRuntime,类似于常规Java应用程序中的compile和runtime。providerCompile表示本地运行时所需的依赖关系,但打包时不会将其添加到生成的webdemo.war文件中。
再添加war插件时,无需指定版本,war和jar两个插件的版本,gradle已经内置进行管理了。
四、编写Servlet 从3.0版本开始,可以使用注解来开发Servlet,下面就会使用这种方式。在src/main/java
下创建包org/gradle/demo
,添加servlet文件HelloServlet.java
,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package org.gradle.demo;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet (name = "HelloServlet" , urlPatterns = {"/hello" }, loadStartup = 1 ) public class HelloServlet extends HttpServlet { protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().print("Hello, World!" ); } protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name" ); if (name == null ) name = "World" ; request.setAttribute("user" , name); request.getRequestDispatcher("response.jsp" ).forward(request, response); } }
① 基于注解的Servlet写法
② GET请求,返回基本字符串
③ POST请求,获取name参数并跳转到JSP页面
五、添加请求页面和JSP页面 首先在src/main/webapp
下添加一个index.html
文件,方便发送GET
和POST
请求。
index.html
内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <html > <head > <title > Web Demo</title > </head > <body > <p > Say <a href ="hello" > Hello</a > </p > <form method ="post" action ="hello" > <h2 > Name:</h2 > <input type ="text" id ="say-hello-text-input" name ="name" /> <input type ="submit" id ="say-hello-button" value ="Say Hello" /> </form > </body > </html >
然后在src/main/webapp
下添加一个response.jsp
文件,也就是当接收到post请求时跳转的页面。response.jsp
内容如下
1 2 3 4 5 6 7 8 9 <%@ page contentType ="text/html;charset=UTF-8" language ="java" %> <html > <head > <title > Hello Page</title > </head > <body > <h2 > Hello, ${user}!</h2 > </body > </html >
六、添加gretty
插件,以便于直接运行程序 gretty 插件是社区支持的杰出插件,可以在Gradle插件存储库中找到。该插件支持在Jetty或Tomcat上运行或测试Web应用程序。
在build.gradle
脚本的plugins
中添加如下
1 2 3 4 plugins { id 'war' id 'org.gretty' version '2.2.0' }
现在可以使用appRun
任务运行我们的程序了,默认是使用Jetty容器。运行输出如下
1 2 3 4 5 6 7 8 9 $ gradle appRun 00:32:30 INFO Jetty 9.2.24.v20180105 started and listening on port 8080 00:32:30 INFO webdemo runs at: 00:32:30 INFO http://localhost:8080/webdemo > Task :appRun Press any key to stop the server. <===========--> 87% EXECUTING [10s] > :appRun
出现http://localhost:8080/webdemo说明已经运行成功了 , 访问这个地址出现index.html所呈现的页面,点击一下试试吧。
补充、切换Servlet容器及更多配置 gretty目前支持的容器如下
Jetty
‘jetty7’, ‘jetty8’, ‘jetty9’, ‘jetty93’, ‘jetty94’
Tomcat
‘tomcat7’, ‘tomcat8’
只需要在build.gradle
文件中添加如下block即可
1 2 3 4 5 gretty { httpPort = 8083 contextPath = '/demo' servletContainer = 'tomcat8' }