SpringMVC html视图解析以及中文乱码问题

  新项目中准备抛弃jsp而改用html,遇到一些列奇怪的问题,现记录如下:

  首先是视图解析问题,在Controller中返回视图时间变得异常慢,一个页面将近20秒,方法很快就执行完毕,就是最后 return viewName 一直卡着,各种检查没问题,最后去查看视图解析配置:

  

<--org.springframework.web.servlet.view.InternalResourceViewResolver-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="${web.view.prefix}"/>
        <property name="suffix" value="${web.view.suffix}"/>
        <property name="contentType">
            <value>text/html; charset=UTF-8</value>
        </property>
 </bean>
org.springframework.web.servlet.view.InternalResourceViewResolver 是jsp用的解析器,html时要用FreeMaker视图解析
<!-- 定义视图文件解析 html专用-->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
            <value>${web.view.prefix}</value>
        </property>
    </bean>
    <bean id="htmlviewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".html" />
        <property name="order" value="0"></property>
        <property name="contentType" value="text/html;charset=UTF-8"></property>
    </bean>

改完之后果然速度在飞,搞定。不过页面中文却乱码了,这小事一桩,web应用我们解决乱码都是高手,开始如下之旅:

  1.先改html页面:无效

  

<head>
    <title>登录</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

2.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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

无效 ,甚至病急乱投医,把forceEncoding改为false试一试

  3:Controller代码:(网上找的各种方法)

  

@RequestMapping(value = "${adminPath}/login", produces = "text/html;charset=UTF-8",method = RequestMethod.GET)
    //@ResponseBody
    public String login(HttpServletRequest request, HttpServletResponse response, String s) {
        try {
            request.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=UTF-8");
        HttpServletRequest hRequest = WebUtils.toHttp(request);

4:tomcat 服务器serer.xml,URIEncoding=utf-8,这个对get请求中文参数其实管用。

。。。。。

最终还是没能解决,差点放弃了。在网上百度各种 “SpringMVC html 中文乱码”,最后想,是不是FreeMaker视图解析器的问题呢,换关键词“SpringMVC FreeMaker视图解析 中文乱码”,果然有新方法,如下

<!-- 定义视图文件解析 html专用-->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
            <value>${web.view.prefix}</value>
        </property>
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">1</prop>
                <prop key="default_encoding">UTF-8</prop>   //关键解决点
                <prop key="number_format">0.##</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
            </props>
        </property>
    </bean>
    <bean id="htmlviewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".html" />
        <property name="order" value="0"></property>
        <property name="contentType" value="text/html;charset=UTF-8"></property>
    </bean>

终于解决了,中文乱码真实头疼啊。。。。,哪天编程语言用中文写就,也就就彻底解决了!  百度用了那么多年,你真的会吗?

原文地址:https://www.cnblogs.com/KeepYongth/p/9188008.html

时间: 2024-08-28 09:38:32

SpringMVC html视图解析以及中文乱码问题的相关文章

SpringMVC使用Ajax请求返回中文乱码

前言: 最近在写一个JavaWeb后台时采用了spring+MyBatis+MySQL的方式.记录下遇到的关键问题 接口返回数据相关 使用@ResponseBody后返回NUll 说明:刚把后台运行起来,兴高采烈的测试接口数据,结果无论如何都是返回null, 最终通过各种百度,发现原来是没有引入关键的Jar包. 解决办法: 需要引入jackson的jar包(jackson core和jackson mapper),引入后 图: 使用@RequestMapping返回中文乱码 原因分析:(网上基本

SpringMVC源码分析6:SpringMVC的视图解析原理

title: SpringMVC源码分析6:SpringMVC的视图解析原理 date: 2018-06-07 11:03:19 tags: - SpringMVC categories: - 后端 - SpringMVC --- 转自 SpringMVC视图机制详解[附带源码分析] 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Spring源码解析 https://blog.csdn.net/column/details/21851.h

SpringMVC 使用@ResponseBody返回json 中文乱码

这确实是个蛋疼的问题,Spring中解析字符串的转换器默认编码居然是ISO-8859-1 既然找到问题了,那就必须想办法改过来,不同版本的Spring好像方法还不一样,网上不少说的都是Spring3.*的,现在Spring4早都出来了 更改方式可以参考 http://stackoverflow.com/questions/3616359/who-sets-response-content-type-in-spring-mvc-responsebody http://www.cnblogs.com

springMVC初探视图解析器——InternalResourceViewResolver

springmvc在处理器方法中通常返回的是逻辑视图,如何定位到真正的页面,就需要通过视图解析器. springmvc里提供了多个视图解析器,InternalResourceViewResolver就是其中之一: 最常用的视图解析器:InternalResourceViewResolver 当处理器返回“index”时,InternalResourceViewResolver解析器会自动添加前缀和后缀:/WEB-INF/jsp/index.jsp 注意:这里的order表示视图解析的优先级,数目

学习SpringMVC——说说视图解析器

各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注解的魅力和套路了.搭上@RequestMapping的便车,我们可以去到我们想去的地方(方法)去,借助@RequestParam.@PathVariable等我们可以得到请求中想要的参数值,最终还能够通过神奇的“return SUCCESS”到达我们的目的地.今天主要就来说说在达到目的地的路上,我们

springmvc之视图解析流程

在springmvc.xml配置文件中配置了将逻辑视图转换成物理视图: <!-- 配置视图解析器:如何把handler返回值解析为实际的物理视图 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/">&

SpringMVC 解决GET请求时中文乱码的问题

<filter>        <filter-name>CharacterEncoding</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param

SpringMVC中视图解析器

视图解析器:固定写法直接coppy就行 1.dispatcherServlet-servlet.xml中添加 <!-- 视图解析器InternalResourceViewResolver --> <!-- 对转向页面的路径解析.prefix:前缀, suffix:后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <pr

springMVC初探视图解析器——ResourceBundleViewResolver

视图解析器ResourceBundleViewResolver是根据proterties文件来找对应的视图来解析”逻辑视图“的, 该properties文件默认是放在classpath路径下的views.properties文件,当然可以通过basename属性更改: <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="b