Web编码解码

本文详细介绍了在Web开发中处理POST和GET请求时的编码解码问题。通过设置Servlet、过滤器、Web页面、Eclipse项目以及浏览器的编码为UTF-8,确保中文字符正确显示。此外,建议使用过滤器一次性解决多个Servlet的编码问题,并指出GET方式的安全隐患,推荐使用POST方式提交数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

POST表单的编码解码方式:例如,所有的编码方式统一设置为UTF-8

// 1、servlet.java文件
  
  
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); //放在最前端
System.out.println(request.getParameter("username"));
System.out.println(request.getParameter("password"));
request.getSession().setAttribute("username", "绿萝");
response.setCharacterEncoding("UTF-8");
response.sendRedirect("return.jsp");
}

// 2、web页面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
	<title>title</title>
</head>
<body>
	//有中文字符
</body>
</html>


// 3、eclipse项目
在项目以及文件的属性中设置编码方式为UTF-8。

// 4、浏览器
最好设置浏览器--》工具--》编码--》选择UTF-8。

============================================================

POST方式提交数据:编码问题解决办法二, 推荐使用过滤器
// 1、原因:对于应用有多个servlet文件,过滤器可以一次性解决问题。

// 2、过滤器(在过滤器中设置编码解码方式)
public class EncodingFilter implements Filter {
	private String encoding;
	//初始化时从web.xml文件获取编码方式encoding
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.encoding = filterConfig.getInitParameter("encoding");
	}
	//过滤器会在doGet()和doPost()方法执行之前执行
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding(this.encoding);
		chain.doFilter(request, response);
		
	}
	@Override
	public void destroy() {
	}
}

// 3、web.xml配置过滤器
<!-- 字符编码拦截器 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>filter.EncodingFilter</filter-class>  <!--自定义的拦截器类 -->
		<init-param>
			<param-name>encoding</param-name>  <!-- 代表编码的参数-->
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>

// 4、servlet.java文件 (不再需要设置服务器解码方式)
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println(request.getParameter("username"));
		System.out.println(request.getParameter("password"));
		request.getSession().setAttribute("username", "绿萝");
		response.sendRedirect("return.jsp");
	}

============================================================

GET方式提交数据的编码解码方式:例如,所有的编码方式统一设置为UTF-8

// 1.1、方式一:servlet.java文件
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username = request.getParameter("username");
		username = new String(username.getBytes("ISO-8859-1"),"UTF-8"); //编码转换,转为UTF-8
		System.out.println(username);
		System.out.println(request.getParameter("password"));  //没有中文的可以不进行编码转换
		request.getSession().setAttribute("username", "绿萝");
		response.setCharacterEncoding("UTF-8");
		response.sendRedirect("return.jsp");
}

// 1.2、方式二:修改服务器Tomcat的server.xml配置文件
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncoingForURI="true"/>

// 2、web页面
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
	<title>title</title>
</head>
<body>
	//有中文字符
</body>
</html>

// 3、eclipse项目
在项目以及文件的属性中设置编码方式为UTF-8。

// 4、浏览器
最好设置浏览器--》工具--》编码--》选择UTF-8。

// 5、 由于GET方式提交的数据存在安全隐患,所有最好用POST方式提交数据

============================================================


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值