Spring MVC Controller配置总结

总体来说,有四种Controller配置方式,其中最常用的便是注解


1 . 通过URL对应Bean(仅限用于小型的应用系统)
一个URL对应一个Bean,当访问/hello.do的时候便会寻找id为/hello.do的Bean

 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<bean name="/hello.do" class="hello.Hello"></bean>

2 . 为URL分配Bean
使用一个统一配置集合,对各个URL对应的Controller做关系映射,此类配置还可以使用通配符

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
        <!--key对应url名字,value对面处理bean的id  -->
        <prop key="/hello.do">helloController</prop>
        </props>
    </property>
    </bean>
    <!-- 配置请求和处理器 -->
    <bean id="helloController" class="hello.Hello"></bean>

3 . URL匹配Bean(很少用,了解)
要求命名规范

 </bean>
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping ">
    </bean>
    <!--/hello*.do的将被匹配 ,其实匹配的是ControllerClassName ,跟id没关系,/helloHSsf都将被匹配处理-->
    <bean id="Hello" class="hello.HelloController"></bean>

4 . 注解(最常用,最省事)
需要添加扫描包,Controller代码中要写相应的注解

<context:component-scan base-package="cn.sxt.annotation"/>
@Controller
public class HelloController {
    @RequestMapping("/hello")
    public ModelAndView hello(HttpServletRequest req,HttpServletResponse resp){
        ModelAndView mv=new ModelAndView();
        mv.addObject("msg", "hello Spring mvc annotation");
        mv.setViewName("hello");
        return mv;
    }
}

@RequestMapping其实使用了
@RequestMappingHandlerMapping和@RequestMappingHandlerAdapter两个处理类(分别实现了HandlerMapping和HandlerAdapter接口)


调试记载:

  1. 查看一个接口的所有实现类,比如Spring mvc的HandlerMapping接口,在类中打开(xml测试无法打开),选择名称右键open type Hierarchy,出来一个类关系树形图
  2. web.xml规定了.*do才会被过滤,在Hello案例中其实可以不配置HandlerMapping和HandlerAdapter,也可以正常运行,因为什么都不配置会默认调用原来定义的BeanNameUrlHandlerMapping和SimpleControllerHandlerAdapter,一般上述方式都会明配HandlerMapping,而HandlerAdapter则不然。
  3. 如果没有明配置HandlerAdapter,那么url名称必须加上.do,否则报无法找到mapping的错误,这估计也是配置HandlerAdapter的一个作用吧(针对第一种和第二张配置方式,第三种就没明写URL,第四种注解其实@RequestMapping就相当于定义了HandlerMapping和HandlerAdapter),所以这里强烈建议url地址写完全,把后缀加上,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值