java web mvc-08-Grails 入门介绍

拓展阅读

Spring Web MVC-00-重学 mvc

mvc-01-Model-View-Controller 概览

web mvc-03-JFinal

web mvc-04-Apache Wicket

web mvc-05-JSF JavaServer Faces

web mvc-06-play framework intro

web mvc-07-Vaadin

web mvc-08-Grails

开源

The jdbc pool for java.(java 手写 jdbc 数据库连接池实现)

The simple mybatis.(手写简易版 mybatis)

入门例子

2.1 安装要求

在安装 Grails 之前,您需要安装一个带有下表中最低版本的 Java 开发工具包(JDK)。

下载适用于您操作系统的相应 JDK,运行安装程序,然后设置一个名为 JAVA_HOME 的环境变量,该变量指向此安装的位置。

Grails 版本 JDK 版本(最低)
6 11

5 8

为了自动化 Grails 的安装,我们推荐使用 SDKMAN,该工具大大简化了安装和管理多个 Grails 版本的过程。

在某些平台上(例如 macOS),Java 安装会被自动检测。然而,在许多情况下,您可能希望手动配置 Java 的位置。例如,如果您使用的是 bash 或 Bourne Shell 的其他变体:

export JAVA_HOME=/Library/Java/Home
export PATH="$PATH:$JAVA_HOME/bin"

在 Windows 上,您需要在“我的电脑/高级/环境变量”中配置这些环境变量。

2.2 下载和安装

启动使用 Grails 的第一步是安装发行版。

在 *nix 系统上,使用 SDKMAN 是安装 Grails 的最佳方式,该工具大大简化了安装和管理多个 Grails 版本的过程。

使用 SDKMAN 安装

要使用 SDKMAN 安装最新版本的 Grails,请在终端上运行以下命令:

sdk install grails

您还可以指定一个版本

sdk install grails 6.1.1

有关 SDKMAN 使用的更多信息,可以参阅 SDKMAN 文档。

2.3 创建应用程序

要创建一个 Grails 应用程序,首先需要熟悉使用 grails 命令,该命令的使用方式如下:

grails <<命令名称>>

运行 create-app 命令创建应用程序:

grails create-app myapp

这将在当前目录内创建一个包含项目的新目录。在控制台中导航至此目录:

cd myapp

2.4 使用 Grails 创建简单的 Web 应用程序

改进此文档
步骤 1:创建一个新项目
打开你的命令提示符或终端。

导航到你想创建 Grails 项目的目录:

$ cd 你的项目目录

使用以下命令创建一个新的 Grails 项目:

$ grails create-app myapp --servlet=tomcat

使用 --servlet 选项并设置值为 “tomcat” 指定 Grails 应用程序应配置为使用嵌入式的 Tomcat Servlet 容器作为其运行时环境,允许你在开发和测试过程中将应用程序作为独立可执行文件运行。

步骤 2:访问项目目录
切换到刚刚创建的 “myapp” 目录:

$ cd myapp

步骤 3:启动 Grails 交互式控制台
通过运行 “grails” 命令启动 Grails 交互式控制台:

$ grails

步骤 4:创建一个控制器
在 Grails 交互式控制台中,你可以使用自动补全来创建一个控制器。输入以下命令创建一个名为 “greeting” 的控制器:

grails> create-controller greeting

此命令将在 grails-app/controllers/myapp 目录下生成一个名为 “GreetingController.groovy” 的新控制器文件。你可能会想知道为什么会有额外的 “myapp” 目录。这个结构符合 Java 开发中通常使用的约定,其中类被组织成包。Grails 自动将应用程序名称包含在包结构中。如果你没有指定包,Grails 默认使用应用程序名称。

有关创建控制器的更详细信息,你可以参考 create-controller 页面上的文档。

步骤 5:编辑控制器
在文本编辑器中打开 “grails-app/controllers/myapp” 目录中的 “GreetingController.groovy” 文件。

将以下代码添加到 “GreetingController.groovy” 文件中:

package myapp

class GreetingController {

    def index() {
        render "Hello, Congratulations for your first Grails application!"
    }
}

这个动作只是一个方法。在这种情况下,它调用 Grails 提供的一个特殊方法来渲染页面。

