转自:https://www.2cto.com/kf/201401/271141.html

Spring MVC教程 映射处理器Handler Mapping

一、简析映射处理器

在spring mvc中,使用映射处理器可以把web请求映射到正确的处理器上,spring内置了很多映射处理器,而且我们也可以自定义映射处理器。下面的实例展示spring中最常用的三个映射处理器:

BeanNameUrlHandlerMapping(默认)官方推荐使用默认映射器

SimpleUrlHandlerMapping

ControllerClassNameHandlerMapping

    快速案例演示:

<!-- bean名url处理器映射 -->

<bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">

<property name="order" value="1" />

</bean>

<!-- 简单url处理器映射 -->

<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="mappings">

<props>

<prop key="/u9vip.action">u9Controller</prop>

</props>

</property>

<property name="order" value="2" />

</bean>

<!-- 控制器类名处理器映射 -->

<bean id="controllerClassNameHandlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">

<property name="order" value="3" />

</bean>

在正式开始前有必要了解以下相关要点:

(1)映射处理器都能把请求传递到处理器执行链接(HandlerExecutionChain)上,并且处理器执行链接必须包含能处理该请求的处理器(实质就是处理器链上动态添加了了此处理器,可以结合filter工作原理理解),而且处理器链接也能包含一系列拦截器。

(2)上面列举的spring最常用的两种处理器都是继承自AbstractHandlerMapping类,因而它们具备父类的属性。

    二、实例:BeanNameUrlHandlerMapping

建立SpringMVC02项目,并导入相关jar包。

快速下载地址:链接:http://pan.baidu.com/s/1c0h6RGO 提取密码:2xqe

com.springsource.javax.servlet.jsp.jstl-1.1.2.jar

com.springsource.org.aopalliance-1.0.0.jar

com.springsource.org.apache.commons.logging-1.1.1.jar

com.springsource.org.apache.taglibs.standard-1.1.2.jar

org.springframework.aop-3.0.0.RELEASE.jar

org.springframework.asm-3.0.0.RELEASE.jar

org.springframework.beans-3.0.0.RELEASE.jar

org.springframework.context.support-3.0.0.RELEASE.jar

org.springframework.context-3.0.0.RELEASE.jar

org.springframework.core-3.0.0.RELEASE.jar

org.springframework.expression-3.0.0.RELEASE.jar

org.springframework.web.servlet-3.0.0.RELEASE.jar

org.springframework.web-3.0.0.RELEASE.jar

步骤一:建立后端控制器  包:com.u9vip.springmvc.controller      类名:U9Controller.java,代码如下:

package com.u9vip.springmvc.controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.AbstractController;

public class U9Controller extends AbstractController {

@Override

protected ModelAndView handleRequestInternal(HttpServletRequest arg0,

HttpServletResponse arg1) throws Exception {

// http://www.u9vip.com U9社区

return null;

}

}

步骤二:配置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">

<!-- 配置spring核心servlet -->

<servlet>

<servlet-name>action</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<!--

url-pattern配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问

*.action配置,会拦截所有以。action为后缀的请求

注意:此处我们的servlet-name 配置的为action,则当我们配置"应用上下文"时。名称应该为action-servlet.xml

-->

<servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.action</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

步骤三:配置action-servlet.xml,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<bean id="u9Controller" name="/u9.action" class="com.u9vip.springmvc.controller.U9Controller"></bean>

<!-- 视图解析器 -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<!-- 前缀名 -->

<property name="prefix" value="/WEB-INF/U9VIP/"></property>

<!-- 后缀名 -->

<property name="suffix"  value=".jsp"></property>

</bean>

</beans>

步骤四:在WEB-INF/U9VIP目录下建立U9FirstSpringMVC.jsp,主要代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head><title>My JSP 'U9FirstSpringMVC.jsp' starting page</title>

</head>

<body>

${message}

<br>

</body>

</html>

步骤五:启动服务器,输入http://127.0.0.1:8080/SpringMVC02/u9.action 访问测试

    简析执行过程

(1)启动服务器后,当我们向服务器发送u9.action请求时,首先被在web.xml中配置的前端控制器DispatcherServlet拦截到。

(2)前端控制器把此请求转交给后端控制器,下面分析转交过程:当在action-servlet.xml中查找能执行u9.action请求的映射处理器时,发现没有能处理此请求的映射处理器,这时便使用默认的映射处理器BeanNameUrlHandlerMapping:This is the default implementation used by the DispatcherServlet, along with DefaultAnnotationHandlerMapping (on Java 5 and higher)。 我们还需注意:这种后端控制器的bean Name必须以"/"开头,并且要结合DispatcherServlet的映射配置。同时beanName支持通配符配置。比如如果配置:*.action 时,当访问U9VIP.action时也可以成功访问到U9Controller类。

(3)BeanNameUrlHandlerMapping处理器,会查找在spring容器中是否在名为"u9.action"的bean实例。当查找到此实例后,则把此bean作为处理此请求的后端控制器。同时把自身加到映射处理器链上,并向处理器链传递此请求。

