Spring MVC系列:(2)视图解析器、URL映射器、适配器

1、默认的URL映射器、适配器和视图解析器

SpringMVC提供了默认的URL映射器、适配器和视图解析器。

在上一文中,springmvc-helloworld.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
    <bean name="/helloworld.action" class="com.rk.web.action.HelloWorldAction"></bean>
 
 
</beans>

上面的配置与下面的配置是一样的:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

	<!-- 控制器(程序员) -->
    <bean name="/helloworld.action" class="com.rk.web.action.HelloWorldAction"></bean>

    <!-- 映射器(框架) -->  
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>  
      
      
    <!-- 适配器(框架) -->  
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>  
      
      
    <!-- 视图解析器(框架) -->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>  
      
</beans>

2、视图解析器InternalResourceViewResolver

作用:解析视图逻辑名对应的真实路径

ModelAndView对象中即可以封装真实视图路径名,也可以封装视图路径的逻辑名。

(1)修改Action类的代码

HelloWorldAction类的代码:

由原来的

modelAndView.setViewName("/jsp/success.jsp");

改成

modelAndView.setViewName("success");

完整的HelloWorldAction.java

package com.rk.web.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloWorldAction implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("message", "这是我的第一个SpringMVC应用");
		modelAndView.setViewName("success");
		return modelAndView;
	}

}

(2)在配置文件中进行修改

springmvc-helloworld.xml内容添加如下部分:

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

完整的springmvc-helloworld.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <bean name="/helloworld.action" class="com.rk.web.action.HelloWorldAction"></bean>

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

</beans>

3、映射器Mapping

【什么样的请求交给Action】

3.1、BeanNameUrlHandlerMapping

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(核心)

将程序员定义的Action所对应的<bean>标签的name属性作为请求路径

<!-- 注册控制器(程序员) -->
<bean name="/helloworld.action" class="com.rk.web.action.HelloWorldAction"></bean>

<!-- 注册映射器(handler包)(框架) -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

3.2、SimpleUrlHandlerMapping

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

/delete.action和/update.action和/find.action请求路径都交由<bean>标签为id的Action,即

多个路径对应同一个Action

	<!-- 注册控制器(程序员) -->
    <bean id="helloworldID" class="com.rk.web.action.HelloWorldAction"></bean>

	<!-- 注册映射器(handler包)(框架) -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/delete.action">helloworldID</prop>
				<prop key="/update.action">helloworldID</prop>
				<prop key="/find.action">helloworldID</prop>
			</props>
		</property>
	</bean>

4、适配器Adapter

Action实现Controller接口

package com.rk.web.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloWorldAction implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("message", "这是我的第一个SpringMVC应用");
		modelAndView.setViewName("success");
		return modelAndView;
	}

}

org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

<!-- 适配器(框架) -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
时间: 2024-08-02 06:57:35

Spring MVC系列:(2)视图解析器、URL映射器、适配器的相关文章

Spring MVC资源绑定视图解析器

ResourceBundleViewResolver使用属性文件中定义的视图bean来解析视图名称. 以下示例显示如何使用Spring Web MVC框架中的ResourceBundleViewResolver. ResourceBundleViewResolver-servlet.xml 配置如下所示 - <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <p

Spring MVC的多视图解析器配置及与Freemarker的集成

一.从freemarker谈起 Freemarker使用模板技术进行视图的渲染.自从看了Struts标签.Freemarker.JSTL的性能对比后,我毅然决定放弃Struts标签了!效率太差…… Spring本身支持了对Freemarker的集成.只需要配置一个针对Freemarker的视图解析器即可. 二.Spring MVC视图解析器 视图解析器的工作流程大致是这样的:Controller的某个方法执行完成以后,返回一个视图(比如:listUser),视图解析器要做的工作就是找到某个对象来

spring mvc 获取所有的controller和url映射关系

有时候需要根据url反查controller,如果能获取所有的url,则不用跟据url去代码里搜了,方便开发人员.调试人员或交接人. 关键对象:RequestMappingHandlerMapping Java代码   import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.

spring mvc velocity多视图

1.ViewResolverUrlBasedViewResolver 这个东西是根据url 进行路由的.网上搜了 1.order 排序,同名出现各种问题 2.XmlViewResolver,BeanNameViewResolver,ResourceBundleViewResolver 这个 根据配置文件去找不同的view 乱码...莫名,而且配置的起来比较麻烦,好处么,就是一个配置文件基本搞定所有页面位置 乱码据说WebApplicationContext 中可以设置某弄过 3.自己写个View

Spring MVC系列:(7)SpringMVC快速入门(注解版本)

1.引入jar包 spring-core commons-logging-1.2.jar spring-beans-3.2.5.RELEASE.jar spring-context-3.2.5.RELEASE.jar spring-core-3.2.5.RELEASE.jar spring-expression-3.2.5.RELEASE.jar spring-web spring-web-3.2.5.RELEASE.jar spring-webmvc spring-webmvc-3.2.5.R

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点的 json 报文 问题 问题描述起来比较拗口,其实就是用Spring MVC时,如何将对象映射成 json 报文时不把对象作为json的根节点.即使用@ResponseBody的效果. 比如,默认情况下,使用ModelAndView的addObject(key,object)或者ModelMap的addAttribute(key,object)保存完Java对象,然后交给Srping的视图解析器解析成json时,

Spring MVC系列:(6)添加用户的小案例

1.添加数据库表 使用sqlplus打开数据库 sqlplus scott/tiger 创建emps数据表 create table emps( id varchar(32) not null, username varchar(20) not null, salary number(6,2), hiredate date ); 2.添加jar包 项目需要的jar包有spring-core.spring-web.spring-webmvc.oracle数据库驱动.c3p0数据库连接池.dbuti

Spring MVC 结合Velocity视图出现中文乱码的解决方案

编码问题一直是个很令人头疼的事,这几天搭了一个Spring MVC+VTL的web框架,发现中文乱码了,这里记录一种解决乱码的方案. 开发环境为eclipse,首先,检查Window->preferences->workplace->Text File Encoding,设置为GBK .vm文件中加入编码约束,举例如下 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Typ

Spring Web MVC 多viewResolver视图解析器解决方案

viewResolver的定义如下: public interface ViewResolver { View resolveViewName(String viewName, Locale locale) throws Exception; } 在spring 中,常用的ViewResolver 有如下几种: InternalResourceViewResolver 将逻辑视图名字解析为一个路径 BeanNameViewResolver 将逻辑视图名字解析为bean的Name属性,从而根据na