首页 > 编程语言 > 详细

springmvc乱码问题

时间:2021-06-27 09:38:13      阅读:21      评论:0      收藏:0      [点我收藏+]

1.页面乱码问题

打开浏览器获取网页数据,通过jsp中指定的编码格式解析网页,如果未设置,就使用默认编码格式。一般我们使用UTF-8的格式,在jsp页面添加下列代码

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" %>

通过设置contentType属性中charset设置指定编码,jsp在解析的时候或自动将该属性值解析到如下标签中

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

所以说加了page命令后,这段meta标签其实根本没必要添加就会自动出现。

针对html页面乱码则添加上面的meta标签即可解决乱码问题。注意,meta标签需要添加到head标签里面。

2.传递参数乱码问题

(1)在前台数据提交到后台的过程中,首先进入tomcat中,现在在tomcat中进行编码处理,打开context.xml配置文件

<Connector executor="tomcatThreadPool"

  port="8080" protocol="HTTP/1.1"

  connectionTimeout="20000"

  redirectPort="8443"

  URIEncoding="UTF-8" />

tomcat控制uri的编码,uri是url后面的那部分,比如http://www.baidu.com/test/hello,的uri就是/test/hello。那么说明只能控制get请求,和部分post请求(比如ajax提交的post)。

 

(2)接下来数据请求进入springmvc拦截器,如果没有拦截器直接进入过滤器

<filter>

  <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

过滤器是为了设置request的编码,forceEncoding是设置,是否同时设置response的编码,默认为false

(3)自定义filter类解决编码问题

package com.qiyuan.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EncoidingFilter implements Filter {

private String encoding="";
@Override
public void destroy() {
// TODO Auto-generated method stub

}


//过滤方法 是否往下执行
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;

request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);

//过滤通行证
chain.doFilter(request, response);
}

//根据web.xml文件的配置进行初始化
@Override
public void init(FilterConfig arg0) throws ServletException {
this.encoding = arg0.getInitParameter("Encoding");

}

}

在web.xml中添加配置

<!-- 配置编码过滤 -->
<filter>
<filter-name>EncoidingFilter</filter-name>
<filter-class>com.qiyuan.filter.EncoidingFilter</filter-class>

<init-param>
<param-name>Encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>

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

(4)也可以使用代码单独解决一条request的编码问题

request.getParameter( "bigQuestionTypeName" )).getBytes( "iso-8859-1" ), "utf-8" 

3.数据库乱码

修改数据库的编码格式

springmvc乱码问题

原文:https://www.cnblogs.com/charleyyxc/p/14939409.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!