(4)后端控制器进行处理,并返回视图。

三、实例:SimpleUrlHandlerMapping

步骤一:建立后端控制器U9SimpleUrlHandlerMappingContrller.java.代码如下:

package com.u9vip.springmvc.controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.AbstractController;

public class U9SimpleUrlHandlerMappingContrller extends AbstractController {

@Override

protected ModelAndView handleRequestInternal(HttpServletRequest arg0,

HttpServletResponse arg1) throws Exception {

// http://www.u9vip.com U9社区

System.out.println("U9社区第二个SpringMVC 控制层案例  SimpleUrlHandlerMapping");

return new ModelAndView("U9FirstSpringMVC", "message",

"U9社区第二个SpringMVC 控制层案例 SimpleUrlHandlerMapping");

}

}

步骤二:在action-servlet.xml中增加如下配置:

<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="mappings">

<props>

<prop key="/u9demo2.action">u9SimpleUrlHandlerMappingContrller</prop>

</props>

</property>

</bean>

<bean id="u9SimpleUrlHandlerMappingContrller" class="com.u9vip.springmvc.controller.U9SimpleUrlHandlerMappingContrller">

</bean>

PS;本文档由北大青鸟广安门收集自互联网,仅作分享之用。

Spring Web MVC 的HandlerMapping的使用之-------SimpleUrlHandlerMapping的更多相关文章

  1. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块

    spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...

  2. 4.Spring Web MVC处理请求的流程

  3. Spring Web MVC(一)

    [toc] 概述 Spring的web框架围绕DispatcherServlet设计. DispatcherServlet的作用是将请求分发到不同的处理器. Spring的web框架包括可配置的处理器 ...

  4. Spring Web MVC(三)之注解

    [toc] spring web mvc 基于注解的优化 我写的注解是按照spring web的部件分类写的,这样的话比较方便查看,大家感觉有用的话可以分享个别人,希望对对更多的人有帮助.毕竟零基础开 ...

  5. 描述Spring Web MVC的工作流程

    Spring Web MVC的共工作流程如下: 1.浏览器发出Spring mvc请求,请求给前端控制器 DispatcherServlet处理. 2.控制器通过HandlerMapping维护的请求 ...

  6. 淘淘商城之spring web mvc架构

    一.什么是springmvc springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合: springmvc是一个基于mvc的web框架   二.mv ...

  7. 12.Spring——Web MVC框架

    1.Spring Web MVC 框架 2.Spring MVC Hello World 例子 1.Spring Web MVC 框架 Spring web         MVC 框架提供了模型-视 ...

  8. Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用

    Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...

  9. Spring Web MVC处理流程

    Spring Web MVC 处理流程: 1.浏览器向Spring发出请求,请求交给前端控制器 DispatcherServlet处理 2.控制器通过HandlerMapping找到相应的Contro ...

随机推荐

  1. C语言--循环结构

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVveW91MTMxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  2. YII框架学习(二)

    YII框架的增删改查 例:一个新闻表的增删改查: (1)首先使用gii工具生成控制器和模型 (2)控制器 <?php class NewsController extends Controlle ...

  3. java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;

    spring3_hibernate 集成报错信息 java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljav ...

  4. 【BZOJ1018】[SHOI2008]堵塞的交通traffic 线段树

    [BZOJ1018][SHOI2008]堵塞的交通traffic Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个 ...

  5. Linq的优缺点

    优点: 1.Linq提供了不同数据源的抽象层,所以可以使用相同的语法访问不同的数据源(只要该数据源有提供程序即可) 2.Linq为底层的数据存储提供了一个强类型化的界面,可以把底层的数据作为对象来访问 ...

  6. C# 自定义控件制作和使用实例(winform)(转)

    本例是制作一个简单的自定义控件,然后用一个简单的测试程序,对于初学者来说,本例子比较简单,只能起到抛石引玉的效果. 我也是在学习当中,今后会将自己所学的逐步写出来和大家交流共享.   第一步:新建一个 ...

  7. 九度OJ 1146:Flipping Pancake(翻饼子) (递归、游戏)

    时间限制:1 秒 内存限制:32 兆 特殊判题:是 提交:265 解决:116 题目描述: We start with a stack n of pancakes of distinct sizes. ...

  8. github Merge method

    About merge methods on GitHub - User Documentation https://help.github.com/articles/about-merge-meth ...

  9. Python爬虫-- Scrapy框架

    Scrapy框架 Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是事件驱动的,并且比较适合异步的代码.对于会阻塞线程的操作包含访问文件.数据库或者Web.产生新的进程并需要 ...

  10. 【linux】记录一次系统被攻击的处理过程

    今天登录zabbix监控网页的时候发现非常卡,登录到系统里面以后,通过top看,CPU已经100%了,有一个叫做httpds的进程占用,第一反映就是系统被入侵了,下面记录了处理过程,仅供各位参考 通过 ...