Servlet请求与响应
请求与响应
1. 请求:客户端向服务器
代表了客户端向服务器发送请求报文,该对象由服务器(web容器,servlet容器)创建同时发送给service()方法,发送给service(),service()再发送给doGet()或doPost()
作用:
-
获取请求参数
String username = req.getParameter("username");
-
获取项目的虚拟路径
String contextPath = req.getContextPath();
-
转发
- 第一步:获取调度器
- 第二步:将请求对象和响应对象传入调度器进行转发。
RequestDispatcher dispatcher = req.getRequestDispatcher("loginSuccess.html"); dispatcher.forward(req,resp);
-
域对象
类型:HttpServletRequest
2. 响应:服务器向客户端
代表了服务器向客户端发送响应报文,该对象由服务器(web容器,servlet容器)创建同时发送给service()方法,发送给service(),service()再发送给doGet()或doPost()
作用:
-
服务器向客户端做出响应(文本,html)
resp.getWriter().write("lalalla");
-
重定向
resp.sendRedirect("index.html");
类型:HttpServletResponse
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//实现登录功能
/**
* 1. 获取用户名密码
* 2. 判断用户名密码是否正确
* 3. 跳转
*/
String username = req.getParameter("username");//通过请求对象获取请求参数
String pwd = req.getParameter("pwd");
if("admin".equals(username)&&"admin2".equals(pwd)){
//登录成功跳转,转发
RequestDispatcher dispatcher = req.getRequestDispatcher("loginSuccess.html");
dispatcher.forward(req,resp);
}else{
//登录失败调转,重定向
resp.sendRedirect("index.html");
}
}
3. 转发和重定向
区别:
- 客户端只发送一次请求,重定向客户端发送两次请求
- 转发可以访问WEB-INF下的资源,而重定向不可以。WEB-INF属于服务器私有目录,客户端不能直接访问。
- 转发可以携带request对象,重定向不能。
1. 请求的转发
Servlet在接收到客户端的请求后,先进行一定的处理,不进行响应。而是在服务器内部“转发”给其他servlet继续处理。在这种情况下,客户端只发送了一次请求,浏览器地址栏不会发生变化,用户也感知不到请求发生了转发。全程在服务器内部处理。
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//1.使用RequestDispatcher对象封装目标资源的虚拟路径
RequestDispatcher dispatcher = request
.getRequestDispatcher("/index.html");
//2.调用RequestDispatcher对象的forward()方法“前往”目标资源
//[注意:传入的参数必须是传递给当前Servlet的service方法的
//那两个ServletRequest和ServletResponse对象]
dispatcher.forward(request, response);
}
2. 请求的重定向
Servlet在接收到客户端的请求后,给客户端一个特殊的响应,要求浏览器去请求一个新的资源。在这个过程种浏览器会发出两次请求,浏览器地址栏会发生变化。
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//1.调用HttpServletResponse对象的sendRedirect()方法
//2.传入的参数是目标资源的虚拟路径
response.sendRedirect("index.html");