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】

  • 相关阅读:
    Exchange这东东…
    下午解决了一个问题
    PDC每日视频
    Delphi.net的IDE和C#Builder是相同的
    开始把准备把Exchange的一些基本操作和设置与SharePoint结合起来
    这两天忙得焦头烂额
    一个在.net下进行用户模拟的类
    SharePoint的相关链接
    今天才知有一个CollectionBase类,惭愧
    【博客堂杯征文】从服务员到程序员
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6714221.html
Copyright © 2011-2022 走看看