----------------siwuxie095

Servlet 跳转之请求的转发

修改 LoginServlet.java:

package com.siwuxie095.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

// LoginServlet 继承自 HttpServlet

public class LoginServlet extends HttpServlet {

/**

* 用于序列化和反序列化的 ID

*/

private static final long serialVersionUID = -7740192486028671728L;

//覆盖父类 HttpServlet 的 doGet() 方法

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

System.out.println("===== doGet =====");

//在 doGet() 方法里调用 doPost() 方法

//这样,GET请求和POST请求可以共用一套处理逻辑

doPost(req, resp);

}

//覆盖父类 HttpServlet 的 doPost() 方法

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

System.out.println("===== doPost =====");

String userName=req.getParameter("uname");

String password=req.getParameter("upwd");

System.out.println("用户名:"+userName);

System.out.println("密码:"+password);

String forward=null;

if (userName.equals("siwuxie095")&&password.equals("8888")) {

//请求转发

forward="/success.jsp";

/**

* 定义一个 RequestDispatcher对象

* RequestDispatcher 即请求调度器

* 其对象rd封装了转发的操作,接收来自客户端的请求,然后将其转发到指定的资源上

*

* 通过 req 的 getRequestDispatcher()方法获取一个RequestDispatcher对象

* 其String类型的参数 forward 表示要转发的地址

*/

RequestDispatcher rd=req.getRequestDispatcher(forward);

//使用forward()方法完成转发操作

rd.forward(req, resp);

//请求重定向

//resp.sendRedirect(req.getContextPath()+"/success.jsp");

}else {

//请求转发

forward="/error.jsp";

RequestDispatcher rd=req.getRequestDispatcher(forward);

rd.forward(req, resp);

//请求重定向

//resp.sendRedirect(req.getContextPath()+"/error.jsp");

}

/**

* 请求转发:

* 整个过程只涉及一次浏览器与服务器的交互,即只有一次请求响应,

* 在整个转发过程中,各组件共享同一组请求和响应对象

*

* 注意:转发只能在同一应用的组件间进行,不能转发给其他应用的组件

*

* 而请求重定向 sendRedirect 可以转发给其他应用地址

*/

}

}

访问:localhost:8080/MyServlet/login.jsp,分别输入 siwuxie095 和 8888

转发到:localhost:8080/MyServlet/success.jsp,成功获取 用户名 和 密码

整个过程分析如下:

浏览器的请求首先发送给 LoginServlet

LoginServlet 处理完毕后,将 req 和 resp 对象传递给 success.jsp,

传递的过程称之为 请求转发

整个过程只涉及一次浏览器与服务器的交互,即只有一次请求响应

在整个转发过程中,各组件共享同一组请求和响应对象

注意:转发只能在同一应用的组件间进行,不能转发给其他应用的组件

而请求重定向 sendRedirect() 可以转发给其他应用地址

如:令 forward="https://www.baidu.com/"; ,将会报 HTTP Status 404 错误

说明:请求转发不能转发给其他应用的地址,而请求重定向则可以访问其他应用的地址

【made by siwuxie095】

最新文章

  1. Windows自带压缩解压工具
  2. 3分钟wamp中php安装 pear 然而并没有用 并没能借此安装phpunit 不得不借用了其他的方式安装phpunit
  3. P1311 选择客栈
  4. poj 1260 dp
  5. HDU5889 Barricade(最短路)(网络流)
  6. 【学习笔记】【C语言】函数
  7. Swift3.0 更新后出现比较运算符方法
  8. Windows 系统版本判断
  9. VMWare虚拟机启动报错物理内存不足
  10. linux 下maven安装
  11. TP3.2写上下篇
  12. Django+Nginx+uWSGI部署
  13. api-gateway实践(09)支持rest服务注册
  14. MyBatis之分页插件(PageHelper)工作原理
  15. Python笔记(十七):生成器
  16. Django 中间件 请求前
  17. Java编程基础篇第三章
  18. MySQL_异常
  19. zabbix 客户端安装配置
  20. {python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块

热门文章

  1. jquery链式语法
  2. php输入输出
  3. P4455 [CQOI2018]社交网络(矩阵树定理)
  4. 一看就懂的数据库范式介绍(1NF,2NF,3NF,BC NF,4NF,5NF)
  5. delphi函数返回多个值的应用
  6. EntityFramework 学习 一 创建实体数据模型 Create Entity Data Model
  7. 使用 sqoop 将mysql数据导入到hive表(import)
  8. Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用
  9. 如何让DIV可编辑、可拖动
  10. 7 Python 数据类型—列表