Servlet编程实例 续3
----------------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】
最新文章
- Windows自带压缩解压工具
- 3分钟wamp中php安装 pear 然而并没有用 并没能借此安装phpunit 不得不借用了其他的方式安装phpunit
- P1311 选择客栈
- poj 1260 dp
- HDU5889 Barricade(最短路)(网络流)
- 【学习笔记】【C语言】函数
- Swift3.0 更新后出现比较运算符方法
- Windows 系统版本判断
- VMWare虚拟机启动报错物理内存不足
- linux 下maven安装
- TP3.2写上下篇
- Django+Nginx+uWSGI部署
- api-gateway实践(09)支持rest服务注册
- MyBatis之分页插件(PageHelper)工作原理
- Python笔记(十七):生成器
- Django 中间件 请求前
- Java编程基础篇第三章
- MySQL_异常
- zabbix 客户端安装配置
- {python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块
热门文章
- jquery链式语法
- php输入输出
- P4455 [CQOI2018]社交网络(矩阵树定理)
- 一看就懂的数据库范式介绍(1NF,2NF,3NF,BC NF,4NF,5NF)
- delphi函数返回多个值的应用
- EntityFramework 学习 一 创建实体数据模型 Create Entity Data Model
- 使用 sqoop 将mysql数据导入到hive表(import)
- Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用
- 如何让DIV可编辑、可拖动
- 7 Python 数据类型—列表