• Spring Web MVC 的HandlerMapping的使用之-------SimpleUrlHandlerMapping


    转自: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;本文档由北大青鸟广安门收集自互联网,仅作分享之用。

  • 相关阅读:
    JStack分析cpu消耗过高问题
    Machine Learning in Action – PCA和SVD
    Machine Learning in Action -- FP-growth
    Machine Learning in Action -- 树回归
    Machine Learning in Action -- 回归
    Kafka 0.8 配置参数解析
    统计学习方法笔记 -- 隐马尔可夫模型
    Machine Learning in Action -- AdaBoost
    统计学习方法笔记 -- Boosting方法
    Andrew Ng机器学习公开课笔记–Reinforcement Learning and Control
  • 原文地址:https://www.cnblogs.com/sharpest/p/6185282.html
Copyright © 2020-2023  润新知