servlet编码问题

出现中文问题是jsp文件编码,tomcat默认编码ISO8859_1,以及UTF-8所造成的问题,解决这个问题,需要搞清楚的是服务器端,客户端,以及传递的值的编码问题。

首先jsp编码设置为UTF-8,表单数据经过tomcat,默认ISO8859_1,jsp接收的又是UTF-8,在客户端显示的jsp中文乱码问题就清楚了。

解决方案是:

1.jsp设置UTF-8

2.按字节接收表单数据,转化为UTF-8

3.        String username = new String(request.getParameter("username").getBytes("ISO8859_1"), "UTF-8");
        String password = new String(request.getParameter("password").getBytes( "ISO8859_1"), "UTF-8");

4.设置UTF-8

        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");


HelloworldServlet.java


package com.examp;

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 HelloWorldServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String username = new String(request.getParameter("username").getBytes(
				"ISO8859_1"), "UTF-8");
		String password = new String(request.getParameter("password").getBytes(
				"ISO8859_1"), "UTF-8");

		System.out.println(username);
		System.out.println(password);

		response.setContentType("text/html");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");

		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.println("username is :" + username);
		out.println("password is :" + password);
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}



index.jsp



<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Login</TITLE>
</HEAD>
<BODY>
	<TABLE width="50%" align="center" border=1 cellspacing="0"
		cellpadding="0" bordercolordark="#CCCC99" bordercolorlight="#CCCC99">
		<TR>
			<TD align="center" bgcolor="#CCCC99">登录系统</TD>
		</TR>
		<TR>
			<TD><TABLE align="center" border=1 cellspacing="0"
					cellpadding="0" bordercolordark="#CCCC99"
					bordercolorlight="#CCCC99">
					<FORM ACTION="HelloWorldServlet">
						<!--提交FORM后调用helloworld_servlet去处理-->
						<TR>
							<TD>用户名:</TD>
							<TD bgcolor="#CCCC99"><input type="text" name="username"
								size=25>
							</TD>
						</TR>
						<TR>
							<TD>密码:</TD>
							<TD bgcolor="#CCCC99"><input type="password" name="password"
								size=25>
							</TD>
						</TR>
						<TR>
							<TD align="center" bgcolor="#CCCC99"><input type="submit"
								value="提交">
							</TD>
							<TD align="center" bgcolor="#CCCC99"><input type="reset"
								value="重填">
							</TD>
						</TR>
					</FORM>
				</TABLE>
			</TD>
		</TR>
	</TABLE>
</BODY>
</HTML>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值