Assets理解随笔

在PlayFramework中应用

在Play框架中提供的都是动态文件响应,前端工作内容大部分是静态文件.Assets大概起的就是这个作用.

默认路径看 conf/routes 里:

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)

#注释大意是静态文件从 /public  文件夹到 /assets 中URL路径.

规则声明HTTP GET请求 /assets/ 时映射到 Controllers.Assets.at 方法,该方法使用两个参数,告诉该方法 Path 路径和 file 文件.

缺省使用 /public/filename 路径,如果需要指定详细点,可以定义路由规则:

GET     /images/*file                 controllers.Assets.at(path="/public/images", file)
GET     /styles/*file                 controllers.Assets.at(path="/public/styles", file)

使用assets逆向路由来避免hardocded(硬编码[百度百科词条])的URL,Assets.at也是一个普通的Action方法,因此你可以使用assets逆向路由,例如:

<link href="@routes.Assets.at("images/favicon.png")" rel="shortcut icon" type="image/png">

除了逆向路由的优点,使用Asset控制器的另外一个优点是内置的缓存支持以及和Http Entity Tag(Etag)的支持.从而允许客户端根据需要是否要从服务器请求资源还是可以使用Cached中的文件.

Assets这个从rails中发展出来的,可以看看[Ruby-China]中的介绍.

时间: 2024-10-14 10:38:39

Assets理解随笔的相关文章

对软件工程的理解随笔

我认为要想学好一门课程就要对这门课程有自己的理解与认识.我认为软件工程中最重要的两个点 一个是技术,一个是设计理念.这两点是我们在开发软件的重中之重.提到技术我想到的是要想做一个软件工程师所需要掌握的技术,有软件工程,数据库,数据结构,编译原理等计算机科学方面的知识.而设计理念更偏重的是开发软件的目标,为什么要设计这个软件,软件可以解决那些生活中的问题,这些都是一个好的软件工程师应该考虑到的,生产具有正确性,可用性以及开销合宜的产品就是我们的目标与设计理念.学好软件工程所需要的知识与技能,平时多

面向对象理解随笔

结构和类是并列的,都是创建对象的模板 修饰符 Struct 结构名 1.结构是值类型,类是引用类型 2.结构不能包含显式的的无参数构造函数,结构成员会自动初始化默认值,不能再声明时赋值初始化 3.不能有基类(不能Base) 不支持继承 4.声明了结构类型后,可以使用New 运算符创建构造对象,也可以不使用new.如果不适用New,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用 面向对象的四个特性: 封装:不会破坏原有数据,相当于把数据提取出来在相应的类中进行处理执行 继承:   通过

golang技术随笔(二)理解goroutine

进程.线程和协程 要理解什么是goroutine,我们先来看看进程.线程以及协程它们之间的区别,这能帮助我们更好的理解goroutine. 进程:分配完整独立的地址空间,拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程的切换只发生在内核态,由操作系统调度. 线程:和其它本进程的线程共享地址空间,拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程的切换一般也由操作系统调度(标准线程是的). 协程:和线程类似,共享堆,不共享栈,协程的切换一般由程序员在代码中显式控制. 进程和线程的切换主要依赖于时

angularjs随笔01 数据双向绑定理解 自定义过滤器 时钟更新列子

1.   数据的双向绑定可以简单的理解为,无论在文本框中输入什么,都会在数据模型中显示出来输入的内容, 双向绑定的模型和数据是进行动态绑定的,实时检查进行修改. <input type="text" ng-model="name"> {{name}} 在上述代码中,通过angular.js将数据模型对象($scope)的name属性与文本模型绑定在一起,然后就实现了在输入框输入什么都会 在文本模型中显示对应的内容,实时更新. 控制器controller,

随笔:用心良苦 - 理解 jQuery 的构造函数

最近有人问 jQuery 的构造函数为什么写的那么奇怪,不好理解. 其实我刚开始看 jQuery 源码的时候也有这个疑问,下面是 jQuery 构造函数的关键代码: jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context ); }, jQuery.fn = jQuery.prototype = { constructor: jQuery, } init = jQuery.fn.in

结合第一个随笔以及CSDN的关于register.jsp读懂——再次理解register.jsp

register是登记的意思. 登记即是通过用户的填写,接着对信息进行验证,客户端的验证通过js代码完成[CSDN的关于register.jsp读懂(主要看第1.2.4.5点)].调用js里面的函数判断信息是否合法,如果没有问题再把表单数据交给下一个步骤的jsp(在这个例子中就是register-confirm.jsp):如果有问题就 <!--onsubmit="return isValidate(form1)"-->再验证一遍[第一个随笔]. 好,结合好了. 原文地址:h

进程、线程和协程的理解-自己随笔

1. IO 操作不占用CPU(从硬盘读数据,从网络读数据,从内存读取数据) 计算占用CPU,例如1+1=2的计算就是占用CPU的. python 多线程,不适合CPU密集操作系统的任务,适合IO操作密集型的任务. 2. 进程.线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下. 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的). 协程和线程一样共享堆,不共享栈,协程由程序

2016.09.13 随笔 ———— Windows 句柄 和 内存机制的一些理解

1. 参考资料: 深入了解Windows句柄是什么 http://blog.csdn.net/wenzhou1219/article/details/17659485#

我的第一篇博客随笔:关于angularjs API的理解心得。angular.bind() angular.boostrap()

angular.bind(obj,fun,args) obj:对象 fun:函数 arg:函数要传递的参数(可省略). 解释:将函数与对象动态绑定在一起 作用:实现调用数据模块化. demo:var Func = function(a){ this.a=a; } var obj=new Func(1); var fun=angular.bind(obj, function(i,j){alert(this.a+i+j)},4,2); fun();//7  var fun=angular.bind(