servelet中乱码问题的解决:表单操作实例

乱码原因:
浏览器中输入地址 –> 浏览器对中文进行编码 –>发送到服务器 ->服务器进行解码

如果浏览器编码和服务器解码用的字符集不一致就会发生乱码问题。


乱码解决方式:

浏览器访问

浏览器默认使用UTF-8编码(IE默认GBK当然可以通过meta标签设置)
       <meta  http-equiv="content-type" content="text/html; charset=gbk"/>
服务器(Tomcat)默认使用iso-8859-1解码。iso-8859-1是不支持中文的,也就是说不做处理,中文是一定乱码的。
   Servlet代码处理:
         String user_Name = new String(userName.getBytes("ISO-8859-1"), "UTF-8");


GET方式解决:

单纯设置request.setCharacterEncoding("UTF-8");是没有用的,所以我们把默认的iso-8859-1编码改成UTF-8,在TOMCAT的配置文件的server.xml中更改:
  <Connector port="8080"protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443" 
             URIEncoding="UTF-8" />

添加URIEncoding=UTF-8


POST方式解决:

比如表单提交,在Servlet中设置request.setCharacterEncoding("UTF-8");就能很好的解决。


在servlet设置响应编码
resp.setContentType("text/html;charset=utf-8");//设置响应编码


实例如下:web.xml

<?xml version="1.0" encoding="utf-8"?><!--utf-8不区分大小写-->
<web-app version="2.5"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
	<!--login.html与WEB-INF是同级文件,在WebRoot建立-->
	
	<!--注册servlet-->
	<servlet>
		<servlet-name>LoginServlet</servlet-name>
		<servlet-class>cn.loginservlet.LoginServlet</servlet-class><!--包名加类名-->
	</servlet>
	
	<!--映射-->
	<servlet-mapping>
		<servlet-name>LoginServlet</servlet-name>
		<url-pattern>/loginservlet</url-pattern>
	</servlet-mapping>
	
	<!--注册login.html 浏览器登录:http://192.168.5.7:8080/login/login.html-->
	<welcome-file-list>
      <welcome-file>login.html</welcome-file>
    </welcome-file-list>
	
</web-app>

java代码:

package cn.loginservlet;

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 LoginServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");//解决post方法请求乱码问题
		resp.setContentType("text/html;charset=utf-8");//设置响应编码
		
		System.out.println("loginservlet doGet......");
		
		String userName = req.getParameter("userName");
		String passWord = req.getParameter("passWord");
		
		System.out.println("userName:"+userName+"\npassWord:"+passWord);
		
		/**解决get方法的乱码问题 :在Tomact server.xml文件中更改
		 * <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
		   URIEncoding="UTF-8"(添加这一句就好了)
		  /> */
		//方式2(局部):
		//String user_name = new String(userName.getBytes("ISO-8859-1"), "UTF-8");
		//System.out.println("userName 用get方法解决乱码后:"+user_name+"\npassWord:"+passWord);
		
		PrintWriter pw = resp.getWriter();
		
		if(userName.equals("admin")&&passWord.equals("admin")){
			pw.println("<h1>login is sucess成功</h1> 成功");//可以学标签
		}else{
			pw.println("<h1>login is fail失败</h1> 失败");
		}
		pw.close();
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("LoginServlet doPost >>>>");
		doGet(req,resp);
	}
}
login.html代码:
<html>
	<head>
		<title>title</title>
		<!--设置客户端浏览器编码-->
		
		<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
		<link rel="stylesheet" type="text/css" href="css/mystyle.css"></link>
		<script type="text/javascript" src="js/jquery.js"></script>
		<script type="text/javascript" src="js/myscript.js"></script>
	
	</head>
	
	<body>
		<div>
			<div id="main">
				<h2>登录</h2>
				<!--method方法为get 执行LoginServlet中doGet方法  post执行doPost方法-->
				<form action="./loginservlet" method="post" name="loginForm">
					用户名:<input type="text" name="userName"/><br/>
					密 码:<input type="password" name="passWord"/><br/>
					<button>提交</button>
				</form>
			</div>
			</div>
	</body>
</html>




图从左到右:
图1:局部解决get方法乱码问题
图2:解决get方法乱码问题后
图3:post方法未解决乱码
图4:解决post方法请求乱码问题
图5:更改响应乱码前
图6:解决响应乱码后



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
乱码问题在servlet是比较常见的。一般来说,乱码问题的根本原因是编码不一致导致的。解决方法有几种。一种是在servlet页面添加response.setCharacterEncoding("utf-8")来指定编码。另一种是修改数据库连接,使用jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf8来指定编码。另外,在JSP页面,可以使用<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK" %>来指定编码。其,pageEncoding是jsp文件本身的编码,而contentType的charset是指服务器发送给客户端的内容编码。需要注意的是,在jsp编译成.java的第一阶段,会根据pageEncoding的设定将jsp翻译成统一的UTF-8的JAVA源码,如果设定错误或没有设定,就会出现乱码问题。在第二阶段,JAVAC会将JAVA源码编译成java byteCode,不论JSP编写时使用的是什么编码方案,经过这个阶段的结果都会是UTF-8的编码的java源码。因此,要解决servlet乱码问题,需要注意编码的一致性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Servlet乱码原因解析及解决方法](https://blog.csdn.net/cooling11/article/details/123191480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [解决Servlet乱码问题](https://blog.csdn.net/zixiao_love/article/details/102814170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值