步骤 6:运行应用程序
现在,Grails 框架依赖于 Gradle 任务来运行应用程序。要启动应用程序,请使用以下 Gradle bootRun 命令:

$ ./gradlew bootRun

默认情况下,你的应用程序将在端口 8080 上托管。你可以在 web 浏览器中访问:

http://localhost:8080/

现在,需要了解欢迎页面是由以下 URL 映射确定的:

class UrlMappings {
    static mappings = {
        "/$controller/$action?/$id?(.$format)?"{
            constraints {
                // apply constraints here
            }
        }

        "/"(view:"/index")
        "500"(view:'/error')
        "404"(view:'/notFound')
    }
}

这个映射指定根 URL (“/”) 应该显示 “index.gsp” 视图,该视图位于 “grails-app/views/index.gsp”。这个 “index.gsp” 文件用作欢迎或首页。映射中的其他条目处理 HTTP 状态码为 500 和 404 的错误页面。

Grails 基于控制器和动作名称的 URL 约定

Grails 遵循一种 URL 约定,依赖于控制器和它们的动作的名称。这种约定简化了在 Web 应用程序中创建和访问各种页面或功能的过程。

在提供的代码示例中:

package myapp

class GreetingController {

    def index() {
        render "Hello, Congratulations for your first Grails application!"
    }
}

GreetingController 类表示 Grails 中的一个控制器。

在控制器内部,定义了一个名为 index 的动作作为方法。在 Grails 中,动作本质上是控制器内处理特定任务或响应用户请求的方法。

现在,让我们了解 Grails URL 约定是如何基于此控制器和动作工作的:

URL 中的控制器名称:

控制器名称,例如 “GreetingController”,在 URL 中使用。但是,约定会将控制器名称的首字母大写并删除 “Controller” 后缀。因此,在 URL 中 “GreetingController” 变为 “greeting”。

URL 中的动作名称:

默认情况下,如果在 URL 中不指定动作,Grails 将假定 “index” 动作。因此,在此示例中,访问 URL /greeting

有关默认动作的更多详细信息,请参阅用户指南的控制器和动作部分的末尾。

可选:设置上下文路径
如果要为应用程序设置上下文路径,请在 “grails-app/conf/application.yml” 文件中创建一个配置属性:

server:
    servlet:
        context-path: /myapp

通过此配置,应用程序将在以下位置可用:

http://localhost:8080/myapp/

或者,当使用 Gradle 运行 Grails 应用程序时,还可以从命令行设置上下文路径。以下是如何做到这一点:

./gradlew bootRun -Dgrails.server.servlet.context-path=/your-context-path

将 /your-context-path 替换为 Grails 应用程序所需的上下文路径。该命令通过 -Dgrails.server.servlet.context-path 系统属性直接设置上下文路径。

例如,如果你希望应用程序位于 “http://localhost:8080/myapp”,可以使用以下命令:

./gradlew bootRun -Dgrails.server.servlet.context-path=/myapp

这使你能够在不修改应用程序配置文件的情况下配置上下文路径,这是在使用 Gradle 运行 Grails 应用程序时的一种灵活和方便的选项。

可选:更改服务器端口
如果端口 8080 已被占用,可以使用 grails.server.port 系统属性在不同端口上启动服务器:

$ ./gradlew bootRun --Dgrails.server.port=9090

将 “9090” 替换为你首选的端口。

对于 Windows 用户的注意事项

如果遇到与 Java 进程或文件名长度有关的错误,请使用 --stacktrace 标志或将 grails { pathingJar = true } 添加到你的 “build.gradle” 文件。

结论

现在,当你在 web 浏览器中访问时,你的 Grails 应用程序将显示 “Hello, Congratulations on your first Grails application!” 消息。

记住,你可以创建多个控制器和动作,以使用 Grails 构建更复杂的 Web 应用程序。每个动作对应于基于控制器和动作名称的唯一 URL 可访问的不同页面。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年,AIGC赛道专利文献和软著大全

