java ---servlet解决中文乱码的几种办法

来源:互联网 发布:js 动画效果百叶窗 编辑:程序博客网 时间:2024/04/29 20:13
<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" 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_3_0.xsd">  <display-name></display-name>    <servlet>    <servlet-name>login</servlet-name>    <servlet-class>cn.hncu.servlets.LoginServlet</servlet-class>    <init-param>       <param-name>character</param-name>       <param-value>utf-8</param-value>    </init-param>  </servlet>    <servlet-mapping>     <servlet-name>login</servlet-name><pre name="code" class="java">package cn.hncu.servlets;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class LoginServlet implements Servlet {@Overridepublic void destroy() {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic String getServletInfo() {return null;}private String charset = null;@Overridepublic void init(ServletConfig config) throws ServletException {charset = config.getInitParameter("character");}@Overridepublic void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {//解决中文乱码://※前提:前台页面必须以post方式提交中文 ---因为post会设置http协议头“Content-Type = application/x-www-form-urlencoded”,这样Tomcat才知道这是编码的字符数据// 法1: 在Tomcat的server.xml中的<Connect>中添加一个属性:URIEncoding="utf-8"//法1是不可取的,因为Tomcat是公共平台,你只是其中的一个项目,不能把平台看成私有的即最好不要去修改,否则其它项目可能会出问题。//※注意:法2 和 法4 的设置必须在读取参数[ req.getParameter("..") ]之前设置,否则不行//法2:这种解决方式是比较好的,但有一个缺点:如果以后要改编码,就得改源代码,对客户来说比较麻烦。对程序员也一样//req.setCharacterEncoding("utf-8");//法4:其实是在web.xml中把编码设置成参数,然后在这里读取出来,利用“法2”进行设置。以后如果要更改编码,只要更改web.xml中的相应参数设置就OK了req.setCharacterEncoding(charset);String name = req.getParameter("name");System.out.println(name);System.out.println("okokokok....");//法3:把Tomcat解错的码还原回来----还行,但如果前台传输的很多参数都是中文,那么我们对每个参数都要这样还原,显然比较麻烦!//byte bs[] = name.getBytes("iso8859-1");//name = new String(bs,"utf-8");//System.out.println(name);String pwd = req.getParameter("pwd");//用name和pwd到后台去访问数据库,以验证该用户信息是否正确(登录成功)//本例这些步骤省略了res.setContentType("text/html;charset=utf-8");//告诉浏览器,我下面发的内容是什么格式的东西String html ="<html><body><font color='red'>name:</font>"+name+"<br/><font color='red'>pwd:</font>"+pwd+"</body></html>";PrintWriter out = res.getWriter();out.print(html);//Tomcat项目运行时,加载jar包或类文件的顺序:TOMCAT_HOME\lib  --> webapps\项目名\WEB-INF\lib  --> webapps\项目名\WEB-INF\classes目录下面的类//后加载的会覆盖前面的---即后加载有效}}<pre name="code" class="html"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>演示servlet技术</title>  </head>    <body>      <h2>以下演示用户登录解决乱码问题</h2>      <!-- 要向服务器传中文,前提是用post方式 -->      <form action="/servletDemo/login" method="post">                  姓名:<input type="text" name="name"><br/>                  密码:<input type="password" name="pwd"><br/>        <input type="submit" value="登录">      </form>        </body>  </html>

<url-pattern>/login</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>

                                             
0 0
原创粉丝点击