1.Request对象:
在Servlet中用来处理客户端请求需要用doGet或doPost方法的request对象
2.get和post请求区别:
get请求
get提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连
get方式明文传递,数据量小,不安全
效率高,浏览器默认请求方式为GET请求
对应的Servlet的方法是doGet
post请求
post方法是把提交的数据放在HTTP包的Body中
密文传递数据,数据量大,安全
效率相对没有GET高
对应的Servlet的方法是doPost
3.Request主要方法:
4.Request乱码:
乱码原因
产生乱码是因为服务器和客户端沟通的编码不一致造成的,因此解决的办法是:在客户端和服务器之间设置一个统一的编码,之后就按照此编码进行数据的传输和接收
get乱码解决办法
在Tomcat7及以下版本,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。
解决办法∶在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
Tomcat8的版本中get方式不会出现乱码了,因为服务器对url的编码格式可以进行自动转换。
- post乱码解决办法
- 由于客户端是以UTF-8字符编码将表单数据传输到服务器端的,因此服务器也需要设置以UTF-8字符编码进行接收。
- 解决方案:使用从ServletRequest接口继承而来的setCharacterEncoding(charset)方法进行统一的编码设置。
5.示例代码1:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(value = "/rs")
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取用户请求发送数据
String username=req.getParameter("username");
String password=req.getParameter("password");
System.out.println("提价的数据:"+username+"\t"+password);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.对request设置统一编码(解决乱码)
req.setCharacterEncoding("utf-8");
//2.获取用户请求发送数据
String username=req.getParameter("username");
String password=req.getParameter("password");
//3.响应数据给客户端
//--1.解决乱码问题 方式一
// resp.setCharacterEncoding("utf-8"); //设置服务器端的编码格式
// resp.setHeader("Content-Type","text/html;charset=utf-8"); //设置响应头(设置浏览器以utf-8解析)
//--2.接解决乱码问题 方式二
//一定在获得字符输出流之前获得
resp.setContentType("text/html;charset=utf-8");
PrintWriter printWriter=resp.getWriter();
printWriter.println("注册成功!!!");
}
}
5.示例代码2:
@WebServlet(value = "/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决两中请求方式乱码问题
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=UTF-8");
//1.收参
String username=req.getParameter("username");
String password=req.getParameter("password");
//2.调用业务逻辑层
AdminService adminService=new AdminServiceImpl();
Admin admin=adminService.login(username,password);
//3.处理结果
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
原文链接:点此查看