springMVC学习记录——后端控制器之映射处理器

springMVC的后端处理器包括三个部分:

  1. 映射处理器(HandlerMapping)
  2. 控制器(Controller)
  3. 视图解析器(ViewResolver)

博文记录一下映射处理的的相关配置问题:

映射处理器:处理url到控制层的映射关系

    tip:根据前端控制器(DispatcherServlet)传递过来的请求资源符URI去配置在映射处理器中的控制器,决定这一次的用户请求需要用哪个控制器去处理。

 

springMVC提供了多种匹配方式,同时也支持配置多个HandlerMapping通过指定order来设置优先级,order值越小,优先级越高,什么意思呢?

比如下面配置了两个映射处理器,映射处理1的order值设置为1,则它的优先级要高于 映射处理器2; 即要处理一个两个映射处理都可以处理的用户请求是,优先会使用映射处理器1

<!-- 映射处理1 -->
<bean ...>
    .
    .
    <property name="order" value="1">
</bean>


<!-- 映射处理2 -->
<bean ...>
    .
    .
    <property name="order" value="4">
</bean>

 

下面的配置中,控制器都用框架的控制器 ParameterizableViewController 做测试,如果你是自定义的控制器也是一样的配置

1、SimpleUrlHandlerMapping (类全路径eclipse中可以按 ctrl + shift + t 查找)

在类的mappings属性中匹配请求 url

<!-- 配置 映射处理器 SimpleUrlHandlerMapping -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	<property name="mappings">
		<props>
			<prop key="/hello.action">helloSpringMVC</prop>
		</props>
	</property>
        <!-- order值越小,映射处理器优先级越高 -->
	<property name="order" value="1"></property>
</bean>

 

2、BeanNameUrlHandlerMapping

    按照bean 的name属性来匹配到控制器,在下面的配置中,控制器bean组件的name属性配置为和请求的url一致,这样,通过BeanNameUrlHandlerMapping映射处理器处理的用户请求就会找到这个控制器

<!-- 映射处理器 BeanNameUrlHandMapping -->    
<bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    <!-- order值越小,映射处理器优先级越高 -->
    <property name="order" value="2"></property>
</bean>

<!-- 配置 后端控制器(这里配置的是框架自带的控制器ParameterizableViewController) -->
<bean id="helloSpringMVC" name="/hello.action" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
	<property name="viewName" value="login/login"></property>
</bean>

3、ControllerClassNameHandlerMapping,按控制器层的类名访问

    匹配规则:例如有一个用户请求是 /helloController.action , 则会找一个类名是HelloController 的控制层类来处理这个请求

<!-- 映射处理器 ControllerClassNameHandlerMapping -->    
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
	<!-- order值越小,优先级越高 -->
	<property name="order" value="3"></property>
</bean>

<!-- 自定义的控制器 -->
<bean id="helloSpringMVC" class="com.chaol.controller.HelloController"></bean>

 

使用注解配置映射处理器及控制器

因为要开启注解自动扫描,和使用注解映射处理器 、控制器,springmvc-servlet.xml的头部信息加上:xmlns:mvc 、 xmlns:context

<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" 
	xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

springmvc-servlet.xml中的配置:

<!-- 开启注解自动扫描 -->
<context:component-scan base-package="com.chaol.controller"></context:component-scan>
<!-- 配置注解 映射处理器 、 控制器 -->
<mvc:annotation-driven></mvc:annotation-driven>

<!-- 配置 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/"></property>
	<property name="suffix" value=".jsp"></property>
</bean>

自定义控制层程序:

    像下面的注解配置,如果类上是value="/hello",方法上是value="/hello.action",则前台的访问路径是 /hello/hello.action

package com.chaol.controller;

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.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

@Controller
@RequestMapping(value="/")  //指定类的访问路径
public class HelloController extends AbstractController {

	@RequestMapping(value="/hello.action")  //指定方法的访问路径
	// 像这样配置,用户的请求如果是/hello.action,则映射到了这个controller ,当然,这里的 ‘/’是指项目的根目录
	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		ModelAndView mav = new ModelAndView("login/login");
		return mav;
	}
}

 

映射处理器的入门学习就到此,下面贴一下项目结构:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值