----------------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. Kattis - flippingcards 【并查集】

    题意 给出 N 对 数字 然后 每次从一对中 取出一个数字 判断 能否有一种取出的方案 取出的每个数字 都是不同的 思路 将每一对数字 连上一条边 然后 最后 判断每一个连通块里面 边的个数 是否 大 ...

  2. Data Structure Linked List: Function to check if a singly linked list is palindrome

    http://www.geeksforgeeks.org/function-to-check-if-a-singly-linked-list-is-palindrome/ 这里的reverse可以re ...

  3. JavaScript 从对象 new 说起,简单理解 this/call/apply

    new  创建一个新对象: 将构造函数的作用域赋给新对象(因此this就指向了这个新对象): 执行构造函数中的代码(为这个新对象添加属性): 返回新对象 用代码描述的话(先别管proyotype, a ...

  4. 【leetcode刷题笔记】Convert Sorted List to Binary Search Tree

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  5. php使用mysql数据库时中文不显示或显示异常解决方法

    如果出现标题所述问题,需从四个层面解决问题 1 项目文件是否为utf8编码 右键项目文件->properties->Resource->Text file encoding-> ...

  6. 高通8X16电池BMS算法(二)【转】

    本文转载自:http://www.voidcn.com/blog/yanleizhouqing/article/p-6051912.html 上一篇主要讲电池相关的一些知识,上节忘记讲了,电池一般分为 ...

  7. MongoDB分片搭建

    环境 $ cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) $ uname -a Linux zhaopin-2-201 3.1 ...

  8. wampserver2 配置ssl 经过验证 可用

    本文原地址 http://blog.csdn.net/taosst/article/details/2182966 http://forum.wampserver.com/read.php?2,329 ...

  9. c版基于链表的插入排序(改进版)

    1. [代码][C/C++]代码 /** * @todo    c版基于链表的插入排序 * @author  Koma **/#include<stdio.h>#include<st ...

  10. 十六 Django框架,信号

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 也就是当程序有指定动作时,触发一个信号函数 1.Django内置信 ...