2008-03-18
spring 学习日记 - 基于annotation的spring mvc 1
关键字: spring annotation
Spring 2.5已经出来好久了,可是一直都没有关注过。最近才开始看spring2.5的reference,发现该版本提供了基于annotation的spring mvc开发功能。
一直都认为spring没有提供对Java5特性的特别支持是一个遗憾,2.5版本的这些改进,算是对这个遗憾的弥补吧。不过我估计短时间内2.5版本提供的这些特性是不可能用到我们的正式项目中去的了。毕竟2.0风格的开发已经是比较成熟的了。
好了,现在开始介绍基于annotation的spring mvc开发。
虽然说是基于annotation的开发,但是我们仍然需要对几个基本的东西在xml里面配置一下,不可能说完全拜托xml配置文件。首先,我们需要在spring的配置文件中指定几个基本的配置:
这些配置主要指定了三个东西。
1.一个是context命名空间,这个东西是2.5.1里面新加上来的。有意思的是,如果指定了这个熟悉,那么就必须吧xmlns="http://www.springframework.org/schema/beans对应指定为http://www.springframework.org/schema/beans/spring-beans-2.5.xsd,否者myeclipse的辅助工具会报错说找不到<context:property-placeholder>的定义。
2.然后是必须指定default-autowire="byName"。这个属性的意思是对Controller里面的属性依赖注入的时候,会自动按照名称来进行匹配。
3.是<context:component-scan base-package="fred.web.pda.web.controller"/>这个意思是spring需要对指定的报里面找到的annotation进行处理。
有了上面的配置,其他的东西我们都可以用annotation来配置了。
现在,我们开发写第一个Controller。我喜欢用MultiActionController。这里就以此为例。
他有一下几个特点:
1. 注意到这个Controller不需要继承任何基类,我们给它添加上@Controller标注,表示它是一个Controller。
2.要支持MultiActionController很简单,我们给每一个action方法添加上@RequestMapping("/authen/toLogin.do")即可。
3.返回视图的方式多样化。对这一点,我们在后面详谈。
4.访问HttpServletRequest参数的方式多样化。这一个在下一篇文章里面详谈。
对于上面的第三点,就是返回视图,我们有两个方式:
1. 继续在xml里面指定viewResolver,然后action方法不要返回String,而是像在老的Controller里面做的那样,返回一个ModelAndView对象。
2.完全不在xml文件里面配置,而是在action方法中返回一个String类型的参数。这个参数就是要去的视图。但是也发现了一个问题,就是旧的配置方式可以把表现层的东西放到WEB-INF目录底下,来杜绝直接通过浏览器地址栏的访问,可是现在好像不行了。暂时还没有发现替代的方法。比如,我的authen.jsp页面的存放路径是${ProjectName}/WEB-INF/view/jsp/authen/authen.jsp,那么在使用xml配置的方式中,我只要在action方法中返回new ModelAndView("authen/authen");就可以了,这个路径的前缀和后缀可以在viewResolver中配置就好。但是现在没有了xml中的viewResolver,我们只能通过类似于 return "${ProjectName}/view/jsp/authen/authen.jsp"来返回视图,这时候会发现无法访问放在/WEB-INF目录中的视图。
在下一篇文章中介绍如何获取来自HttpServletRequest的参数
在下一篇文章中
一直都认为spring没有提供对Java5特性的特别支持是一个遗憾,2.5版本的这些改进,算是对这个遗憾的弥补吧。不过我估计短时间内2.5版本提供的这些特性是不可能用到我们的正式项目中去的了。毕竟2.0风格的开发已经是比较成熟的了。
好了,现在开始介绍基于annotation的spring mvc开发。
虽然说是基于annotation的开发,但是我们仍然需要对几个基本的东西在xml里面配置一下,不可能说完全拜托xml配置文件。首先,我们需要在spring的配置文件中指定几个基本的配置:
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire="byName">
<context:property-placeholder location="WEB-INF/config/globalConfig.properties"/>
<context:component-scan base-package="fred.web.pda.web.controller"/>
</beans>
这些配置主要指定了三个东西。
1.一个是context命名空间,这个东西是2.5.1里面新加上来的。有意思的是,如果指定了这个熟悉,那么就必须吧xmlns="http://www.springframework.org/schema/beans对应指定为http://www.springframework.org/schema/beans/spring-beans-2.5.xsd,否者myeclipse的辅助工具会报错说找不到<context:property-placeholder>的定义。
2.然后是必须指定default-autowire="byName"。这个属性的意思是对Controller里面的属性依赖注入的时候,会自动按照名称来进行匹配。
3.是<context:component-scan base-package="fred.web.pda.web.controller"/>这个意思是spring需要对指定的报里面找到的annotation进行处理。
有了上面的配置,其他的东西我们都可以用annotation来配置了。
现在,我们开发写第一个Controller。我喜欢用MultiActionController。这里就以此为例。
@Controller
public class AuthenController {
/**
* 返回登录页面的视图名。
*/
@RequestMapping("/authen/toLogin.do")
public String toAuthen() {
return "authen/authen";
}
@RequestMapping("/authen/toLogin.do")
public String authen(Model model) {
return "authen/authen";
}
}
他有一下几个特点:
1. 注意到这个Controller不需要继承任何基类,我们给它添加上@Controller标注,表示它是一个Controller。
2.要支持MultiActionController很简单,我们给每一个action方法添加上@RequestMapping("/authen/toLogin.do")即可。
3.返回视图的方式多样化。对这一点,我们在后面详谈。
4.访问HttpServletRequest参数的方式多样化。这一个在下一篇文章里面详谈。
对于上面的第三点,就是返回视图,我们有两个方式:
1. 继续在xml里面指定viewResolver,然后action方法不要返回String,而是像在老的Controller里面做的那样,返回一个ModelAndView对象。
2.完全不在xml文件里面配置,而是在action方法中返回一个String类型的参数。这个参数就是要去的视图。但是也发现了一个问题,就是旧的配置方式可以把表现层的东西放到WEB-INF目录底下,来杜绝直接通过浏览器地址栏的访问,可是现在好像不行了。暂时还没有发现替代的方法。比如,我的authen.jsp页面的存放路径是${ProjectName}/WEB-INF/view/jsp/authen/authen.jsp,那么在使用xml配置的方式中,我只要在action方法中返回new ModelAndView("authen/authen");就可以了,这个路径的前缀和后缀可以在viewResolver中配置就好。但是现在没有了xml中的viewResolver,我们只能通过类似于 return "${ProjectName}/view/jsp/authen/authen.jsp"来返回视图,这时候会发现无法访问放在/WEB-INF目录中的视图。
在下一篇文章中介绍如何获取来自HttpServletRequest的参数
在下一篇文章中
- 10:44
- 浏览 (331)
- 评论 (1)
- 分类: Spring和持久层
- 相关推荐
评论
sgfgh
2008-03-21
ms可以这样
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
发表评论
- 浏览: 16636 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
链接
最新评论
-
apachet转发请求到tomcat ...
很老的问题了,一般实际开发都是这样做的,至少我们用的tomcat5.0.28是这 ...
-- by jhj823900 -
jBPM的Scheduler模块和Sp ...
提示个方法。。用JobExecutorServlet方法来代替你的Schedul ...
-- by gabriel80 -
spring 学习日记 - 基于 ...
ms可以这样 <bean class="org.springframewo ...
-- by sgfgh -
如何实现Spring管理下的不 ...
如果是使用CFX的前身XFire时,使用的FactoryBean是org.cod ...
-- by ununreal -
如何实现Spring管理下的不 ...
引用服务端中途断掉又连上呢?应该没有影响的吧,http无状态 我的经验是如果初始 ...
-- by Frederick






评论排行榜