Servlet的学习(二)——请求方式(get/post)、处理中文乱码

一、Servlet获取请求数据

要获取请求数据,使用request.getParameter()

代码展示:

 <body>
    <form action="servlet/SubmitTest">
    	请输入用户名:<input type="text" name="username">
    	请输入密码:&nbsp;<input type="password" name="password">
    	<input type="submit" value="提交">
    </form>
  </body>
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 SubmitTest extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String name = request.getParameter("username");
		String pass = request.getParameter("password");
		System.out.println("用户名:" + name + ",密码:" + pass);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doGet(request, response);
	}

}

当在页面提交后,即可在控制台打印输出用户名和密码。

二、请求方式(get/post)

get和post请求是在页面表单以何种方式提交,也就是设置method是get还是post,默认是get方式。

下面来说说两种方式的区别:

GET请求:

①参数传递方式:GET请求在浏览器地址栏传参数,以?分割URL和传输数据,参数之间以&相连

②数据量限制:GET提交的数据大小有限制(因为浏览器对URL的长度有限制)

③安全问题:GET方式提交数据,会带来安全问题(地址栏显示出来)

④乱码处理方式:GET方式请求处理乱码每个参数都要处理

⑤GET方式效率高

使用场合:传递少量的非敏感的参数

比如使用链接的方式,即<a href=""></a>

GET请求对应的Servlet的方法是doGet()

POST请求:

①参数传递方式:POST方法是把提交的数据放在HTTP包的Body中(地址栏看不到)

②数据量限制:POST方法提交的数据没有限制 (文件上传必须是POST)

③安全问题:POST提交的数据相对安全

④乱码处理方式:统一处理所有

⑤效率相对没有GET高

post对应的Servlet的方法是doPost

三、处理中文乱码

首先,我们需要明白为什么会产生中文乱码,产生中文乱码的原因无非就是服务器和客户端沟通的编码不一致,解决的办法就是在客户端和服务器之间设置一个统一的编码。

①接收参数乱码:

ⅠGET中文乱码

在Tomcat7及以下

客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。

比如接收到name:

String name=request.getParameter("name");

name=new String(name.getBytes("ISO8859-1"),"UTF-8");

GET乱码需要对每个参数都进行乱码处理

ⅡPOST中文乱码

由于客户端是以UTF-8字符编码将表单数据传输到服务器端的,因此服务器也需要设置以UTF-8字符编码进行接收,要想完成此操作,服务器可以直接使用从ServletRequest接口继承而来的"setCharacterEncoding(charset)"方法进行统一的编码设置。

request.setCharacterEncoding("utf-8")

②响应乱码

浏览器识别不到返回的中文是什么编码格式,就会默认使用GB2312,如果返回的是UTF-8格式的那么在浏览器上就会显示乱码的问题。

解决办法:response.setContentType("text/html;charset=UTF-8")

 

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/82758994