当前位置: 首页 > news >正文

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 myappclass 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 myappclass 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 可访问的不同页面。

在这里插入图片描述

相关文章:

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 …...

深度学习技术栈 —— Pytorch之TensorDataset、DataLoader

深度学习技术栈 —— Pytorch之TensorDataset、DataLoader 前言一、TensorDataset、DataLoader的用法&#xff1f;二、从.csv文件-->tensor张量总结 前言 简单来说&#xff0c;TensorDataset与DataLoader这两个类的作用&#xff0c; 就是将数据读入并做整合&#xff0c;以便…...

远程git开发

两种本地与远程仓库同步 """ 1&#xff09;你作为项目仓库初始化人员&#xff1a;线上要创建空仓库 > 本地初始化好仓库 > 建立remote链接(remote add) > 提交本地仓库到远程(push)2&#xff09;你作为项目后期开发人员&#xff1a;远程项目仓库已经创…...

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…...

Matlab 将工作区变量保存到文件中(save)

语法 1、save(filename) 2、save(filename,variables) 3、save(filename,variables,fmt) 4、save(filename,variables,version) 5、save(filename,variables,version,-nocompression) 6、save(filename,variables,-append) 7、save(filename,variables,-append,-nocompression…...

源码实现简介

本系列所有代码在文章底部&#xff0c;每一章节代码可独立编译运行 随着科技的飞速发展&#xff0c;自动驾驶技术正逐渐成为现实。而在自动驾驶技术中&#xff0c;感知是至关重要的一个环节。通过感知&#xff0c;自动驾驶车辆能够识别和理解周围环境&#xff0c;进而做出相应…...

我每天如何使用 ChatGPT

我们都清楚互联网的运作方式——充斥着各种“爆款观点”&#xff0c;极端分裂的意见&#xff0c;恶搞和无知现象屡见不鲜。 最近&#xff0c;大家对于人工智能&#xff08;AI&#xff09;特别是大语言模型&#xff08;LLMs&#xff09;和生成式 AI&#xff08;GenAI&#xff0…...

MySQL修炼手册14:用户权限管理:安全保障与数据隔离

目录 写在开头1 用户与权限的关系1.1 用户的创建与删除1.1.1 创建新用户1.1.2 批量创建用户1.1.3 安全删除用户 1.2 授予与撤销权限1.2.1 授予权限1.2.2 批量授予权限1.2.3 撤销权限 2 角色的应用2.1 创建与管理角色2.1.1 创建角色2.1.2 管理角色 2.2 将权限赋予角色2.2.1 将权…...

动态规划解决马尔可夫决策过程

马尔可夫决策过程是强化学习中的基本问题模型之一&#xff0c;而解决马尔可夫决策过程的方法我们统称为强化学习算法。 动态规划&#xff08; dynamic programming, DP &#xff09;具体指的是在某些复杂问题中&#xff0c;将问题转化为若干个子问题&#xff0c;并在求解每个子…...

ubuntu1604安装及问题解决

虚拟机安装vmbox7 虚拟机操作&#xff1a; 安装增强功能 sudo mkdir /mnt/share sudo mount -t vboxsf sharefolder /mnt/share第一次使用sudo提示is not in the sudoers file. This incident will be reported 你的root需要设置好密码 sudo passwd root 输入如下指令&#x…...

Leetcode—24. 两两交换链表中的节点【中等】

2023每日刷题&#xff08;八十七&#xff09; Leetcode—24. 两两交换链表中的节点 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x),…...

USRP相关报错解决办法

文章目录 前言一、本地环境二、相关报错信息二、解决办法1、更换电脑操作系统2、升级最新版固件 前言 在进行 USRP 开发时遇到了一些报错&#xff0c;这里做个记录解决问题的方法。 一、本地环境 电脑操作系统&#xff1a;Windows11MATLAB 版本&#xff1a;MATLAB 2021aUSRP …...

【剑指offer】重建二叉树

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述1、题目2、示例 二、题目分析1、递归2、栈 一、题目描述 1、题目 剑指offer&#xff1a;重建二叉树 给定节…...

中仕教育:事业编招考全流程介绍

一、报名阶段 1. 了解查看招聘信息&#xff1a;查看各类事业编岗位的招聘信息&#xff0c;包括岗位职责、招聘条件、报名时间等。 2. 填写报名表&#xff1a;按照要求填写报名表&#xff0c;包括个人信息、教育背景、工作经历等内容。 3. 提交报名材料&#xff1a;将报名表及…...

149. 直线上最多的点数

149. 直线上最多的点数 class MaxPoints:"""149. 直线上最多的点数https://leetcode.cn/problems/max-points-on-a-line/description/?envTypestudy-plan-v2&envIdtop-interview-150"""def solution(self, points: List[List[int]]) ->…...

不合格机器人工程讲师再读《悉达多》-2024-

一次又一次失败的经历&#xff0c;让我对经典书籍的认同感越来越多&#xff0c;越来越觉得原来的自己是多么多么的无知和愚昧。 ----zhangrelay 唯物也好&#xff0c;唯心也罢&#xff0c;我们都要先热爱这个世界&#xff0c;然后才能在其中找到自己所热爱的事业。 ----zh…...

【STM32CubeMX串口通信详解】USART2 -- DMA发送 + DMA空闲中断 接收不定长数据

&#xff08; 本篇正在编写、更新状态中.....) 文章目录&#xff1a; 前言 前言 本篇&#xff0c;详细地用截图解释 CubeMX 对 USART2 的配置&#xff0c;HAL函数使用&#xff0c;和收发程序的编写。 收、发机制&#xff1a;DMA发送 DAM空闲中断接收。 DMA空…...

Webpack5入门到原理19:React 脚手架搭建

开发模式配置 // webpack.dev.js const path require("path"); const ESLintWebpackPlugin require("eslint-webpack-plugin"); const HtmlWebpackPlugin require("html-webpack-plugin"); const ReactRefreshWebpackPlugin require("…...

苹果眼镜(Vision Pro)的开发者指南(6)-实战应用场景开发 - 游戏、协作、空间音频、WebXR

第一部分:【构建游戏和媒体体验】 了解如何使用visionOS在游戏和媒体体验中创建真正身临其境的时刻。游戏和媒体可以利用全方位的沉浸感来讲述令人难以置信的故事,并以一种新的方式与人们联系。将向你展示可供你入门的visionOS游戏和叙事开发途径。了解如何使用RealityKit有…...

flutter底层架构初探

本文出处&#xff1a;​​​​​​​​​​​​​Flutter 中文开发者网站 架构 embedder嵌入层 提供程序入口&#xff08;其他原生应用也采用此方式&#xff09;&#xff0c;程序由此和底层操作系统协调&#xff08;surface渲染、辅助功能和输入服务&#xff0c;管理事件循环…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...