(csdn内转载)使用ControllerClassNameHandlerMapping实现SpringMVC的CoC配置

本文主要是介绍(csdn内转载)使用ControllerClassNameHandlerMapping实现SpringMVC的CoC配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用CoC,惯例优先原则(convention over configuration)的方式来配置SpringMVC可以帮我们声明Controller的时候省下很多功夫。

只要我们的Controller是以XXXController的方式命名的话就可以使用到CoC带来的好处。

例如,对于普通的Controller(非MultiActionController),CoC帮我们做以下的映射:

HomeController映射到/home*请求URL

DisplayShoppingCartController映射到/displayshoppingcart*请求URL

注意:应该映射成使用全部小写的请求URL

对与MultiActionController,映射规则如下:

例如,我有一个UserInfoController,里面有一个方法valid,那么就会映射成/userinfo/valid.do(.do对应你设置的dispatcher-servlet的url-pattern)。

使用CoC带来的好处就是我们不需要再忍受必须先定义它们,然后还要维护冗长的SimpleUrlHandlerMapping的枯燥。

规则就这么多,以下是配置。

1.dispatcher-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:tx="http://www.springframework.org/schema/tx"
       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      
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

    <!-- ControllerClassNameHandlerMapping用于匹配我们的Controller -->   
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
   
    <!-- 使用annocation创建Controller的bean -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>    
    <!-- Controller的包,使容器启动的时候可以找的并实例化Controller -->
    <context:component-scan base-package="test.controller"/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>   
</beans>

2.编写我们的Controller:

package test.controller;

import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

@Controller
public class MYController extends MultiActionController {
   
    @RequestMapping
    public void test(HttpServletRequest request,
            HttpServletResponse response){
        PrintWriter out = null;
        try {
            out = response.getWriter();           
            out.println("ok");
        }catch(Exception e) {
            out.println("not ok");  
        }finally {
            out.close();
        }   
    }    
   
}

这里我们可以看到,我们只需要在class前面声明@Controller,方法前面声明@RequestMapping就可以了,其他什么都不需要自己配置,最后使用地址/my/test.do就可以调用了。

另外,如果你想对这些使用ControllerClassNameHandlerMapping匹配的Controller使用拦截器的话,只需要为ControllerClassNameHandlerMapping bean的interceptors list注入拦截器就可以了:

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="myInter" />
            </list>
        </property>       
    </bean>   
    <bean id="myInter" class="test.MyInter" />

如果我配置拦截器 但是不想让他拦截所有的请求 应该怎么配置?

那你就用不到ControllerClassNameHandlerMapping了,换SimpleUrlHandlerMapping,手动配置。
配置例子如下:
    <bean id="urlMapping1" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">      
        <property name="interceptors">
            <list>
                <ref bean="inter1" />
            </list>
        </property>
        <property name="mappings">
            <props>
   <prop key="/MyController1.do">myController1</prop>
            </props>
        </property>
    </bean>

    <bean id="myController2" class="controller.MyController2"></bean>

    <bean id="urlMapping2" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">      
        <property name="interceptors">
            <list>
                <ref bean="inter2" />
            </list>
        </property>
        <property name="mappings">
            <props>
   <prop key="/MyController2.do">myController2</prop>
            </props>
        </property>
    </bean>

    <bean id="inter1" class="interceptor.Inter1" />
    <bean id="inter2" class="interceptor.Inter2" />

    <bean id="myController1" class="controller.MyController1"></bean>
    <bean id="myController2" class="controller.MyController2"></bean>

Inter1只拦截/MyController1.do,Inter2只拦截/MyController2.do


该博文转载自http://blog.csdn.net/yczz/article/details/5935887

这篇关于(csdn内转载)使用ControllerClassNameHandlerMapping实现SpringMVC的CoC配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/597963

相关文章

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2