博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
乱码问题总结
阅读量:4052 次
发布时间:2019-05-25

本文共 3633 字,大约阅读时间需要 12 分钟。

 >>1.直接访问jsp页面乱码

这是因为jsp文件的头部:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

默认pageEncoding="ISO8859-1",把它改成UTF-8就可以正常显示中文了。

 

>>2.客户端向服务器传输的数据乱码

在Servlet中直接执行下面代码为出现乱码问题:

Sring username = request.getParameter("username");

要在这条语句之前设置一下request的编码方式:

request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");

>>3.服务器返回给浏览器的数据显示乱码,这时候在执行返回操作之前设置一下response的编码:

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();out.println("原有的中文
");out.println("从客户端获得的用户名:" + username);out.flush();out.close();

 

>>4.要解决乱码问题,要进行上述的一系列设置,很麻烦,可以用过滤器解决乱码问题:

 过滤器类代码:

package com.autonavi.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;public class CharacterEncodingFilter implements Filter {	private FilterConfig config ;	private String encoding = "ISO-8859-1";		public void destroy() {		encoding = null;		}	public void doFilter(ServletRequest request, ServletResponse response,			FilterChain chain) throws IOException, ServletException {		request.setCharacterEncoding(encoding);		response.setContentType("text/html;charset=" + encoding);		chain.doFilter(request, response);	}	public void init(FilterConfig config) throws ServletException {		this.config = config;		String s = config.getInitParameter("encoding");		if(s != null){			encoding = s;		}	}}

用于测试的一个Servlet代码:

package com.autonavi.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet {	public void destroy() {		super.destroy(); // Just puts "destroy" string in log	}	public void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		doPost(request, response);	}	public void doPost(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {//		request.setCharacterEncoding("UTF-8");//		response.setContentType("text/html;charset=UTF-8");		String username = request.getParameter("username");		PrintWriter out = response.getWriter();		out.println("原有的中文
"); out.println("从客户端获得的用户名:" + username); out.flush(); out.close(); } public void init() throws ServletException { }}

发送请求jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'index.jsp' starting page	

web.xml代码:

CharacterEncodingFilter
com.autonavi.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
TestServlet
com.autonavi.servlet.TestServlet
TestServlet
/servlet/testServlet
index.jsp

这里要注意有几点需要注意:

1.刚开始执行总是显示乱码,后来查到原因是因为过滤器CharacterEncodingFilter中缺少这句代码:

response.setContentType("text/html;charset=" + encoding);

2.要以表单的形式发送请求,否则过滤器不起作用,若是以url的方式传递参数,则要在Tomcat相应位置加上:URIEncoding="UTF-8"

3.表单的请求方法method必须为post,不然过滤器也不会起作用

 

转载地址:http://gltci.baihongyu.com/

你可能感兴趣的文章
HTML基础
查看>>
Java IO
查看>>
Java NIO
查看>>
Java 泛型
查看>>
一、Web应用和web.xml文件
查看>>
二、JSP的基本原理
查看>>
三、JSP的4种基本语法
查看>>
四、JSP的3个编译指令
查看>>
五、JSP的7个动作指令
查看>>
六、JSP中的9个内置对象
查看>>
一、Servlet介绍
查看>>
二、Filter介绍
查看>>
三、Listener介绍
查看>>
mybatis报错invalid types () or values ()解决方法
查看>>
一、Mybatis入门
查看>>
二、Mybatis增、删、改、查基于XML和注解
查看>>
三、优化分类
查看>>
四、Mybatis解决字段名与实体类属性名不相同的冲突
查看>>
五、Mybtis实现关联表查询
查看>>
六、Mybatis动态SQL和模糊查询
查看>>