web开发中文数据写入到数据库乱码问题

       第一次开发一个小的项目,经验尚浅,每次测试数据库时,都是随便的输入几个英文字符就行了的,看看数据库中是否显示了,便当做完成任务了。可是由于项目的要求,注册时可以使用中文,当测试时,到数据库中查看居然乱码。曾经看传智的老贺讲web时,项目的结尾就是来探讨和学习这个乱码的问题。他提到过滤器的处理方法,可是自己学的不多,只会在在页面中加入字符编码的控制。现在谈谈我的这种麻烦的解决办法,希望对那些和我一样刚入门的菜鸟有些帮助!

1.在你的jsp页面,也就是你打算提交啊数据到servlet的页面头部添加代码<% request.setCharacterEncoding("ISO8859_1");%>,并且将原来的jsp的页面的编码修改gb2123

2.在你所提交的servlet页面设置编码 request.setCharacterEncoding("ISO8859_1");

3.在servlet里面,对需要写入中文到数据库的的代码段下面都加上一行,例如

String xxx= request.getParameter("xxx");
xxx=new String(xxx.getBytes("ISO8859_1"),"gb2312");

4.这样就可以了


附一个servlet代码》》》》》》》

package com.action.student;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dao.StuDao;
import com.dao.UserDao;
import com.test.md5;

public class addStu extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("ISO8859_1");
		//测试: response.sendRedirect("index.jsp");
		/*解决中文插入数据库乱码问题
		 * 将提交的jsp(register.jsp)的<% request.setCharacterEncoding("ISO8859_1");%>
		 * 在servlet中同添加request.setCharacterEncoding("ISO8859_1");
		 * 在得到的中文String后,进行xxx=new String(xxx.getBytes("ISO8859_1"),"gb2312");处理
		 */
		String name = request.getParameter("name");
		name=new String(name.getBytes("ISO8859_1"),"gb2312");
		String num1 = request.getParameter("num1");
		String num2 = request.getParameter("num2");
		//为了区别关键字class-->klass
		String klass = request.getParameter("class");
		String post = request.getParameter("post");
		post=new String(post.getBytes("ISO8859_1"),"gb2312");
		String partynum = request.getParameter("partynum");
		partynum=new String(partynum.getBytes("ISO8859_1"),"gb2312");
 		//测试:System.out.println(partynum);
		String both =  request.getParameter("both");
		String school = request.getParameter("school");
		String graduate = request.getParameter("graduate");
		String dorm = request.getParameter("dorm");
		
		if (num1.equals(num2)) {
			StuDao stu = new StuDao();
			if (stu.findStu(name, num1) != null) {
				// response.sendRedirect("index.jsp");
				System.err.println("用户已存在!");
				request.getRequestDispatcher("adderror.jsp").forward(request,
						response);
			} else {
				md5 md =new md5();
				num1 = md5.string2MD5(num1);
				//測試是否加密成功System.out.println(num1);
				int i = stu.addStu(name, num1,klass,post,partynum,both,school,graduate,dorm);
				if (i < 0) {
					request.getRequestDispatcher("adderror.jsp").forward(
							request, response);
				} else {
					response.sendRedirect("index.jsp");
				}

			}

		} else {

			System.out.println("密码不一致");
			request.getRequestDispatcher("adderror.jsp").forward(request,
					response);
		}

	}

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

	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值