spring 学习日记 - 基于annotation的spring mvc 1

Spring 2.5已经出来好久了,可是一直都没有关注过。最近才开始看spring2.5的reference,发现该版本提供了基于annotation的spring mvc开发功能。

一直都认为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的参数

在下一篇文章中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值