----------------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】

Servlet编程实例 续3的更多相关文章

  1. Servlet编程实例 续4

    ---------------siwuxie095 JSP+Servlet+JDBC 继续完善登录实例,将校验逻辑改为:从数据库中获取用户信息进行校验 数据库准备 在 Navicat for MySQ ...

  2. Servlet编程实例 续2

    -----------------siwuxie095 Servlet 跳转之请求的重定向 继续完善登录实例,如下: login.jsp 不变,修改 LoginServlet,新建两个 JSP 文件 ...

  3. Servlet编程实例 续1

    -----------------siwuxie095                                 在 LoginServlet 中,右键->Open Type Hierar ...

  4. Servlet编程实例1

    编程目的:使用JSP+servlet,来实现一个登陆页面,登陆成功则提示成功,登陆失败则提示失败. 编程要求:登陆页面由login.jsp负责显示,登陆成功由success.jsp负责显示,登陆失败由 ...

  5. Servlet编程实例

    ---------------siwuxie095 登录实例: 从 login.jsp 提交登录信息到 LoginServlet,在 LoginServlet 中打印登录信息 工程结构目录如下: Lo ...

  6. Servlet编程实例2

    上次实验中利用HttpServletRespon.sendRedict()方法来实现页面的转跳,而这种重定向请求的方法无法传递缓存的内容. 所以为了做出改进,这次使用RequestDispatcher ...

  7. Servlet编程实例-servlet学习之旅(三)

    LoginServlet代码: public class LoginServlet extends HttpServlet{ @Override protected void service(Http ...

  8. Servlet编程

    Servlet编程 1. servlet概念及相关接口简介 java Servlet是运行在web服务器或应用服务器上的程序,他是作为来自web浏览器或其他HTTP客户端的请求和HTTP服务器山的数据 ...

  9. Servlet编程-步步为营

    [环境]eclipse j2ee;Tomcat 7.0; [模型1] package com.zhiqi; import ...; public class TestServlet extends H ...

随机推荐

  1. 【leetcode刷题笔记】Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. For example:Given binary tr ...

  2. new的越界访问

    今天敲代码的时候发现了一个BUG和大家分享一下,希望大家下次不要犯和我一样的错误. 如果犯了和我一样的错,也能知道自己错在哪里!   <(^-^)> 函数如下:(斐波那契数列的实现) lo ...

  3. Android进程间通信(IPC)机制Binder简要介绍和学习计划【转】

    本文转载自:http://blog.csdn.net/luoshengyang/article/details/6618363 在Android系统中,每一个应用程序都是由一些Activity和Ser ...

  4. 对unidbgrid的单元格操作

    一.使某行某列单元格disabled: 1. UniStringGrid -> Options -> goEditing = true 2. UniStringGrid -> Ext ...

  5. Java -- AWT 菜单建立, Menu, 右键菜单

    1. Menu类结构 2. 菜单示例:  MenuBar容器中可以装Menu,Menu容器中可以装MenuItem. public class SimpleMenu { Frame f = new F ...

  6. Mysql备份和还原(命令)

    1.备份方法一 ①.进入数据库 mysql -uroot -p pwd; ②.查看数据库 show databases; ③.备份数据库 mysqldump -hlocalhost -uroot(用户 ...

  7. jQuery 对表单、表格的操作及更多应用-简略笔记

    [jQuery 对表单.表格的操作及更多应用] jquery对表单及表格的操作是实际应用中相当广泛. 对于表单的操作,可以实现 (1)获取和失去焦点改变样式: (2)在多行文本框中可以实现网站评论框的 ...

  8. Linux 基本命令总结

    0.平时自己用的命令 在跑一些程序,例如deep learning的时候,总是希望查看一下cpu.gpu.内存的使用率. (1)cpu.内存情况:使用top命令: (2)查看gpu:使用 nvidia ...

  9. python-Django收集主机信息

    1.创建工程simplecmdb django-admin.py startproject simplecmdb 2.创建应用 cd simplecmdb python manage.py start ...

  10. 如何定义一个接口(接口Interface只在COM组件中定义了,MFC和C++都没有接口的概念)

    接口是COM中的关键词,在c++中并没有这个概念.接口是一种极度的抽象.接口用在COM组件中有自己的GUID值,因此定义接口时一定要指定它的GUID值. 实际上接口就是struct,即#define ...