`
bloodwolf_china
  • 浏览: 131398 次
社区版块
存档分类
最新评论
文章列表
  在使用grails中发现,controller本身没有提供转发请求的方法,之后查看源码后发现按照grails的DispatchServlet的格式即/grails/controllerName/actionName.dispatch这样的URI,是可以转发的。 但发现如果在gsp或jsp中调用request.getRequestDispatcher(uri).forward(request,response),页面就会在forward的那行代码抛出NullPointerException。最近一直在研究其源码,终于找到了解决方法,这其实是grails的一个小bug吧。 首先GrailsWeb ...
   使用grails开发已经有一段时间,中间遇到不少问题,由于grails本身提供的文档有点简单,某些功能实现还须参考其源码。在分析过程中逐渐了解其运行构架,稍做介绍。 grails框架是根据约定优于配置这条原则搭建,MVC部分是基于Spring MVC,持久层是基于hibernate。查看打包后的文件目录,找到WEB-INF/web.xml,可以发现核心的几个配置 <filter> <filter-name>urlMapping</filter-name> <filter-class>org.codehaus.groovy ...
groovy的闭包特性极大的方便了程序开发,不过在嵌套闭包要稍微小心一点 先认识一下Groovy闭包中有几个隐含变量 it:默认的参数名,如果没有传参数,it为null,如果自定义了参数名,那就不存在it的定义了 this : 跟Java一样,是定义闭包所在类的一个引用,不管有多少层闭包嵌套,this指向的都是最上层的类。 owner : 封闭闭包的对象(如果只有一层闭包就是this,如果有多层闭包嵌套就是含有此闭包的上层闭包) delegate :缺省值是owner,用于闭包的委托调用 以一个非常简单的程序举例,执行4次打印语句 4.times { def run = {print ...
    grails默认提供的是在conf/DataSource.groovy中配置数据源,不同环境配置在environments闭包中。但对于某些项目数据源的配置不是由程序开发人员负责的,有专门的部署人员。不可能让部署人员去修改DataSource.groovy,然后再编译发布,所以必须找到一个更灵活的配置方式。 [list] 方法一:在conf/spring目录下添加一个resources.xml,配置一个dataSource数据源,覆盖DataSource.groovy中的数据源 方法二:在conf目录下添加一个datasource.properties,定义driverClass,ur ...
我们写一个Filters跟踪分析一下Filters是如何变化加入到CompositeInterceptor的handlers成员     class TestFilters { def log ={ before = { println "Before Filter" } } def filters = { //这儿的方法名doFilter不重要,可以随便命名,为了调用闭包而已 doFilter([controller: '*', actio ...
    grails提供了两种对请求的拦截机制,一是在Controller中定义beforeInterceptor和afterInterceptor两个方法,分别在执行action之前和之后调用,具体实现代码是在SimpleGrailsController和SimpleGrailsControllerHelper中,不再赘述。     还有一个是Filter,即在grails-app/conf目录下定义以Filters结尾的groovy文件既可,提供了三个拦截方法before,after,afterView,分别对应Spring MVC的HandlerInterceptor接口的preHandl ...
java web开发关于请求的处理转发有两种方式,    一是redirect ,返回302状态和一个新Location给浏览器,让浏览器重新请求    二是requestDispatcher,可以用forward方法把请求转发给目标处理器。 grails 1.03现在的controller只提供了redirect方法,没有提供forward方法。 即使自己使用request.getRequestDispatcher("/controller/action").forward(request,response)方法或在Controller中返回ModelAndView(&q ...
robbin 写道我不喜欢Grails的一个比较重要的原因是:Grails不是一个完全自己造轮子的框架!事实上Grails的底层封装了Hibernate/Spring,因此本质上程序运行还是依赖Hibernate/Spring。这就会带来一个问题:当你深入开发、调试代码的时候,无法回避Hibernate/Spring。那么这种隔了一层的做法在某些需要深入定制的地方会给你带来很大的麻烦。 这是你不喜欢它的原因,却是我喜欢它的原因。ruby on rails没有用过,所以不好评价。但对于熟悉spring,hibernate和MVC开发的人来说,转到grails的学习难度不大。如果周围有同事指导一下, ...
--系统参数配置 1、grails提供了conf/Config.groovy,可以把系统参数写在里面如 user.charge.max.times=5 在Controller/Taglib中使用grailsApplication.config.user.charge.max.times方式访问 在Service或其他模块中使用ConfigurationHolder.config.user.charge.max.times方式访问 2、如是开始测试环境与实际运行环境不同,可以使用environments,如 user.charge.max.times=5 environments { ...
  最近使用grails开发了一个小模块,总共就五个表不到10功能,如果使用熟悉的spring+hibernate估计一两天就能完成,使用grails缺花了我一个星期。毕竟学习新东西还是要花一点时间,一边看文档一边写代码,又走了一点弯路。再加上不知道如何使用grails支持apache的AJP协议,自己写了一个支持AJP协议的Jetty服务。不过通过这段时间的使用感觉grails开发还是比较方便,不需要写那么多配置文件了。   Jetty服务代码(使用配置文件可能也可以,还没详细研究jetty本身的配置,所以自己写代码了) public static void main(String[] a ...
  在使用spring先后开发了两个模块,单独测试都正常。也先后上线运行,之后发现有个模块在启动Tomcat后总是初始化失败,必须到tomcat管理控制台手动启动。找了半天也没发现原因。后来管理员在每次重启Tomcat后这个模块没有运行导致一堆问题和麻烦,今天特意查看了其他的tomcat日志文件,终于发现了问题所在,原来是Log4jConfigListener。使用它是为了随时调整打印日志的级别而不用重启服务。没想到没有享受到它的便利,反而出了一堆问题,只能怪自己没有稍微仔细研究一下。 web.xml <context-param> <param-name>web ...
还有工作就是如何接受JMS Message并进行处理了,spring中也有现成的框架进行处理MessageListenerAdapter和DefaultMessageListenerContainer,我们只要写一个普通类编写处理消息的逻辑,具体如何接收消息都由Spring完成。 spring-listener-jms.xml <?xml version="1.0" encoding="GBK"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" ...
现在的系统业务是每人开发一个模块,然后用HTTP接口访问。由多个用个用户注册的入口,用户注册事件处理也分布到不同的代码里。看起来相当不舒服,所以决定使用JMS来处理事件触发后的逻辑,降低系统的耦合,也方便开发 ...
下面就进行程序开发,没得说,当然是spring了 使用spring开发JMS比较简单,直接使用的是JmsTemplate,需要几个相关对象。 ConnectionFactory:创建与ActiveMQ连接的工厂类 Destination:目标Topic或Queue MessageConverter:在Java POJO和JMS Message进行转换 关于JMS的其他接口如Session,MessageProducer/MessageConsumer都是在JmsTemplate内部处理,不需要开发关注具体细节。 首先配置分别针对Topic和Queue的JmsTemplate(其实发送和接 ...
大多数人在第一次使用HibernateTemplate时都很好奇,不需要自己关闭Hibernate Session。如果在需要使用事务的情况一般使用spring配置TransactionProxyFactoryBean用AOP方式实现,还有就是使用HibernateTemplate的execute(HibernateCallback action)方法,构造一个匿名类实现HibernateCallback接口的Object doInHibernate(Session session)方法。使用前一种方法需要使用spring IOC,后一种代码因为使用匿名类,如果有较多逻辑代码显得难看、不清晰。是 ...
Global site tag (gtag.js) - Google Analytics