java--表单提交中文乱码

主页index.xml

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<html>
  <head>

    <title>servlet演示</title>
  </head>

  <body>
     <h2>中文乱码</h2>
     <!-- /servletDemo_1/encode最好用绝对目录,因为index.jsp位置可能会更改 -->
     <form action="/servletDemo_1/encode" method="post">
        姓名:<input type="text" name="name"/><br/>    
        密码:<input type="password" name="pwd"/> <br/>      
        <input type="submit" value="登陆"/>  
    </form>
  </body>
</html>

ServletEncoding.java

package cn.hncu.servlet_2;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class ServletEncoding implements Servlet {

    private String charSet=null;
    @Override
    public void destroy() {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        charSet=config.getInitParameter("char");
        System.out.println("编码:"+charSet);

    }

    /*
     * 解决中文乱码
     * 1)更改tomcat平台中字符编码(server.xml-connector的属性)
     *  而tomcat是所有项目的公共平台,所以不要该,尽量不改
     * 2)反查ISO8859-1编码:通过String中的乱码解决方式
     * 3)获取参数之前设置:req.setCharacterEncoding("utf-8");
     *  注意:此种方式必须要是POST方式提交,否则不行
     * 4)获取参数之前设置:通过在web.xml中设置字符参数方式把3)做活
     * 5)用过滤器把3)做活--以后实现
     */
    @Override
    public void service(ServletRequest req, ServletResponse resp)
            throws ServletException, IOException {
//      //3)获取参数之前设置
//      req.setCharacterEncoding("utf-8");

        //4)获取参数之前设置:通过在web.xml中设置字符参数方式把3)做活
        req.setCharacterEncoding(charSet);

        //读取信息处理中文乱码
        String name=req.getParameter("name");
        String pwd=req.getParameter("pwd");
        System.out.println("name:"+name+",pwd:"+pwd);


//      System.out.println("编码前-name:"+name+",pwd:"+pwd);
//      //2)反查ISO8859-1编码:通过String中的乱码解决方式
//      byte bs[]=name.getBytes("iso-8859-1");
//      name=new String(bs,"utf-8");
//      byte bs2[]=pwd.getBytes("iso-8859-1");
//      pwd=new String(bs2,"utf-8");
//      System.out.println("编码后-name:"+name+",pwd:"+pwd);
//      //注:这种方式对于参数很多时,就不合适使用了




        resp.setContentType("text/html;charset=utf-8");//设置协议:IE没问题,但是有的浏览器不兼容
        //向客户端应答
        String str="<html><head><title></title></head><body><font color='red'>name:"
                +name+",pwd:"+pwd+"</font></body></head>";
        resp.getWriter().println(str);//println()带刷缓存
    }

}

配置文件web.xml

<?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>encode</servlet-name>
    <servlet-class>cn.hncu.servlet_2.ServletEncoding</servlet-class>
    <init-param>
        <param-name>char</param-name>
        <param-value>utf-8</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>encode</servlet-name>
    <url-pattern>/encode</url-pattern>  
  </servlet-mapping>



  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值