`
Josh_Persistence
  • 浏览: 1653602 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Spring3.X @MVC - (六)按照返回的名称解析视图 - Spring MVC中强大的视图解析器

阅读更多

前言:

一、总共有10节,也就是10篇博客来讲述Spring的MVC,几乎涵盖了所有Spring MVC中的内容。

 

二、我创建的例子是一个球场预订系统,例子我已经测试调试通过,是一个Maven的project,包含一个Parent project:wsheng-spring-base和一个子Module:wsheng-spring-mvc.

 

三、在Eclipse中直接import maven的project即可,会同时引入上诉两个project的。

 

四、如果你没有耐心,可以不必往下学习,因为网上有很多例子,但是都是讲的Spring MVC很少的面,而且你可以快速的上手,但如果你想真正了解Spring MVC中的很多细节,就可以慢慢的去看博客(从第一节到第十节),如果有什么问题,欢迎信息告诉我。

 

五、学习的方法是你可以先将源码导入到eclipse中,然后根据博客上的内容,对照源码,慢慢消化,这是个漫长的过程,但是会帮助你了解很多Spring MVC的细节。

===================================================================================

 

 
在Spring3.X @MVC - (五)用外部化文件来显示区域的信息的基础上,
http://josh-persistence.iteye.com/admin/blogs/1881831
本节将学习看如何在Sping的MVC控制器处理完用户的请求后,将处理结果返回给视图,显示在相应的html,jsp页面上,或者是导出excel或者PDF等。
 1. 需求与问题:

    在处理程序处理完请求后,返回一个逻辑视图的名称,DispatcherServlet必须控制将最终的结果委派给一个视图模板显示信息,如果只是简单的指定一个视图,让Spring的DispatcherServlet将结果返回到视图上,那也太看不起Spring强大的视图解析功能了,实际上,深层次的细想,程序员可以希望让DispatcherServlet给我们定一个策略,根据我们返回的视图的逻辑名称来解析不同的视图。这就是问题,怎样定一个策略?

 

2.  解决方案:

    Spring MVC自带了多个ViewResolver(视图解析器),使程序员能够用不同的测来解析视图。当然用户也可以通过实现ViewResolver来自定义视图解析器。

 

3. 工作原理

     1)根据返回的模板的名称和位置来解析视图:(InternalResourceViewResolver

          解析视图的基本策略就是将它们直接映射到模板名车位置。Spring中最基本的的视图解析器是InternalResourceViewResolver,该Resolver将利用前缀和后缀的声明来那个将视图模板的名称映射到一个应用程序的目录。为了注册该Resolver,你可以在Web上下文中声明一个这种类型的Bean。

 

<bean id="internalResourceResolver"

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

        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

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

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

<!--         <property name="order" value="#{secondaryResourceBundleResolver.order+1}" /> -->

</bean>

 

例如:InternalResourceViewResolver按照如下方式解析视图名称welcome和reservationQuery:

welcome  ->  '/WEB-INF/jsp/welcome.jsp'

reservationQuery  -> '/WEB-INF/jsp/reservationQuery.jsp'

        解析后的视图类型可以由viewClass属性来决定。默认情况下,如果classpath中存在JSTL程序库(即jstl.jar),InternalResourceViewResolver将视图名称解析为JSTL类型的视图对象。所以如果你的视图是带有JSTL标记的JSP模板,就可以上面的省略viewClass属性。

        InternalResourceViewResolver很简单,但是它只能解析可由Servlet API的RequestDispacher转发的内容不视图(例如内部的JSP文件或者一个Servlet)。换句话说,InternalResourceViewReslover只支持Servlet和JSP,如果想支持其他视图类型,必须使用其他的视图解析策略。

 

       2)从XML配置文件解析视图: (XMLViewResolver)

解析视图的另一种方式也是Spring最初的方式,就是在Web上下文中将视图定义为Spring的Bean。但是还有更好的方法是将这些视图定义在单独的配置文件中。默认情况下,XMLViewResolver从WEB-INF/views.xml中加载视图Bean,但是这个位置可以通过location属性覆盖.

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

              <property name="location">

                   <value>/WEB-INF/court-views.xml</value>

              </property>

</bean>

      在court-views.xml配置文件中,你可以设置类名和属性,将每个视图声明为常规的Sping Bean.这样,你就可以声明任何类型的视图(例如可以声明常见的RedirectView,甚至是自定义的视图类型).

<beans xmlns="..."

             xmlns:xsi="..."

             xsi:schemaLocation="...">

 

            <bean id="welcome"

                       class="org.springframework.web.servlet.view.JstlView">

                       <property name="url" value="/WEB-INF/jsp/welcome.jsp"/>

 

           <bean id="welcome"

                       class="org.springframework.web.servlet.view.JstlView">

                       <property name="url" value="/WEB-INF/jsp/welcome.jsp"/>

 

          <bean id="reservationQuery"

                       class="org.springframework.web.servlet.view.JSTLView">

                       <property name="url" value="/WEB-INF/jsp/reserverationQuery.jsp"/>

           

          <bean id="welcomeRedirect"

                       class="org.springframework.web.servlet.view.RedirectView">

                       <property name="url" value="welcome"/>

 

</beans>

 

          3)从一个资源集配置文件解析视图:(ResourceBundleViewResolver)

除了XML配置文件之外,你也可以在一个资源集文件中声明视图Bean。ResourceBundleViewResolver从classpath根目录中的一个资源集加载视图Bean。注意ResourceBundleViewResolver还能够利用资源集功能从不同的资源集加载用于不同区域的视图Bean。

 <bean id="resourceBundleResolver"

        class="org.springframework.web.servlet.view.ResourceBundleViewResolver">

        <property name="basename" value="views" />

        <!-- <property name="order" value="#{contentNegotiatingResolver.order+1}" /> -->

    </bean>

这个地方指定了ResourceBundleViewResolver的基本名称是views,所以默认的资源集就是views.properties.于是我们就可以在名为views.properties的资源集中用属性的格式声明视图Bean.这个声明等价于XML的声明。

welcomeRedirect.(class)=org.springframework.web.servlet.view.RedirectView

welcomeRedirect.url=welcome.htm

 

reservationSuccessRedirect.(class)=org.springframework.web.servlet.view.RedirectView

 

reservationSuccessRedirect.url=reservationSuccess.htm

 

       4)多个解析器解析视图:(指定order属性来决定多个解析器中解析的顺序,即优先级)

如果在Web应用中有许多视图,仅仅选择一种视图解析策略往往不够。一般来说,InternalResourceViewResolver能够解析大部分的内部JSP视图,但是通常有其他类型的视图,需要由ResourceBundleViewReslover进行解析。在这种情况下,我们就需要合并这两种视图解析器。

<bean id="resourceBundleResolver"

        class="org.springframework.web.servlet.view.ResourceBundleViewResolver">

        <property name="basename" value="views" />

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

 

    </bean>

 

<bean id="internalResourceResolver"

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

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

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

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

 

</bean>

 

order的值越低,表示其代表越高的的优先级。注意应该将最低的优先级分配给InternalResourceViewReslover,因为该解析器是不管视图是否存在都进行解析。这样,如果其他解析器的优先级更低,就没有机会解析视图了。

所以到目前为止资源集views.properties应该仅包含InternalResourceViewResolver所不能解析的视图,例如重定位视图(RedirectView).

 

       5) Redirect前缀

如果你在Web应用上下文中配置了InternalResourceViewReolver,他能够在视图名称中使用redirect前缀解析重定位视图。然后,视图的余下的部分就会被当着重定位的URL。例如视图名称redirect:welome就会触发到相对URL welcome的一个重定位。当然你也可以在视图名称中指定一个绝对的URL。

0
3
分享到:
评论

相关推荐

    Spring3.X @MVC - (一)重要的配置文件

    10. **`&lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;`**: 视图解析器是Spring MVC中的重要组件,它负责将逻辑视图名转换为实际的视图资源,比如JSP页面。 11. **源码分析**...

    spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE

    Spring Web MVC模块(spring-webmvc-5.2.3.RELEASE.jar)是Spring框架中用于构建MVC(Model-View-Controller)架构的Web应用程序的核心部分。它为Web开发提供了一种强大且灵活的模型绑定、数据验证、异常处理和视图...

    Spring MVC--5.视图和视图解析器

    在Spring MVC框架中,视图和视图解析器是实现MVC模式中“V”(View)部分的关键组件。它们负责将处理完的数据转化为用户可以理解的格式,并展示在浏览器上。视图解析器则是连接控制器与视图的桥梁,它负责根据返回的...

    org.springframework.web.servlet-3.1.0.M2.jar

    Spring MVC提供了多种视图解析器,如InternalResourceViewResolver、TilesViewResolver等,可以支持JSP、FreeMarker、Thymeleaf等多种视图技术。 六、3.1.0.M2版本特性 1. 改进的异常处理:3.1.0.M2引入了@...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    标题中的"spring.jar"、"spring-webmvc-struts.jar"和"spring-webmvc.jar"都是Spring框架相关的Java库文件,通常以.jar结尾的文件是Java的归档文件,包含了类、资源和元数据,用于Java应用程序的运行。这些文件在...

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

    3. **视图解析** Spring MVC提供了多种视图技术的支持,如JSP、FreeMarker、Velocity等。视图解析器根据逻辑视图名自动确定物理视图,简化了视图层的实现。 4. **模型-视图-助手(MVA)** 除了传统的MVC,Spring ...

    spring-aop-3.0.xsd spring-beans-3.0 spring-context-3.0.xsd spring-mvc-3.1.xsd

    `spring-mvc-3.1.xsd` 文件定义了与 MVC 相关的配置元素,如控制器(Controller)、视图解析器(View Resolver)、模型-视图映射(Model-View-Mapping)等。通过版本号 3.1,我们可以看到这是针对 Spring 3.1 版本的...

    org.springframework.web.servlet-3.1.0.RELEASE.jar.zip

    1. **ModelAndView对象**:它是Spring MVC中用于在Controller处理完请求后,将模型数据和视图名称返回给DispatcherServlet的重要对象。开发者可以向ModelAndView对象中添加模型属性,并指定视图名称。 2. **@...

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

    4. **ViewResolver**:视图解析器根据ModelAndView中的视图名找到具体的视图进行渲染。Spring MVC提供了许多内置的ViewResolver,如InternalResourceViewResolver用于处理JSP视图,VelocityViewResolver则适用于...

    spring-mvc-4.2.xsd.zip

    这些配置元素允许开发者声明式地配置控制器、视图解析器、转换服务、消息源等组件。 例如,`&lt;mvc:annotation-driven&gt;`元素用于启用基于注解的控制器支持,这意味着Spring MVC会自动扫描并处理带有`@Controller`注解...

    spring-webmvc-5.0.9 jar包、源码和javadoc

    视图解析器负责将视图名称转换为实际的视图对象,例如JSP页面路径。常见的视图解析器有InternalResourceViewResolver和BeanNameViewResolver等。 六、注解驱动开发 Spring 5.0.9中,注解驱动开发已经非常成熟,@...

    spring_MVC源码

    -- 对模型视图名称的解析,即在模型视图名称添加前后缀 --&gt; 17. &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 18. p:prefix="/WEB-INF/view/" p:suffix=".jsp" /&gt; 19. ...

    spring MVC配置详解

    我们可以使用 InternalResourceViewResolver 或其他视图解析器来配置 ViewResolver。 七、总结 Spring MVC 是一个功能强大且灵活的 Web 框架,它提供了许多可配置的组件,以便我们根据需要进行自定义配置。掌握 ...

    Spring.Web.Mvc3.zip bug修改版

    在.NET开发领域,Spring.Web.Mvc3是一个非常重要的框架,它为基于ASP.NET MVC的应用程序提供了强大的依赖注入(DI)和面向方面的编程(AOP)支持。这个“Spring.Web.Mvc3.zip bug修改版”可能是一个修复了原版Spring...

    spring-webmvc5.3.6 jar包.rar

    这个jar文件包含Spring MVC框架相关的所有类。  包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。  当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    视图解析器(ViewResolver)在其中起到了关键作用,它根据逻辑视图名来找到实际的视图资源。 在配置方面,Spring MVC使用XML或Java配置来定义组件,包括Controller、Service、DAO等。随着Spring的发展,现在更倾向...

    Spring3.x MVC 例子

    Spring3.x MVC是Java开发中广泛使用的一个框架,它提供了模型-视图-控制器(MVC)架构,用于构建高效、可维护的Web应用程序。在本教程中,我们将深入探讨Spring3.x MVC的关键特性,通用配置,以及在企业级项目中的...

    spring-web.jar spring-webmvc.jar

    Spring框架是Java开发中不可或缺的一部分,它为构建高效、可重用的Web应用程序提供了强大的支持。在本讨论中,我们将深入探讨两个核心组件——`spring-web.jar`和`spring-webmvc.jar`,它们在Spring MVC框架中扮演着...

    Spring5.1.4核心jar包,包括mvc,webmvc

    - **ViewResolver**:视图解析器,根据模型数据和视图名来决定实际渲染的视图。 - **Model**:存储请求处理过程中产生的数据,可以与视图共享。 5. **Web MVC注解**:Spring 5.1.4支持大量的注解,如`@Controller...

    spring-webmvc-struts.jar

    总结,`spring-webmvc-struts.jar`是Spring框架与Struts框架融合的产物,它为开发者提供了在Struts应用中利用Spring的强大功能的机会。通过理解和掌握其工作原理及源代码,开发者可以更好地在现有Struts项目中引入...

Global site tag (gtag.js) - Google Analytics