【翻译】在Grails中使用Spring MVC 控制器

本文探讨了Groovy相较于Java的性能差异,并介绍如何在Grails应用中集成Spring MVC控制器和JSP,实现与Grails控制器及GSP的并存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Groovy是慢于java,有时是戏剧性的慢。实际上,这已影响不大,对一个web应用来说,响应时间是较容易受数据库和网络等待时间的影响,相比较这种慢来说有点太过戏剧性,但是Groovy和Grails的优点已远远超过了这些忧虑。并且Grails依然快于Rails。
但话说回来,我不知道如何使用一个常用的Java [url=http://static.springframework.org/spring/docs/2.5.x/reference/mvc.html]Spring MVC控制器[/url]和JSP,而非一个Grails控制器和GSP(均采用Groovy) 。原来,这实在是太容易:
1、注册传统的Spring调度的Servlet在[color=blue]web.xml[/color]中(你需要有运行Grails安装模板([color=blue]install-templates[/color]))。在这个例子中,name属性( springmvc )不是重要的,使用任何你想要做的,我选择了映射*.action的URL ,以这种控制器,让grails处理:

<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>


2、产生web-app/web-inf/springmvc-servlet.xml :

<?xml version='1.0' encoding='UTF-8'?>

<beans xmlns='http://www.springframework.org/schema/beans'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:p='http://www.springframework.org/schema/p'
xmlns:lang='http://www.springframework.org/schema/lang'
xsi:schemaLocation='
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang-2.5.xsd'>

<bean id='mvcHandlerMapping'
class='org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping'
p:order='1'>
<property name='interceptors'>
<list>
<ref bean='openSessionInViewInterceptor' />
<ref bean='localeChangeInterceptor' />
</list>
</property>
</bean>

<bean id='mvcViewResolver'
class='org.springframework.web.servlet.view.UrlBasedViewResolver'
p:viewClass='org.springframework.web.servlet.view.InternalResourceView'
p:order='1'
p:prefix='/WEB-INF/jsp/'
p:suffix='.jsp'
/>

<bean name='baseSimpleController' abstract='true' p:cacheSeconds='0'/>

<bean name='jspController'
class='com.foo.spring.controller.JspController'
parent='baseSimpleController'
abstract='true'
/>

<!-- actions -->

<bean name='/test.action'
class='com.foo.spring.controller.TestController'
parent='baseSimpleController'
p:successView='test'
/>

<bean name='/other.action' parent='jspController' p:successView='other' />

</beans>


就是这样。一些注释:
1、处理程序映射使用的ID [color=blue]mvcHandlerMapping[/color]自Grails将创造一个使用标准名称[color=blue]handlerMapping[/color] ;
2、由于处理器映射在默认情况下是自动寻找到的,您需要设置该命令属性的东西低于Grails映射的(即使用默认值[color=blue]Integer.MAX_VALUE[/color]) ,使这个映射是第一次访问;
3、该[color=blue]HandlerInterceptors[/color]配置为Grails映射([color=blue]OpenSessionInView, LocaleChange[/color])将不会被自动提供给这个映射,但它是简单借用他们,因为他们正在登记为beans,你也可以添加其他定制拦截器在该份名单;
4、我已经创造了一个可选的抽象父控制器 bean ([color=blue]baseSimpleController[/color])为简单的控制器(单页,即不是表单或精灵([color=red]wizard[/color])控制器);
5、我还创造了一个简单的控制器,只显示JSP的-这是非常有用没有任何控制器的逻辑的页面:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class JspController extends AbstractController {

private String _successView;

@Override
protected ModelAndView handleRequestInternal(
final HttpServletRequest request,
final HttpServletResponse response) {

return new ModelAndView(_successView);
}

public void setSuccessView(final String view) {
_successView = view;
}
}


我已经制定了两个样品的URL - [color=blue]/test.action[/color],即用一个控制器和[color=blue]/other.action[/color],即用[color=blue]JspController[/color]只显示[color=blue]other.jsp[/color]。
注意,使用带有Grails的JSP是可能的; Grails期待一个GSP的指定名称,但如果找不到,他也会去找一个JSP的(在[color=blue]/ WEB-INF/grails-app/views /[/color]下 ) 使用如果存在的话。所以另一种选择是使用grails控制器和JSP 。
但我却没有用在开发中,我只是想,尽管如此,我还会全力以赴,在今后的开发中可是以防万一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值