JavaWeb——post和get方法

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 方法传递中文数据引起的中文乱码问题。

猜你喜欢

转载自blog.csdn.net/lucky_shi/article/details/105436735