post和get方法
①从安全上来说:post > get
②从数据容量上来说:post > get ,post是无限制的,get最多1024byte
继上篇笔记Servle项目中将表单改用get方法发送请求
(1)数据使用英文发送请求
第一种情况:密码验证正确
客户端请求:
服务端接收:
服务端对客户端的响应:
第二种情况:密码验证失败
客户端请求:
服务端接收:
服务端对客户端的响应:
由于上述过程全都是英文,所以没有出现乱码的情况
(2)数据使用中文发送请求
客户端请求:
服务端接收:
从上图明显可以看到服务端接收到的 ”杰克“ 出现了乱码。
服务端对客户端的响应:
(3)解决方案
使用 ISO-8859-1 编码(ISO-8859-1编码是单字节)来过渡
只需将 login.html中 form 标签的 method属性改为 method=“get”;然后重写的service方法完整代码为:
package com.aiit.servlet_test1;
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 {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求对象支持中文编码
//request.setCharacterEncoding("UTF-8");
String account = request.getParameter("account");
byte[] bytes = account.getBytes("ISO-8859-1");
account = new String(bytes,"UTF-8");
String pwd = request.getParameter("pwd");
System.out.println("account:"+account);
System.out.println("pwd:"+pwd);
//设置response响应的文档类型和编码
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
//假设合法的账号和密码分别是admin和123
//判断登陆用户的合法性
if(account.equals("admin") && pwd.equals("123")) {
//System.out.println("合法用户");
//向客户端响应内容,合法用户
//1.通过response获得指向客户端的打印流(输出流)
pw.println("<h2>合法用户</h2>");
}else {
//System.out.println("非法用户");
//向客户端响应内容,非法用户
pw.println("<font color='red'>非法用户</font>");
}
}
}
测试:
客户端请求:
服务端接收:
服务端对客户端的响应:
综上即可解决 get 方法传递中文数据引起的中文乱码问题。