天天看點

SSM-SpringMVC-12:SpringMVC中BeanNameViewResolver這種視圖解析器

 ------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑-------------

視圖解析器,這個很熟悉啊,之間就用過,就是可以簡寫/和.jsp的InternalResourceViewResolver

我這次書寫的BeanNameViewResolver就是另外一種視圖解析器,他有優點,也有缺點,優點可以通路項目外部的網頁,并且靈活性很好,缺點有,最後寫完案例你就明白了

要說的有處理器中的方法

package cn.dawn.day08ViewResolver;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

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

/**
 * Created by Dawn on 2018/3/23.
 */
public class MyViewController extends MultiActionController{

    /*外部視圖解析器*/
    public String doFirst(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

        /*方法傳回值String也可以*/
        /*此處的就是具體的視圖bean的id*/
        return "OuterViewObject";
    }

    /*内部視圖解析器*/
    public String doSecond(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

        /*此處的就是具體的視圖bean的id*/
        return "jstlViewObject";
    }
}      

再來是自己的xml檔案,他需要配三個塊,一是我說的BeanNameViewResolver這個視圖解析器,還有就是倆個視圖,我做了一個外部一個内部的demo

<?xml version="1.0" encoding="UTF-8"?>
<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"
       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處理器-->
    <bean id="myViewController" class="cn.dawn.day08ViewResolver.MyViewController">
        <property name="methodNameResolver" ref="parameterMethodNameResolver"></property>
    </bean>
    <!--視圖解析器-->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"></bean>
    <!--外部視圖-->
    <bean id="OuterViewObject" class="org.springframework.web.servlet.view.RedirectView">
        <!--可以通路不在自己項目中的網頁-->
        <property name="url" value="https://www.jd.com"></property>
    </bean>

    <!--内部視圖-->
    <bean id="jstlViewObject" class="org.springframework.web.servlet.view.JstlView">
        <property name="url" value="/second.jsp"></property>
    </bean>

    <!--參數方法名稱解析器-->
    <bean id="parameterMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
        <property name="paramName" value="actionName"></property>
    </bean>

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <!--第一種方式-->
        <property name="urlMap">
            <map>
                <entry key="/doFirst">
                    <value>myViewController</value>
                </entry>
            </map>
        </property>
    </bean>

</beans>      

此處要說的點有倆個:

問題一:我xml中的BeanNameViewResolver視圖解析器裡面什麼值都沒有,為什麼配,有意義嗎?

答案:

SSM-SpringMVC-12:SpringMVC中BeanNameViewResolver這種視圖解析器

 看到這張圖了吧,雖說視圖解析器有預設值,但是不是BeanNameViewResolver,要想使用就必須自己配置一道,可以說就近原則,也可以說進行改值,反正這塊的視圖解析器就變為了BeanNameViewResolver

問題二:你剛才說的缺點呢?我沒看出來

答案:每使用一道視圖,就得手工配置一道,麻煩啊,最重要的一點,如果視圖多了,你這個核心的xml配置檔案還怎麼看?又亂又長。。。。

是以針對後面這個缺點,進行了優化,需要用到XmlViewResolver這個家夥,準備看下一篇部落格吧,小夥子