Grails 中URLMappings运用

通过grails-app/conf下的UrlMappings.groovy可以很容易的管理项目URL的配置文件。

class UrlMappings {

static mappings = {

}

}

基本URL配置

“/student”(controller:”student”, action:”list”)

首先前面的就是我们的URL的部分,当然是相对于项目的根URL的,那么当我们访问http://baseURL/student的时候就会转向student controller中的list action。当然,如果你已经配置了student controller的默认action为list的话,这里也可以简写为:

“/student”(controller:”student”)

默认情况下你的action是index,你可以通过在controller中设置你需要的默认action:

static defaultAction = “list”

上面的配置还有一种写法:

“/student” {

controller = “student”

action = “list”

}

映射到View

static mappings = {

“/”(view:”/index”) // 映射到根目录下的index.gsp

}

static mappings = {

“/aboutus”(controller:”site”,view:”aboutUs”) // 映射到controller下的某视图

}

映射到返回代码

static mappings = {

“403″(view: “/errors/forbidden”)

“404″(view: “/errors/notFound”)

针对不同的异常mapping到不同的controller或action

static mappings = {

“403″(view: “/errors/forbidden”)

“404″(view: “/errors/notFound”)

针对不同的异常mapping到不同的controller或action

“500″(controller: “errors”, action: “illegalArgument”,

exception: IllegalArgumentException)

“500″(controller: “errors”, action: “nullPointer”,

exception: NullPointerException)

“500″(controller: “errors”, action: “customException”,

exception: MyException)

“500″(view: “/errors/serverError”)

}

带参数URL

static mappings = {

“/student/$name”(controller:”student”)

}

注意到上面配置中特殊的地方就是$name,Grails会将URL中$name位置的内容当成参数放在params里面。假设StudentController有如下Action:

class StudentController {

def index = { render params.name }

}

如果访问/student/andrew的时候andrew会被显示在返回页面中,当然URL中可以包括很多的这种参数。我们也可以在URL使用可选变量

static mappings = {

“/$year/$month?/$day?”(controller:”student”, action:”list”)

}

映射不同的HTTP请求

‘/test/httpmethod’{

controller=’testUrlMappings’

action=[GET:'getAction', POST:'postAction']

}

通配符的使用

static mappings = {

“/site/*.html”(controller:”html1″)//1

“/site/$name.html”(controller:”html2″)//2

“/site/**.html”(controller:”html3″)//3

“/site/$name**.html”(controller:”html4″)//4

}

下面配置的1和2都会将类似/site/aboutus.html转发到指的controller中,不同的是我们可以在2的controller中通过params.name得到与通配符所匹配的值,这里是aboutus。3和4里面包含两个*号,也就是两级的通配,所以类似/site/aboutus.html和/site/exernal/aboutus.html的URL都会被转发到指定的controller中。

 

在Mapping中使用Constraints

“/$company/$insidername?” {

controller = {

(request.serverName.startsWith(‘insidertrading‘)) ? ‘trades’ : false

}

action=”company”

constraints {

company(validator: {

!['css', 'images','js','dashboard','newsletter'].contains(it)

})

}

}

命名的URLMappings

‘/test/${name}/httpmethod’{

controller=’testUrlMappings’

action=[GET:'getAction', POST:'postAction']

}

 

在这种情况下,如果我们使用

 

<g:link controller='testUrlMappings' action='getAction' params="[name:12]">

 

是不能正确的解析出我们配置的URL的。虽然我们可以通过类似:

 

<a href="${application.contextPath}/testUrlMappings/${name}/ httpmethod ">

 

的方式使用我们的URL,但是这种方式在维护起来不是很方便,所以这不是理想的方式。我们可以采用命名URLMappings来解决这个问题,例如,

 

name nameTest:”/test/${name}/httpmethod”{

controller=’testUrlMappings’

action=[GET:'getAction', POST:'postAction']

}

 

然后在使用的地方可以采用如下写法,这样我们就得到了URLMapping中所设置的URL了

 

<g:link mapping=”nameTest” params=”[name:15]“>

 

对于有一些不想做Mapping的URL,我们可以使用excludes来将其排除在外。如下代码所示:

 

static excludes = ['/sitemap.xml', '/robots.txt', '/plan.html', '/']

 

最后欢迎大家访问我的个人网站:1024s​​​​​​​

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值