----------------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. ThinkPHP中Widget的两种写法及调用

    Widget扩展一般用于页面组件的扩展,在页面根据需要输出不同的内容,下面介绍一下ThinkPHP中Widget的两种写法及调用 写法一: ArticlWidget.class.php文件: clas ...

  2. error when start pyspark

    ERROR spark.SparkContext: Error initializing SparkContext.java.lang.IllegalArgumentException: Requir ...

  3. Mysql——JDBC编程 简单的例子

    第一类连接Mysql方法见下图: 第二类连接Mysql方法:(跟第一类差不多,并提供查询操作) 首先在Mysql中建立testjdbc数据库,在该数据库下面建立Student表: 参考代码: CREA ...

  4. ios中文模糊搜索兼容问题

    $(function(){ var cpLock = true; $("input[name='name']").off().on({ compositionstart: func ...

  5. 【leetcode刷题笔记】Anagrams

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...

  6. 常用JQuery设置HTML元素内容

    主要内容: 一.获取内容及属性 二.设置内容及属性 三.添加元素 四.删除元素 五.css()方法 六.寻找祖先及后代 一.获取内容及属性 二.设置内容及属性 相对于获取内容及属性的方式,只需在函数内 ...

  7. linux用户管理与用户组的重要文件

    用户管理的2个重要文件:/etc/passwd和/etc/shadow. /etc/passwd文件里存放的是用户的信息,其中不包含密码:passwd文件中每一行代表一个用户,且每一行分为7个字段使用 ...

  8. jquery详解图片平滑滚动

    jquery详解图片平滑滚动 随便写了个DOM,没有美观性,见谅 原理: 1.定义两组ul列表放图,第一个ul放5张图,第二个ul为空 2.为什么要用两个ul?因为要用到jQuery的克隆方法clon ...

  9. 解决xhost: unable to open display ""

    首先安装vncserver,如图: 切换账户:sudo su到root下 执行:export DISPLAY=:0.0 执行:xhost +,如图:

  10. 解决Eclipse和myeclipse在进行 html,jsp等 页面编辑时,自动格式化变丑的问题

    在eclipse和myelipse写JAVA代码时中使用ctrl+shift+f 快捷键自动排版省时又省力,排版后的代码规范美观又层次性,但在我们写jsp或html代码时,使用这个快捷键排版简直奇丑无 ...