一、单一映射的解决方案。
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>
分享到:
相关推荐
需要注意的是解决乱码问题#需要指定下编码格式spring.velocity.properties.input.encoding=UTF-8spring.velocity.properties.output.encoding=UTF-8#部分文件说明VM_global_library.vm vm的全局定义函数,参数再这里...
本示例将深入探讨如何使用Spring发送电子邮件,特别是针对中文乱码问题的解决方案。我们将涉及Spring的Java配置和Velocity模板引擎来创建动态邮件内容。 首先,我们需要引入必要的依赖。在Spring项目中,我们通常会...
- **字符编码配置:** 为了避免乱码问题,引入`CharacterEncodingFilter`过滤器,设置请求和响应的编码为UTF-8。 **2. 全局配置文件:** - `web.xml`完整配置应包括上述所有配置项,同时可能还需要其他一些标准...
2. **编码问题**:确保所有文件的编码格式一致,避免乱码问题。 3. **路径问题**:注意资源文件(如图片、CSS等)的路径设置,确保正确无误。 4. **异常处理**:合理使用try-catch语句捕获异常,并在JSP页面中设置...
2. **设置字符编码过滤器**:为了处理中文乱码问题,需要配置CharacterEncodingFilter,确保从页面到后台的数据传输过程中,字符编码正确。 ```xml <filter-name>encodingFilter <filter-class>org.spring...
6. **Web开发中的字符乱码问题** 字符编码问题是Web开发中的常见问题,特别是在处理用户输入和显示输出时。理解Unicode、UTF-8和其他字符编码方式,以及如何在HTTP头、HTML页面和服务器配置中设置正确的编码,对于...
- `encodingFilter`: Spring 提供的 CharacterEncodingFilter 确保请求和响应都使用 UTF-8 编码,防止乱码问题。 - `exportFilter`: 处理导出数据时的格式转换。 2. **MVC 层次分析** - **Struts2** 作为控制器...
- **Bug修复**:解决中文乱码问题以及其他由于本地化差异导致的错误,包括日期格式等。 - **功能定制**:根据国内用户的特殊需求对现有工具进行定制或改进,如UI设计调整等。 - **新工具开发**:如果现有工具无法...