`
bastengao
  • 浏览: 150713 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

spring mvc 基于注解 配置默认 handlermapping

阅读更多
spring mvc 是类似于 Struts 的框架。他们都有一个最主要的功能就是URL路由。URL路由能将请求与响应请求处理逻辑的类(在Struts中即是action,在spring mvc 中即是 controller )映射起来。抛开其他的功能,spring mvc 要比 Struts 在URL路由功能上灵活很多。比如要实现 RESTful,如果用 Struts ,需要安装 一些插件,而且插件也常常限制的很死。但是如果用 spring mvc ,那就驾轻就熟。

下面具体看一下spring mvc
在 spring 2.5 以后,可以利用注解写进行路由映射,简单,直观。
配置 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>


spring 的配置文件 spring-servlet-context.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:mvc="http://www.springframework.org/schema/mvc"       
       xsi:schemaLocation="
	        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
	        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<context:component-scan base-package="com.myPackage"/>    

<mvc:annotation-driven/>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/WEB-INF/pages/" />               
       <property name="suffix" value=".jsp" />              
</bean>

</beans>


package com.myPackage.controller;

@Controller
public class FooController{

/**
* 响应 /foo 请求,并返回 bar.jsp 做为渲染页面 (不一定非是jsp,只不过以上配置的是jsp)
*/
@RequestMappting("/foo")
public String foo(){
    //process logic
    return "bar"; 
}


以上即 spring mvc 一个简单的配置。mvc:annotation-driven 即告诉 spring mvc 使用注解的方式进行URL路由配置。controller 类上加上 @Controller 告诉 spring mvc 此类是 controller,同时方法上的 @RequestMapping 注解告诉 spring mvc 这里有一个请求映射到这个方法。

前面都是最基本的配置,但有一个缺点就是还不能响应静态页面的请求。 比如 webroot 下有 一个 bar.html 页面,但 webroot/bar.html 是请求不到 bar.html 的。因为目前为止,还没有对 bar.html 的路由映射。

要能请求静态页面,或者资源(如css,js,图片等),需要做如下配置
<mvc:resources mapping="/**" location="/" />


但是上面的配置还是有问题的,如果有一个 foo.html 的页面,请求是 webroot/foo.html,但是会发现会被路由到 /foo.* ,然后程序交给了 foo() 方法,没能得到 foo.html 页面。原因是使用 mvc:annotation-driven 做配置,spring mvc 会默认使用 DefaultAnnoationHandlerMapping 和 AnnotationMethodHandlerAdapter ,而 DefaultAnnotationHandlerMapping 会默认对 @RequestMapping 上的路由做三个映射,如 @RequestMapping("/foo") 会被做 /foo 、/foo.* 和 /foo/ 这样三个映射。mvc:resources 默认使用 SimpleUrlHandlerMapping, 做映射,但由于 SimpleUrlHandlerMapping 的优先级(order)没有 DefaultAnnotationHandlerMapping 高。 所以本来应该是 foo.html 静态资源响应,被映射为了 /foo.* 。@RequestMapping 的三次映射可以通过 DefaultAnnotationHandlerMapping#setUseDefaultSuffixPattern(false) 取消。XxxxHandlerMapping 可以通过 order 属性改变。

所以总结以上设置,可以这样正确的配置 spring-servlet-context.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:mvc="http://www.springframework.org/schema/mvc"       
       xsi:schemaLocation="
	        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
	        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<context:component-scan base-package="com.myPackage"/>    

<mvc:resources mapping="/**" location="/" order="1"/>

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="order" value="0"/>
        <property name="useDefaultSuffixPattern" value="false"/>
    </bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/WEB-INF/pages/" />               
       <property name="suffix" value=".jsp" />              
</bean>
</beans>


或者这样配置
<?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:mvc="http://www.springframework.org/schema/mvc"       
       xsi:schemaLocation="
	        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
	        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<context:component-scan base-package="com.myPackage"/>    

<mvc:resources mapping="/**/*.html" location="/" order="0"/>
<mvc:resources mapping="/**" location="/" order="2"/>

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="order" value="1"/>
        <property name="useDefaultSuffixPattern" value="true"/>
    </bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/WEB-INF/pages/" />               
       <property name="suffix" value=".jsp" />              
</bean>
</beans>
分享到:
评论
1 楼 wqsmd1 2012-06-26  
根本就是错误的    我试过了   没有用   太不厚道了

相关推荐

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    本文将深入探讨Spring MVC注解的功能及其在Spring 2.5中的应用。 首先,Spring 2.5中的注解驱动的Spring MVC允许开发者摆脱对XML配置的依赖,从而减少了配置文件的复杂性。例如,传统的Spring MVC配置通常需要在`...

    Spring MVC非注解测试

    非注解测试在Spring MVC中是指不依赖于Java注解如`@Test`,`@Controller`等进行的测试,而是通过XML配置文件来定义组件和它们之间的关系。这种方式虽然比注解方式繁琐,但有助于理解Spring MVC的工作原理。 首先,...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    1. Spring MVC的基本概念和配置,包括DispatcherServlet、HandlerMapping和ViewResolver。 2. 如何创建Spring MVC的Controller,以及使用注解进行请求映射和参数绑定。 3. Spring的依赖注入和AOP的使用,包括@...

    Spring MVC核心组件之HandlerMapping详解

    ### Spring MVC核心组件之HandlerMapping详解 #### 一、引言 在Java Web开发领域,Spring MVC框架因其灵活且强大的特性而备受青睐。它提供了一种简洁的方式来构建可维护、可扩展的应用程序。Spring MVC的核心组件之...

    Spring MVC 配置请求的默认处理器.rar

    在Spring MVC框架中,配置请求的默认处理器是构建Web应用程序的关键步骤。这个过程涉及到设置DispatcherServlet,它作为Spring MVC的核心组件,负责调度HTTP请求到相应的控制器。以下将详细阐述Spring MVC配置请求的...

    Spring3MVC注解(附实例).doc

    Spring3MVC 注解的实现机制是基于 HandlerMapping 和 HandlerAdapter 两个核心组件。HandlerMapping 负责将请求映射到对应的控制器方法,HandlerAdapter 负责执行控制器方法并返回结果。在 Spring3MVC 框架中,...

    基于jpa+hibernate+spring+spring mvc注解方式项目

    **基于JPA+Hibernate+Spring+Spring MVC注解方式项目详解** 在现代Java Web开发中,Spring框架扮演了核心角色,而Spring MVC作为其MVC(Model-View-Controller)实现,提供了强大的Web应用程序构建能力。同时,JPA...

    spring 与 spring mvc 整合 配置讨论

    Spring MVC是基于Spring框架构建的MVC(Model-View-Controller)模式实现,它将应用程序逻辑、数据和用户界面分离,使得开发更为简洁。在整合Spring和Spring MVC的过程中,我们需要配置以下关键组件: 1. **...

    Spring MVC jar包

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为开发者提供了模型-视图-控制器(MVC)架构,使开发人员能够更好地组织和分离应用程序的业务逻辑、数据处理和用户界面。Spring MVC是Spring框架的一个核心组件,...

    spring MVC配置详解

    Spring MVC 配置详解 Spring MVC 是一个基于 DispatcherServlet 的 MVC 框架,它是当前主流的 Web 框架之一。要想灵活运用 Spring MVC 来应对大多数的 Web 开发,就必须要掌握它的配置及原理。 一、Spring MVC ...

    spring mvc案例+配置+原理详解+架包

    这个压缩包包含了关于Spring MVC的案例、配置和原理的详细资料,对于初学者来说,是深入理解该框架的良好资源。 一、Spring MVC 基本概念 1. **模型-视图-控制器(MVC)**:MVC是一种设计模式,将业务逻辑、数据...

    Spring mvc 3 注解精华.docx

    本文将详细讲解Spring MVC 3中的注解精华,以及如何配置DispatcherServlet来支持注解。 首先,Spring的官方例子Spring-PetClinic是一个很好的学习资源,它演示了如何在处理简单表单数据时使用注解。这个示例可以在...

    Spring mvc 注解理解

    在Spring 2.5版本中,引入了完全基于注解的配置,使得开发者能够更便捷地创建和管理Controller。 首先,我们来看一下Spring MVC的核心组件: 1. **DispatcherServlet**:前端控制器,它是所有HTTP请求的入口点。...

    Spring MVC 教程快速入门 深入分析

    Spring MVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,使用了IoC容器,支持RESTful风格的应用程序开发。Spring MVC通过分离模型(Model)、视图(View)和控制器(Controller)来简化Web开发...

    Spring MVC使用Demo

    这个"Spring MVC使用Demo"提供了实践操作,帮助开发者深入理解Spring MVC的开发环境配置、注解的使用以及工作原理。 首先,Spring MVC的设计模式基于Model-View-Controller(MVC),它将应用程序的业务逻辑、数据和...

    spring mvc+hibernate+spring完整配置步骤

    - Spring MVC使用注解进行配置,减少了XML配置的繁琐,使得配置更加简洁易懂。 - Spring MVC支持RESTful风格的URL,适合构建现代Web应用。 - 它可以方便地集成Spring的其他模块,如Spring Security进行权限管理,...

    Spring MVC 基础实例源码01

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。这个"Spring MVC 基础实例源码01"的资源很可能是为了帮助初学者理解Spring MVC的核心概念和...

    spring MVC .docx

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。Spring MVC的设计目标是提供一个清晰的组件化架构,使得开发者可以独立地开发和测试控制器、...

    spring-MVC.zip_Java spring mvc_spring mvc_spring mvc

    6. **注解驱动开发**:Spring MVC支持使用注解来简化配置,如@RequestMapping用于映射请求,@RequestParam用于获取请求参数,@PathVariable用于处理URL路径变量。 7. ** ModelAndView**:这个类是用来存储模型数据...

    spring mvc mybatis 整合源码,带数据库脚本,带详细注释

    - Spring MVC是基于Model-View-Controller(MVC)设计模式的Web应用框架,提供了一种组织和处理请求的机制。 - 它的核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、ModelAndView和ViewResolver...

Global site tag (gtag.js) - Google Analytics