Spring MVC 多视图解析器配置完成后返回页面乱码解决方案

本文介绍了在Spring MVC项目中,当使用多视图解析器如InternalResourceViewResolver和FreeMarkerViewResolver时遇到页面乱码的问题。作者在尝试返回HTML或JSP页面的过程中,调整了配置,但仍然遇到乱码。通过查阅资料和不断尝试,最终在springmvc-config.xml中添加了一段配置解决了乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

InternalResourceViewResolver:这是一个最常用的解析器。通常使用它指定渲染对象为jsp页面
FreeMarkerViewResolver:这就是Spring与Freemarker整合需要用到的解析器

参考:http://bubuko.com/infodetail-2645545.html
期末作业遇到了很多问题…

想法:我现在所做的项目里有jsp文件和html文件,想在控制器类返回html或者jsp文件。思路是根据优先级匹配。例如返回一个登录页面(html),如果jsp优先级高,那先从jsp找,找不到再去html中找。

目录结构:
在这里插入图片描述

一、控制器类
为了测试某个页面,所以单独建立了一个控制器类,服务器一运行就返回这个页面。
这个页面是LearnPhotography.html,不是jsp。所以要配置springmvc-config.xml(这是我的命名xxx.xml),原来老师给的代码只能返回jsp页面,所以我更改了配置文件。

package jee.course.ch10.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexController {
    @RequestMapping(value = "/")
    public String index(){
        return "LearnPhotography";
    }
}

二、springmvc-config.xml 多视图配置

   <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
          <!--我的html文件都在根目录下 -->
            <value>/</value>
        </property>
    </bean>
    <!-- 配置默认html页面的地址 -->
    <bean id="html_viewResolver"
          class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".html"/>
        <property name="order" value="0"/>
        <property name="contentType" value="text/html;charset=UTF-8"/>
            <!-- 其实这里是处理了字符,但是在我这里不起作用 -->
    </bean>
    <!-- 配置默认jsp页面的地址 -->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/>
        <property name="prefix" value="/WEB-INF/jsp/view/"/>
        <property name="suffix" value=".jsp"/>
        <property name="order" value="0"/>
    </bean>

三、web.xml过滤器

  <!--过滤器配置 -->
    <!--编码过滤器-->
    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

四、需要加入的maven依赖

      <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.20</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.2.8.RELEASE</version>
        </dependency>

测试:在这里插入图片描述
发现严重乱码啊。。。。更改html文件编码没有用,修改web.xml过滤器也没有用

最后查了很多资料,但是不知道怎么描述问题~~~还好找到了答案,很开心。
springmvc-config.xml文件添加 一段配置就解决了。

  <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
            <value>/</value>
      <-----------------添加的就是这段!!!!!!!!!!!!--------------->
        </property>
          <property name="freemarkerSettings">
             <props>
                <prop key="template_update_delay">1</prop>
                <!--关键解决点-->
                <prop key="default_encoding">UTF-8</prop>
                 <!--关键解决点-->
              </props>
          </property>
      <----------------------------------------------------------------->
    </bean>
    <!-- 配置默认html页面的地址 -->
    <bean id="html_viewResolver"
          class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".html"/>
        <property name="order" value="0"/>
        <property name="contentType" value="text/html;charset=UTF-8"/>
    </bean>
    <!-- 配置默认jsp页面的地址 -->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/>
        <property name="prefix" value="/WEB-INF/jsp/view/"/>
        <property name="suffix" value=".jsp"/>
        <property name="order" value="0"/>
    </bean>

在这里插入图片描述
标题太傻了。。。就马赛克了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值