how2j.cn

示例 1 : 获取中文的参数   
示例 2 : 返回中文的响应   

示例 1 :

获取中文的参数

为了成功获取中文参数,需要做如下操作
1. login.html中加上

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

这句话的目的是告诉浏览器,等下发消息给服务器的时候,使用UTF-8编码

2. login.html
form的method修改为post

3. 在servlet进行解码和编码

byte[] bytes= name.getBytes("ISO-8859-1");
name = new String(bytes,"UTF-8");

先根据ISO-8859-1解码,然后用UTF-8编码
这样就可以得到正确的中文参数了

这样需要对每一个提交的数据都进行编码和解码处理,如果觉得麻烦,也可以使用一句话代替:

request.setCharacterEncoding("UTF-8");

并且把这句话放在request.getParameter()之前

以上是使用UTF-8的方式获取中文呢。 也可以使用GBK。把所有的UTF-8替换为GBK即可。 GB2312同理。
获取中文的参数
<!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <form action="login" method="post"> 账号 : <input type="text" name="name"> <br> 密码: <input type="password" name="password"> <br> <input type="submit" value="登录"> </form>
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); // byte[] bytes = name.getBytes("ISO-8859-1"); // name = new String(bytes, "UTF-8"); String password = request.getParameter("password"); System.out.println("name:" + name); } }
示例 2 :

返回中文的响应

在Servlet中,加上

response.setContentType("text/html; charset=UTF-8");
返回中文的响应
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 { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String password = request.getParameter("password"); String html = null; if ("admin".equals(name) && "123".equals(password)) html = "<div style='color:green'>登录成功</div>"; else html = "<div style='color:red'>登录失败</div>"; response.setContentType("text/html; charset=UTF-8"); PrintWriter pw = response.getWriter(); pw.println(html); } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-05-08 xml响应显示中文问题
风起叶沙沙



大佬请问一下,xml返回的响应咋设置中文啊。我html可以正常显示
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

public class HelloServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    {
        try
        {
            response.setContentType("text/xml; charset=UTF-8");
            response.getWriter().println("<h1>你好世界Hello world</h1>");
            response.getWriter().println(new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date()));
        }catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-03-18 为什么将GET改为POST呢???
TuoAiTang
为什么将GET改为POST呢???




1 个答案

542560 答案时间:2018-04-30
get会在浏览页地址上显示你输入的信息




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-08-22 getBytes方法不是用来得到编码的字节数组吗?
2017-08-09 控制台显示乱码
2017-06-24 servlet解码的问题
2016-10-17




提问之前请登陆
关于 J2EE-Servlet-中文问题 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 620943819
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图