`
JackAndroid
  • 浏览: 136251 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring下velocity页面中文乱码问题

阅读更多

一、单一映射的解决方案。

     1.  便于管理,将.vm文件格式设置为UTF-8编码;

     2.  在applicationContext.xml中添加velocity引擎

<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    <property name="resourceLoaderPath" value="/"></property>
    <property name="velocityProperties">  
        <props>  
            <prop  key="input.encoding">UTF-8</prop>  
            <prop  key="output.encoding">UTF-8</prop>    
         </props>  
     </property>                  
  </bean>

      3.添加视图解析器

 <bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
   <property name="suffix"><value>.vm</value></property>
   <property name="contentType"><value>text/html;charset=UTF-8</value></property>
 </bean>

 

  按上述配置后,则显示中文正常。不过具体实现是有几点需要注意:

  a.

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

   由于设置引擎的路径是/,所以具体的view是不能再以/开头,如WEB-INF/x,而不能为/WEB-INF/x

  b.

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

   后缀名已经申明为.vm,所以view不用再申明.vm后缀,即WEB-INF/x,而不能为WEB-INF/x.vm,不然会被用于查找WEB-INF/x.vm.vm.

 

二、多映射的解决方案

   利用VelocityViewResolver,使得视图与url只能进行固定的单一映射,若希望使用ResourceBunlderViewResovler则又会出现中文乱码,解决这一问题则需要使用过滤器Filter。

  1.  编写过滤器的代码

public class CharacterEncodeFilter implements Filter {

	private String characterSetName = null;

	private boolean enableEncoding = false;

	/**
	 * @see javax.servlet.Filter#destroy()
	 */
	public void destroy() {

	}

	/**
	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
	 *      javax.servlet.ServletResponse, javax.servlet.FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		System.out.println(this.enableEncoding);
		System.out.println(this.characterSetName);

		if (this.enableEncoding)
		{
			//request.setCharacterEncoding(characterSetName);
			response.setContentType("text/html;charset=" + characterSetName);
		}

		chain.doFilter(request, response);

	}

	/**
	 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
	 */
	public void init(FilterConfig config) throws ServletException {
		loadConfigurer(config);

	}

	/**
	 * 载入配置信息
	 * 
	 * @param config
	 */
	private void loadConfigurer(FilterConfig config) {
		characterSetName = config.getInitParameter("characterSetName");
		String enable = config.getInitParameter("enableEncoding");

		if (enable != null && enable.equalsIgnoreCase("true"))
		{
			this.enableEncoding = true;
		} else
		{
			this.enableEncoding = false;
		}

	}

}

 2.在web应用的web.xml文件中添加过滤器设置

 <filter>
   <filter-name>characterFilter</filter-name>
   <filter-class>filters.CharacterEncodeFilter</filter-class>
   <init-param>
     <param-name>characterSetName</param-name>
     <param-value>UTF-8</param-value>
   </init-param>
   <init-param>
    <param-name>enableEncoding</param-name>
    <param-value>true</param-value>
   </init-param>
  </filter>
  
  <filter-mapping>
   <filter-name>characterFilter</filter-name>
   <url-pattern>*.html</url-pattern>
  </filter-mapping>
  

   上述过滤器当后缀名为html时才生效。其实这种利用过滤器的方法对于任何页面的乱码都同样有效,注意,当你需要过滤器其他文件访问时,请设置<filter-mapping>下的<url-pattern>为相应的文件即可。

 三、使用spring内置过滤器

      其实,spring自己提供一个编码过滤器,因而只需要在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>

 

 

 

 

分享到:
评论
2 楼 youngcoder 2018-01-25  
很好 good!!!
1 楼 qinghe3012 2012-06-08  
非常不错,spring 自带的好用些

相关推荐

    spring-boot-velocity:velocity 和spring boot 只要还是熟悉下velocity的基本使用方法

    需要注意的是解决乱码问题#需要指定下编码格式spring.velocity.properties.input.encoding=UTF-8spring.velocity.properties.output.encoding=UTF-8#部分文件说明VM_global_library.vm vm的全局定义函数,参数再这里...

    Spring Email 发送

    本示例将深入探讨如何使用Spring发送电子邮件,特别是针对中文乱码问题的解决方案。我们将涉及Spring的Java配置和Velocity模板引擎来创建动态邮件内容。 首先,我们需要引入必要的依赖。在Spring项目中,我们通常会...

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能.doc

    - **字符编码配置:** 为了避免乱码问题,引入`CharacterEncodingFilter`过滤器,设置请求和响应的编码为UTF-8。 **2. 全局配置文件:** - `web.xml`完整配置应包括上述所有配置项,同时可能还需要其他一些标准...

    jsp入门小知识

    2. **编码问题**:确保所有文件的编码格式一致,避免乱码问题。 3. **路径问题**:注意资源文件(如图片、CSS等)的路径设置,确保正确无误。 4. **异常处理**:合理使用try-catch语句捕获异常,并在JSP页面中设置...

    SpringMVC实例

    2. **设置字符编码过滤器**:为了处理中文乱码问题,需要配置CharacterEncodingFilter,确保从页面到后台的数据传输过程中,字符编码正确。 ```xml &lt;filter-name&gt;encodingFilter &lt;filter-class&gt;org.spring...

    Java Web之高级应用

    6. **Web开发中的字符乱码问题** 字符编码问题是Web开发中的常见问题,特别是在处理用户输入和显示输出时。理解Unicode、UTF-8和其他字符编码方式,以及如何在HTTP头、HTML页面和服务器配置中设置正确的编码,对于...

    Java Appfuse-源代码分析-综合文档

    - `encodingFilter`: Spring 提供的 CharacterEncodingFilter 确保请求和响应都使用 UTF-8 编码,防止乱码问题。 - `exportFilter`: 处理导出数据时的格式转换。 2. **MVC 层次分析** - **Struts2** 作为控制器...

    2009系统架构师大会PPT:李江涛:使用Sakai构建开放式教学平台

    - **Bug修复**:解决中文乱码问题以及其他由于本地化差异导致的错误,包括日期格式等。 - **功能定制**:根据国内用户的特殊需求对现有工具进行定制或改进,如UI设计调整等。 - **新工具开发**:如果现有工具无法...

Global site tag (gtag.js) - Google Analytics