一、周红伟-深度学习国际发明专利 深度学习国际发明专利 基于深度学习的图像检索方法及装置&#xff0c;专利公开公告号&#xff1a;CN107368614A。专利类型&#xff1a;发明公布。发明人&#xff1a;周红伟;李凯;任伟;李庆;郭奇杰;周杨;刘川郁 二、机器学习算法发表文献 Simul…

多窗口大小和Ticker分组的Pandas滚动平均值

最近一个学弟在在进行数据分析时&#xff0c;经常需要计算不同时间窗口的滚动平均线。当数据是多维度的&#xff0c;比如包含多个股票或商品的每日价格时&#xff0c;我们可能需要为每个维度计算滚动平均线。然而&#xff0c;如果我们使用传统的groupby和apply方法&#xff0c;…

Pycharm运行提示(运行‘Python测试(00.py内)‘(u)

为什么有时候我在pycharm中运行代码会出现图片中的问题&#xff1f; 我们该如何改过来&#xff1f; 很简单 点击文件-设置 点击Python集成工具&#xff0c;在默认测试运行程序里修改为Unittest即可 再次运行代码就会显示正常的运行 你的pycharm可能是英文 如何英文变中文&…

第二证券:A股将迎“更加有力有效措施”

2024年开年以来&#xff0c;A股商场接连弱势格局&#xff0c;上证指数接连将2900点、2800点整数关口击穿。就在出资者缺少决心之际&#xff0c;商场总算迎来方针暖意。1月22日举行的国务院常务会议提出&#xff0c;要采纳愈加有力有用办法&#xff0c;促进本钱商场平稳健康开展…

MySQL JSON数据类型全解析(JSON datatype and functions)

JSON&#xff08;JavaScript Object Notation&#xff09;是一种常见的信息交换格式&#xff0c;其简单易读且非常适合程序处理。MySQL从5.7版本开始支持JSON数据类型&#xff0c;本文对MySQL中JSON数据类型的使用进行一个总结。 目录 一、MySQL中的JSON 1.1 JSON数据格式 1.2 …

Codeforces Round 812 (Div. 2) ---- C. Build Permutation --- 题解

目录 C. Build Permutation 题目描述&#xff1a; ​编辑 思路解析&#xff1a; 代码实现&#xff1a; C. Build Permutation 题目描述&#xff1a; 思路解析&#xff1a; 先证明在任何情况下答案均存在。 假设我们所求的为 m m1 m2.....n 的排列&#xff0c;我们称不小于n…

做跨境电商,为什么要建独立站,2024年的机会在哪里?一次性讲清楚...

近年来&#xff0c;跨境电商的商家们面临越来越大的平台政策压力&#xff0c;商家们纷纷把眼光聚焦到搭建独立站上&#xff0c;眼下独立站已经成为出海卖家的标配。那什么是“独立站”&#xff1f;对比平台电商&#xff0c;独立站又有什么优势&#xff1f;以及新手该如何入门独…

git的使用(idea中)

文章目录 Git分布式版本控制工具1、目标2、概述2.1、开发中的实际场景2.2、版本控制器的方式2.3、SVM2.4、Git2.5、Git工作流程 3、Git安装与常用命令3.1、Git环境配置3.1.1 下载与安装3.1.2基本配置3.1.3为常用指令配置别名(可选)3.1.4解决GitBash乱码问题 3.2、获取本地仓库3…

[足式机器人]Part2 Dr. CAN学习笔记- 最优控制Optimal Control Ch07

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - 最优控制Optimal Control Ch07-1最优控制问题与性能指标 1. 最优控制问题与性能指标2. 动态规划 Dynamic Programming2.1 基本概念2.2 代码详解2.3 简单一维案例 3. 线性二次型调节器&#xff…

notepad++: 插件fingertext 来创建代码块

下载 最新版可以软件里下&#xff0c;或者官网下 https://sourceforge.net/projects/fingertext/ 下了之后&#xff0c;解压压缩包&#xff0c;得到一个 .all 类型的文件&#xff0c;放在notepad 这个文件夹里&#xff1a; 使用 这样输入mod&#xff0c;再tab键&#xff0c;…

使用Unity创建VisionPro应用

1、下载特定Unity版本 Unity账号需要是Pro账号,普通账号不行,目前只支持这1个Unity版本,不要下载任何其它版本:unityhub://2022.3.11f1/d00248457e15) 其它条件:使用Mac电脑M系列芯片,XCode15 Beta2及以上 参考资料: 苹果官网:苹果官网 Unity官网:Unity官网 官方教程…

一览2023 Web3 风云录

撰文&#xff1a;JIN&#xff0c;Techub News 相关推荐&#xff1a;2024年Web3.0数字资产六大趋势&#xff08;完整版&#xff09; 2023 年的加密货币市场充满了波折和挑战。年初&#xff0c;全球最大的加密货币风投机构 DCG 深陷债务危机&#xff1b;年末又见证了比特币一路…

LeetCode.2865. 美丽塔 I

题目 题目链接 分析 闲谈&#xff1a;每次读 LeetCode 的题目描述都要费老大劲&#xff0c;o(╥﹏╥)o 题意&#xff1a;这个其实意思就是以数组的每一位作为最高点&#xff0c;这个点&#xff08;数字&#xff09;左右两边的数字都不能大于这个数字(可以等于)&#xff0c;…

什么是电源纹波?如何测量电源纹波?

一、电源纹波概念 1.1 什么是纹波 电源纹波是指叠加在直流电源输出的电压或电流中的交流成分&#xff0c;是一种周期性的波动信号。好比平静的湖面有一阵风吹过&#xff0c;带起阵阵水波。这就是纹波的概念。 如下图示&#xff0c;使用示波器测量纹波时&#xff0c;上面的尖锐…

听神经瘤的听力学表现

听神经瘤的听力学诊断 听神经瘤的听力学表型多样&#xff0c;听力正常者不能排除听神经瘤&#xff1b;听力损失程度不能预判肿瘤大小&#xff1b;纯音测听与言语识别率不一致应警惕蜗后病变&#xff1b;听性脑干诱发电位诊断听神经瘤敏感度随肿瘤增大而增加。 一&#xff0e;纯…

19.云原生CICD之ArgoCD入门CD过程实战

云原生专栏大纲 文章目录 ArgoCDArgoCD 简介GitOps介绍Argo CD 的工作流程argocd和jinkens对比kustomize介绍ArgoCD和kustomize关系 安装argocdargocd控制台介绍首页应用创建表单SYNC OPTIONS&#xff08;同步选项&#xff09;SYNC POLICY&#xff08;同步策略&#xff09; 应…

Linux中文件属性的获取(stat、chmod、Istat、fstat函数的使用)

修改文件权限 函数如下&#xff1a; chmod/fchmod函数用来修改文件的访问权限: #include <sys/stat.h> int chmod(const char *path, mode_t mode); int fchmod(int fd, mode_t mode); 成功时返回0&#xff1b;出错时返回EOF 注意&#xff1a;在vmware和windows共享的文…

亚信安慧AntDB:AntDB-M元数据锁之锁的获取(三)

5 锁的获取 5.1 锁的强弱 当线程已经持有的锁比新申请的锁更强时&#xff0c;认为已经持有了锁&#xff0c;无需再对申请锁类型加锁。锁的强弱指持有的锁与其他锁的不兼容集合大小&#xff0c;集合相同锁相同&#xff0c;集合更大锁更强&#xff0c;否则无强弱关系。通过锁的…

Find My手套|苹果Find My技术与手套结合,智能防丢,全球定位

手套是手部保暖或劳动保护用品&#xff0c;也有装饰用的。手套是个很特别的东西&#xff0c;当初它的产生并不是为了实用&#xff0c;只是到近代&#xff0c;它才成了寒冷地区保温必备之物&#xff0c;或是医疗防菌、工业防护用品。手套按照制作方法分为缝制、针织、浸胶等。如…

第二证券:股指预计维持蓄势震荡格局 关注通信设备、软件开发等板块

第二证券以为&#xff0c;沪指盘中下探近期新低后快速反弹&#xff0c;商场抛压力度逐步削弱&#xff0c;跟着北上资金逐步回流&#xff0c;资金抄底志愿回归。从周线等级看&#xff0c;指数回踩2020年3月份低位&#xff0c;做空力气有逐步削弱痕迹&#xff0c;短期将有望构成周…