zoukankan      html  css  js  c++  java
  • 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】

  • 相关阅读:
    全端开发必备!10个最好的 Node.js MVC 框架
    action和servlet的关系
    js模块化
    前端类库
    Windows下配置nginx+php(wnmp)
    DllMain的作用
    在linux上实现DllMain + 共享库创建方法
    QT实现Windows下DLL程序编写
    平台相关的宏
    远程线程的注入 PE的修正
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6714221.html
Copyright © 2011-2022 走看看