SpringMVC配置多视图JSP+freemarker,总报404错误的时候看下这个

下面的是可用 的配置,其实关键部分就是不要导错包,freemarker的版本至少2.3.15以上

还有就是

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

这个配置,在freemarker和jsp的配置那里各有一个,这里的value一旦设置就有可能出现404错误,你检查你的地址会发现页面还是.jsp结尾的,去掉这个2个地方的value就可以找到页面了,如果在jsp和freemarker各有一个相同的页面。那么

return "user/findUserAll.ftl" //根据视图解析器的配置,这里会根据后缀来找页面,所以必须要写后缀。多视图配置的时候在配置那不能处理写suffix这个属性

如上,返回的时候写上后缀,就会自动去往你指定的页面,而且这个后缀不能省

 

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



    <!--这是springMVC的配置==========================================================================================================-->


    <!--启动注解,激活@Controller模式 注册服务,如验证框架、全局类型转换器-->
    <mvc:annotation-driven/>

    <!--开启扫描-->
    <context:component-scan base-package="com.shadow" >
        <!--制定扫描包规则,只扫描使用@Controller注解的java类,防止父子容器扫描冲突-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>


    <!--JSP视图解析器  配置视图解析器   prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),
     比如传进来的逻辑视图名为WEB-INF/jsp/hello,则该该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”;总结:自动为我们添加这个后面和前缀,不需要我们自己去添加返回的一些个页面后缀-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver ">
        <!--如果使用的是UrlBasedViewResolver这种方式,这个就不能省,如果用的InternalResourceViewResolver方式就可以省-->
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <!-- 前缀,即视图所在的路径 ,放在web-inf下面是为了防止客户端直接通过jsp地址访问jsp页面,这样就不走springmvc了-->
        <property name="prefix" value="/WEB-INF/views/" />
        <!-- 后缀 视图的扩展名。可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑-->
        <!--.jsp在多视图的时候,这个不能配置,否则会报404错误。spring后自动帮你找到你要的视图(即你的页面)但这么配后要这么写return "user/findUserAll.jsp";根据后缀去找页面-->
        <property name="suffix" value="" />
        <!--查找顺序 0是第一个,1是第二个。在JSP和Freemarker的配置项中都有一个order property,上面例子是把freemarker的order设置为0,jsp为1。 
        意思是找view时,先找ftl文件,再找jsp文件做为视图-->
        <property name="order" value="1"/>
    </bean>

    <!-- 对静态资源文件的访问,不让springMVC拦截,对客户端请求的静态资源如图片、JS文件等的请求交由默认的servlet进行处理
    如何你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时
    对*.js,*.jpg等静态文件的访问也就被拦截了。第一种则是在spring3.0.4以后版本提供了mvc:resources也可解决该问题 ,第二种则是在web.xml中配置servlet-mapping-->
    <!--<mvc:resources mapping="/js/**" location="/js/"/> -->


    <!--避免ie执行ajax的时候,返回json出现下载文件-->
    <bean id="MappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>

    <!--配置文件上传,注意要引入相关的jar才行  multipartResolver这个id不能乱改-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--默认编码-->
        <property name="defaultEncoding" value="UTF-8" />
        <!-- 文件大小最大值 10M-->
        <property name="maxUploadSize" value="10485760" />
        <!-- 内存中的最大值 -->
        <property name="maxInMemorySize" value="40960" />
    </bean>



    <!--springMVC的拦截器-->
    <!--<mvc:interceptors>-->
        <!--<mvc:interceptor>-->
            <!--&lt;!&ndash;要拦截的路径&ndash;&gt;-->
            <!--<mvc:mapping path="/**"/>-->
            <!--&lt;!&ndash;拦截器地址&ndash;&gt;-->
            <!--<bean class="com.shadow.util.BasePathInterceptor"></bean>-->
        <!--</mvc:interceptor>-->
    <!--</mvc:interceptors>-->

    <!--freeMarker配置#####################################################-->

    <!-- 配置freeMarker视图解析器 -->
    <bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver" >
        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
        <!--此处需要声明为utf-8编码,否则即使页面是utf-8编码,中文还是不能正常显示-->
        <property name="contentType" value="text/html; charset=UTF-8"/>
        <!--默认值false,设置是否所有的request属性在与模板进行合并之前添加到model中。(可以理解为request范围内包含的所有对象,而不是一个真正的Request对象。-->
        <property name="exposeRequestAttributes" value="true" />
        <!--查找对应下所有以ftl结尾的文件-->
        <property name="viewNames" value="*.ftl" />
        <!--exposeSessionAttributes:默认值false,设置是否所有的session属性在与模板进行合并之前添加到model中-->
        <property name="exposeSessionAttributes" value="true" />
        <!--设置是否通过spring的宏库暴露一个RequestContext(名为springBindRequestContext)供外部使用,默认值为false。它暴露了处理表单和验证错误信息的宏操作-->
        <property name="exposeSpringMacroHelpers" value="true"/>
        <!--该配置是freemarker获取路径的关键配置,如果配置了这个,在ftl页面,就可以<#assign base=request.contextPath />得到请求的绝对路径,调用
        时${base}/static/bootstra即可,但问题是用域名直接访问系统的时候就可能出现bug,所以不推荐该方式获取路径,建议使用spring拦截器处理-->
        <property name="requestContextAttribute" value="request" />
        <property name="cache" value="true"/>
        <!--.ftl  在多视图的时候,这个不能配置,否则会报404错误。spring后自动帮你找到你要的视图(即你的页面)这么配后要这么写,return "user/findUserAll.ftl";根据后缀找页面-->
        <property name="suffix" value="" />
        <!--查找顺序 0是第一个,1是第二个。在JSP和Freemarker的配置项中都有一个order property,上面例子是把freemarker的order设置为0,jsp为1。 
        意思是找view时,先找ftl文件,再找jsp文件做为视图-->
        <property name="order" value="0" />
    </bean>


    <!--freemarker需要的一个bean-->
    <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />

    <!-- 设置freeMarker的配置文件路径,如果使用该设置,在下面直接引用配置文件即可,否则可以不用这种方式 -->
    <!--<bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">-->
        <!--&lt;!&ndash;指定配置文件路径&ndash;&gt;-->
        <!--<property name="location" value="classpath:freemarker.properties"/>-->
    <!--</bean>-->

    <!-- 配置freeMarker的模板路径 -->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <!--ftl文件的路径-->
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
        <property name="freemarkerVariables">
            <map>
                <entry key="xml_escape" value-ref="fmXmlEscape" />
            </map>
        </property>
        <property name="defaultEncoding" value="UTF-8" />
        <!--设置freemarker的一些配置,也可以引用外部文件来设置,下面的直接配置也是可以的,也可外部配置,如下面-->
        <property name="freemarkerSettings" >
            <props>
                <!--刷新模板的周期,单位为秒-->
                <prop key="template_update_delay">0</prop>
                <!--本地化设置-->
                <prop key="locale">zh_CN</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="number_format">#.##</prop>
                <!--此属性可以防止模板解析空值时的错误-->
                <prop key="classic_compatible">true</prop>
            </props>
        </property>
        <!--<property name="freemarkerSettings" ref="freemarkerConfiguration" />&lt;!&ndash;引入外部的配置文件,如果用上面这种就不需要引入配置文件&ndash;&gt;-->
    </bean>


    <!--解决freemarker的全局路径,对该类继承后覆写-->
    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <!-- 自定义FreeMarkerView,用来定义项目的全局路径 -->
        <property name="viewClass" value="com.shadow.util.MyFreeMarkerView"/>
    </bean>

</beans>

 

 

 

 

 

 

转载于:https://my.oschina.net/sprouting/blog/837934

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值