持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
目录
一、前言
上一篇文章我们讲了 servlet 的一些知识点,详见博文:原创 java服务器端开发-servlet:2、Servlet执行过程介绍:常见错误及解决方式、响应数据包、get请求与post请求、编码相关等,既然讲了一些知识点,这篇我们就来演示一个案例:表单提交中文参数_get/post解决编码问题
二、表单post提交中文参数,乱码问题
1、实例代码
这里怎么建立 web 工程项目、包名等就不多说了,你可以参考我的这篇博文
java服务器开发-servlet:1_2、如何开发一个servlet,实战写一个servlet
编辑
(1)java代码:HelloServlet.java
package t01_表单提交中文参数_解决编码问题;
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;
/**
* 表单提交中文参数_解决编码问题
* @UpdateTime:2011年02月28日 下午17:30:00
* @ProjectName: web02
* @ClassName:HelloServlet
* @CategoryName:java类
* @author:luminal、邮箱 luminal_yyh@163.com
* @since 1.0
* @Description:(可以在这里描述这个类的作用)
* 步骤:
* 1、地址见:web.xml
*/
public class HelloServlet extends HttpServlet{
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置post提交方式编码
//让服务器按照指定的编码格式进行解码。
//必须要放在getParameter方法之前执行。
//只对post提交方式有效,一般表单使用post提交方式
//request.setCharacterEncoding("utf-8");
//step1:读请求参数
//使用request对象,依据请求参数名,获取请求参数值
//似key-value。参数名即key,参数值即value
String name = request.getParameter("name");
System.out.println("name:" + name);
//设置get提交方式编码
//这种方式对get和post提交方式,都有效
//如:(1)表单get提交方式、
//(2)get提交方式,直接url地址请求参数中含中文
//注意:tomact8.x 默认编码为UTF-8,get提交方式使用此行代码反而会乱码
//name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
//step2:处理请求,用于输出
String msg = "<h1>hello,我是:"+name+"</h1>";
//step3:输出处理结果
//通过response,设置一个消息头(content-type),告诉
//浏览器,服务器返回的数据类型和编码格式
//此外,也设置了out.println()在输出时,使用的编码格式.
//注释这句:浏览器将不能识别中文,
//即上面的字符串msg的中文符号和汉字,将不能被识别
response.setContentType("text/html;charset=utf-8");//设置【服务器编码和浏览器网页编码】
//保存在PrintWriter对象里面
PrintWriter out = response.getWriter();
//将处理结果数据缓存到response对象上
//-->处理结果,打包发送给浏览器
//-->浏览器拆包,生成页面【详见Servlet执行过程介绍】
out.println(msg);
//关闭流
out.close();
}
}
(2)配置 web.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>web02</display-name>
<servlet>
<servlet-name>web02</servlet-name>
<servlet-class>t01_表单提交中文参数_解决编码问题.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>web02</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
(3)post 提交方式的表单
greeting_post.html
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body style="font-size:30px; font-style:italic;">
<form action="hello" method="post">
<fieldset>
<legend>个人信息post</legend>
姓名:<input name="name" /><br /> 年龄:<input name="age" /><br /> 城市:
北京<input type="checkbox" name="city" value="bj" checked="checked" />
上海<input type="checkbox" name="city" value="sh" /> 武汉<input
type="checkbox" name="city" value="wh" /><br /> <input
type="submit" value="提交" />
</fieldset>
</form>
</body>
</html>
2、post提交方式,效果演示
启动 tomact 容器、部署 web 项目。这两步不会的你可以参考我的这篇博文
java服务器开发-servlet:1_2、如何开发一个servlet,实战写一个servlet
如果部署不对,可能会报错 404:
编辑
如果部署成功,在谷歌浏览器输入地址:http://localhost:8080/web02/greeting_post.html
编辑
点击提交,如下图,出现了乱码
编辑
***解决方式
我们把 HelloServlet.java 这句代码的注释打开
//设置post提交方式编码
//让服务器按照指定的编码格式进行解码。
//必须要放在getParameter方法之前执行。
//只对post提交方式有效,一般表单使用post提交方式
//request.setCharacterEncoding("utf-8");
重新部署 web 项目、输入地址、填写信息,效果如下: