java web gradle_gradle学习之旅(四) 使用gradle构建简单的java web项目

本节通过一个简单的javaweb项目来体会gradle的使用

需求

构建一个javaweb项目,搭建jsp+servlet开发环境

可以将需求分解为两步:

使用gradle构建一个java项目

为该项目构建web视图层

工具

gradle4.3

idea

jdk 1.8

实验过程

首先在idea中创建一个空的gradle项目

af921bbdd59143a1b77ced3e43e53599.png

创建如下目录-文件结构

这里需要特别说明,下面的目录结构与文件组织方式是gradle的java插件和war插件对于java和javaweb项目的默认约定结构,如果该项目遵守约定,则几乎不需要配置源代码文件、web.xml、测试文件等的路径,这也是体现gradle汲取了maven的优点:约定优于配置。

da0f35362d0c20001478f73243bd02be.png

在构建脚本中写入如下内容

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来接受所有的请求

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">

ToDoServlet

com.shy.todo.web.ToDoServlet

ToDoServlet

/

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拦截到并进行处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 整数 引用传递_关于Java引用传递的一个困惑?

Java的引用(包括基本类型,对象引用类型)在声明、方法调用等时候都会产生新的引用,复制等号右侧的引用。分为下面3种情况:基本类型代表的值存储在引用里面,引用中专门有个区域存储这个值,所以在复制的时候,值…

java fastjson 泛型_解决fastjson泛型转换报错的解决方法

错误信息Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.xh.demo.UserDO泛性类Datapublic class ResultSetDTO {private Integer totalSize;private Integer count;private List records;}实体类…

通达OA header身份认证绕过漏洞复现

通达OA是中国通达公司的一套协同办公自动化软件,通达OA2013,通达OA2016,通达OA2017 存在身份认证绕过漏洞,攻击者可以利用漏洞生成cookie,实现未授权访问。 1.漏洞级别 高危 2.漏洞搜索 fofa title"office An…

leetcode mysql 排名_Leetcode178.分数排名(中等)

题目编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。-----------| Id | Score |-----------| 1 | 3.50 || 2 | 3.6…

java post 中文乱码问题_java post中文乱码问题

java post中文乱码问题function addcategory() {if (document.myform.category.value "") {alert("商品分类不能为空");return;}//var categorydocument.getElementById("category").value;var c document.myform.category.value;alert(c);wit…

java struct工作原理_Struts2的工作原理(图解)详解

Struts2的工作原理上图来源于Struts2官方站点,是Struts 2 的整体结构。一个请求在Struts2框架中的处理大概分为以下几个步骤(可查看源码:https://github.com/apache/struts):1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求2 这个请求经过一系列的…

java 旅行家的预算_洛谷 P1016 旅行家的预算 Java解法

洛谷 P1016 旅行家的预算 Java解法洛谷 P1016 旅行家的预算 Java解法package com.two;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);double D1 sc.nextDouble();// 两个城市之间的距离double C …

java语言执行过程_Java程序的运行过程(执行流程)分析

万事知其然,要知其所以然,所以本节带大家来详细了解一下 Java 程序的执行过程。从《使用记事本编写运行Java程序》一节的案例可以看出,Java 程序的运行必须经过编写、编译和运行 3 个步骤。编写:是指在 Java 开发环境中进行程序代…

php搭建云服务器,云服务器上如何搭建php环境

1) 安装libtool和libtool-ltdl[rootlocalhost mysql]# yum -y install "libtool*"[rootlocalhost mysql]# yum -y install "libtool-ltdl*"2) 手工修改gd库文件PHP 5.4 也有一些 Bug,在检测 gd 库时会报错,需要我们手工修改。命令如…

php实现文本替换,php 如何实现文字替换

php实现文字替换的方法:首先创建一个PHP示例文件;然后输入代码“str_replace("iwind", "kiki", "i love iwind, iwind said");”;最后输出执行结果即可。在php替换字符效率最高也是最简单字符替换函数str_repl…

php 删除指定html标签,php删除html标签的三种解决办法

分享下PHP删除HTMl标签的三种方法。方法1:直接取出想要取出的标记function strip($str){$strstr_replace("","",$str);//$strhtmlspecialchars($str);return strip_tags($str);}//edit by www.jbxue.com?>方法2.PHP 中有个 strip_tags 函数…

达内php第三次月考,达内第三次月考

1. 下列不属于浏览器内置的对象的是:()A. navigatorB. documentC. windowD. request正确答案:D2. Servlet 可以存储数据的三个不同的作用域是()。A. 请求、会话和上下文B. 响应、会话和上下文C. 请求、响应和会话D. 请求、响应和上下文正确答案&#xff…

java win10 通知,如何使用Java AWT创建和显示Windows 10通知

在Java中, 如何生成不同类型的通知或警报非常令人困惑。一些开发人员更喜欢使用JOptionPane, 但是当你在固定环境中工作时(例如在Windows 10中), 使用Windows的默认通知样式非常好, 因此这就是为什么我们向你展示一个简短的摘要来显示Java AWT轻松实现Windows 10通知。以下代码…

matlab枚举类型,在 Simulink 模型中使用枚举数据

计算中的枚举值按照设计,Simulink 不允许在数学计算中将枚举值作为数值使用,即使枚举类是 MATLAB int32 类的子类也是如此。因此,尽管枚举类型存在基础整数,也不能作为数值类型使用。例如,您不能直接为 Gain 模块输入枚…

dataguard mysql,[dataguard同步数据库]Dataguard环境下数据库的备份与恢复

在线QQ客服:1922638专业的SQL Server、MySQL数据库同步软件在部署完active data guard后,不但可以将只读的查询交给备库执行,还可以把日常的数据库备份工作放在备库上执行,从而减轻主库的压力,充分的发挥服务器资源&am…

php getimagecompose,Docker进阶:Dockerfile以及docker-compose工具

Dockerfile:用来定制镜像的文件Docker-compose:用来部署容器集群的命令工具Dockerfile基本语法FROM:指定基础镜像,格式一般是FROM :FROM必须是Dockerfile的第一条非注释的命令是镜像名,是指定版本,不写的话…

Redis的安装以及使用

第一步,去官网下载一个压缩包到本地解压即用,绿色软件,不用其他操作,点击Download下载即可: Introduction to Redis | RedisLearn about the Redis open source projecthttps://redis.io/docs/about/第二步&#xff0…

oracle+行换列,Oracle的数据表中行转列与列转行的操作实例讲解

行转列一张表查询结果为--行转列select years,(select amount from Tb_Amount as A where month1 and A.yearsTb_Amount.years)as m1,(select amount from Tb_Amount as A where month2 and A.yearsTb_Amount.years)as m2,(select amount from Tb_Amount as A where month3 and…

js十秒没有点击怎么判断_MAC口红怎么判断真假?没批号就没有生产日期,网友:品控太差...

一般来说,MAC的口红产品,底部都会有三位编码,这是该款口红的批号。因像MAC这类国外美妆护肤品牌,是不会将生产日期明确的标注在产品上,都是将其编码成批号,在标注在外包装或者产品的侧面、底部等边缘位置。…

go run main.go 参数_介绍一款Go项目热编译工具gowatch

使用场景在golang项目编写过程中,需要对项目不断的进行构建go build并调试以快速发现问题,而我们每次进行手动的进行go build又太重复,所以写了这么一个工具gowatch来实时的监听文件的改动并编译运行,大大提升开发效率。快速入门安…