精华内容
下载资源
问答
  • servlet请求转发

    2021-03-04 21:07:20
    servlet请求转发 在servlet中设置请求转发 request.getRequestDispatcher("XXXX").forward(request, response); servlet请求转发的特点 客户端只发送一次请求 浏览器的地址栏地址没有变化 请求过程中只有一个...

    servlet请求转发

    • 在servlet中设置请求转发
      • request.getRequestDispatcher("XXXX").forward(request, response);
    • servlet请求转发的特点
      • 客户端只发送一次请求
      • 浏览器的地址栏地址没有变化
      • 请求过程中只有一个request和response对象
      • 几个servlet共享一个request和response对象
      • 对客户端透明,客户端不需要知道服务端进行了哪些操作
    • servlet请求转发示意图
      在这里插入图片描述
    展开全文
  • Servlet请求转发

    2020-08-16 14:22:38
    请求转发 一次请求Servlet对应的request对象,在此request中存储数据,可以在此request对象中取出;但是在另一次请求Servlet对应的request对象,是没有第一次请求时在request对象中添加的数据的 要解决这个不同请求...

    请求转发

    一次请求Servlet对应的request对象,在此request中存储数据,可以在此request对象中取出;但是在另一次请求Servlet对应的request对象,是没有第一次请求时在request对象中添加的数据的

    要解决这个不同请求对应的不同request对象之间传递,需要使用请求转发技术

    步骤

    1. 获取请求转发器对象
    2. 调用请求转发器的forward()方法即可完成转发
    /*
        /a路径对应AServlet,/b路径对应BServlet,
    
        通过request对象的getRequestDispatcher方法获取请求转发器对象,
        然后调用请求转发器对象的forward方法进行转发
        
        以下代码是从AServlet转发到BServlet
    */
    
    //获取请求转发器,以下转发器指向了BServlet
    RequestDispatcher requestDispatcher = request.getRequestDispatcher("/b");
    //调用请求转发器的forward()
    requestDispatcher.forward(request,response);
    

    实例

    第一次请求AServlet,在AServlet中的request对象中存储数据后,通过请求转发,转发到BServlet,BServlet对应的request对象中包含了AServlet对应的request对象的数据,数据被传递了,实现了跨请求(跨Servlet)传递数据

    /*AServlet*/
    public class AServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
            
            User admin = new User(111, "admin");
            request.setAttribute("user",admin);         //向request范围中存数据
            //转发
            request.getRequestDispatcher("/b").forward(request,response);
        }
    }
    
    
    /*BServlet*/
    public class BServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
    
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter writer = response.getWriter();
            Object user = request.getAttribute("user"); //从request范围中取数据
            writer.print(user);
        }
    }
    

    转发过程

    以上述实例为例

    1. 浏览器向AServlet发出访问请求;
    2. AServlet调用forward()方法,在服务器端将请求转发给BServlet;
    3. 最终由BServlet做出响应

    特点

    在浏览器端进行一次请求,服务器端将请求从一个Servlet转发给另一个Servlet…,浏览器端的地址不变,但是实际上可能后台是好几个Servlet依次处理浏览器的请求,并相应给浏览器

    在这里插入图片描述

    关于范围对象的选择

    ServletContext 应用范围极大,可以跨用户传递数据,整个webapp只有一个ServletContext对象

    ServletRequest请求范围小,只能在同一个请求中传递数据【跨Servlet传递数据,需要使用请求转发技术】

    优先选择使用ServletRequest传递数据

    总结

    请求转发可以跨Servlet(跨请求)传递数据,一次请求对应的Servlet中的request对象的数据,可以传递给请求转发的另一个Servlet的request对象

    请求转发,是一次请求

    展开全文
  • 使用Servlet请求转发与包含RequestDispatcher接口提供了将请求转发到另一个资源的功能,该资源可能是Html,Servlet或Jsp。该接口还可以用于包含其他资源的内容。1 RequestDispatcher接口的方法RequestDispatcher接口...

    使用Servlet请求转发与包含

    RequestDispatcher接口提供了将请求转发到另一个资源的功能,该资源可能是Html,Servlet或Jsp。该接口还可以用于包含其他资源的内容。

    1 RequestDispatcher接口的方法

    RequestDispatcher接口提供两种方法。他们是:

    public void forward(ServletRequest request,ServletResponse response)thorws ServletException,java.io.IOException:将请求从Servlet转发到服务器上的另一个资源(Servlet,JSP文件或HTML文件)。

    public void include(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException:在响应中包含资源(servlet,JSP页面或HTML文件)的内容。

    ffae8a211e8db4b76e5d5c53c558cac8.png

    如上图所示,第二个Servlet的响应被发送到客户端。第一个Servlet的响应不会显示给用户。

    0745714f3ad31d792155ec2502313c72.png

    如上图所示,第二个Servlet的响应包含在第一个Servlet的响应中,最终才发送回用户。

    2 获取RequestDispatcher的对象

    ServletRequest接口的getRequestDispatcher()方法返回RequestDispatcher的对象。语法是:

    public RequestDispatcher getRequestDispatcher(String resource);

    getRequestDispatcher方法示例:

    RequestDispatcher rd=request.getRequestDispatcher("servlet2");

    //servlet2是第二个Servlet的url-pattern

    rd.forward(request, response);//这里可以是forward或者include方法

    3 RequestDispatcher的案例

    3.1 案例涉及元素及流程说明

    在本案例中,我们需要验证用户输入的密码。如果密码是yiidian,将转发请求到WelcomeServlet,否则将显示错误消息:“抱歉,用户名或密码错误!”本案例,我们的用户名和密码都是采用硬编码方式,当然您也可以将其改为从数据库中查询,可以参考后面的开发案例《使用Servlet完成用户登录》。以下文件是本案例需要的文件:

    index.jsp文件:用于从用户获取输入。

    LoginServlet.java文件:用于处理响应的Servlet类。如果用户输入了正确的密码,它将把请求转发到WelcomeServlet。

    WelcomeServlet.java文件:用于显示欢迎消息的Servlet类。

    web.xml文件:Web部署描述符文件,其中包含所有Servlet的配置信息。

    42c2a13fa032e16ecdb2c33a25aae1d3.png

    3.2 编写inde.jsp页面

    一点教程网-请求转发与包含

    用户名:

    密码:

    3.3 编写LoginServlet

    import javax.servlet.RequestDispatcher;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import java.io.IOException;

    import java.io.PrintWriter;

    /**

    * 一点教程网 - http://www.yiidian.com

    * 验证密码是否正确

    */

    public class LoginServlet extends HttpServlet{

    public void doPost(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    response.setContentType("text/html;charset=utf-8");

    PrintWriter out = response.getWriter();

    String n=request.getParameter("userName");

    String p=request.getParameter("userPass");

    if(p.equals("yiidian")){

    RequestDispatcher rd=request.getRequestDispatcher("servlet2");

    rd.forward(request, response);

    }else{

    out.print("抱歉,用户名或密码错误!");

    RequestDispatcher rd=request.getRequestDispatcher("/index.jsp");

    rd.include(request, response);

    }

    }

    }

    3.4 编写WelcomeServlet

    import javax.servlet.RequestDispatcher;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import java.io.IOException;

    import java.io.PrintWriter;

    /**

    * 一点教程网 - http://www.yiidian.com

    * 欢迎页面

    */

    public class WelcomeServlet extends HttpServlet{

    public void doPost(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    response.setContentType("text/html;charset=utf-8");

    PrintWriter out = response.getWriter();

    String n=request.getParameter("userName");

    out.print("欢迎你,"+n);

    }

    }

    3.5 配置web.xml

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

    version="3.1">

    Login

    LoginServlet

    WelcomeServlet

    WelcomeServlet

    Login

    /servlet1

    WelcomeServlet

    /servlet2

    3.6 运行测试

    24a4a4aa4ea4c78a95b6157496ac57ab.png

    输入yiidian密码,正确的情况

    7b34d8f1784312794fb433c08857050d.png

    输入错误密码的情况

    57aebcf70bea1a7662a72600d82db8de.png

    展开全文
  • Servlet请求转发 RequestDispatcher接口 收藏在Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应。一,RequestDispatcher接口方法简介1,...

    Servlet请求转发 RequestDispatcher接口 收藏

    在Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应。

    一,RequestDispatcher接口方法简介

    1,RequestDispatcher对象由Servlet容器来创建,封装一个由路径所标识的服务器资源。

    2,RequestDispatcher接口中定义了二种方法用于请求转发:

    forward(ServletRequest,ServletResponse)方法:

    将请求转发给服务器上另外一个Servlet,JSP页面,或者HTML文件      这个方法必须在响应被提交给客户端之前调用,否则抛出异常。

    方法调用后在响应中的没有提交的内容被自动消除。

    include(ServletRequest,ServletResponse)方法 :

    用于在响应中包含其他资源(Servlet,JSP页面或HTML文件)的内容。

    即请求转发后,原先的Servlet还可以继续输出响应信息,转发到的Servlet对请求做出的响应将并入原先Servlet的响应对象中。

    3,forward方法和include方法的区别:

    forward方法调用后在响应中的没有提交的内容被自动消除。   include方法使原先的Servlet和转发到的Servlet都可以输出响应信息。

    二,得到RequestDispatcher对象

    三种方法可以得到RequestDispatcher对象:

    1,利用ServletRequest接口中的getRequestDispatcher(String  path)方法。

    2,ServletContext接口中getNamedDispatcher(String  path)和getRequestDispatcher(String  path)方法。

    ServletRequest接口和ServletContext接口中getRequestDispatcher方法区别:

    1,参数的区别

    参数虽然都是资源路径名,ServletContext接口的中参数路径必须以“/”开始,是相对于当前Servlet上下文根,    ServletRequest接口中的参数路径不仅可以相对于当前Servlet上下文根,还可以相对与当前Servlet路径

    2,跨WEB应用程序访问资源

    通过ServletContext.getContext()方法获取另个WEB应用程序的上下文环境对象来    调用getRequestDispatcher(String  path)方法 将请求转发到另个WEB应用程序的资源。

    还需要在当前WEB应用程序配置中设置元素,指定crossContext属性值为true。

    三,ServletResqonse接口中的sendReadirect()方法和forward()方法的区别

    二个方法都是用于请求转发的方法,转发给另外的资源为客户端服务。但二者有本质的区别

    sendReadirect()方法原理:

    1,客户端发送请求,Servlet1做出处理。

    2,Servlet1调用sendReadirect()方法,将客户端的请求 重新定位 到Servlet2。

    3,客户端浏览器访问Servlet2.

    4,Servlet2对客户端浏览器做出响应。

    forward()方法原理:

    1,客户端发送请求,Servlet1做出处理。

    2,Servlet1调用sendReadirect()方法,将请求转发给Servlet2来处理请求,为客户端服务。

    3,Servlet2对客户端浏览器做出响应。

    区别:

    1,定位与转发

    sendReadirect()方法是重新定位到另外一个资源来处理请求,URL会重新定位,让客户端重新访问另外一个资源。    forward()方法是转发到另外一个资源来处理请求。URL不会变化。隐藏了处理对象的变化。

    2,处理请求的资源的范围

    sendReadirect()方法可以跨WEB应用程序和服务器重新定位资源来处理请求。    forward()方法只能在应用程序内部转发。

    使用include方法转发的目的就是在同一逻辑块中进行转发。比方ServletA和ServletB都是同一逻辑的部分实现,出于某种原因我们需要这样做。那如何保持形式上的分离而逻辑处理上的依赖呢?就像模板方法模式中一样,我们可以预定逻辑的实现,通过抽象逻辑来组织逻辑。那这里我们使用include方法来组织同一逻辑的不同部分。

    响应信息如何组织的?处理时间上的前后顺序有吗?

    如上面所说,我们使用include方法来组织同一逻辑的不同部分。你可以将ServletA和ServletB看成一个整体。那问题就简单了。

    展开全文
  • 一、servlet请求转发三种方式 二、forward请求转发 三、redirect重定向 四、forward请求转发和redirect重定向区别 hualinux servlet 2.19:servlet请求转发三种方式也需要了解一下 一、servlet请求转发三种...
  • 请求转发 & 响应重定向上篇的实操练习本来想用请求转发和响应重定向来做一个新的...也就是一个请求处理多个servlet联动处理所以这里就要介绍新的知识个人心得:请求转发类似于我们要电脑城购买组装一台电脑,当...
  • Servlet 请求转发和重定向 请求转发 特点 降低servlet之间的代码冗余 一次请求转发内的servlet共享此次请求中的request和response对象 浏览器地址栏信息不变, 一共发出了一次请求 作用域 一次请求转发内的servlet....
  • servlet请求转发、请求重定向、请求包含 获取form数据
  • java servlet请求转发重定向 适合于初学者更好的了解页面跳转和原理
  • servlet1处理不了的请求转发给指定的servlet2 • 请求转发,参数是转发的资源名,即转发地址 • 在请求转发的过程中多个资源公用一个请求和响应 //servlet1转发请求到servlet2 public class ForwardServlet1 ...
  • servlet请求转发与重定向的区别
  • servlet请求转发到另一个servlet

    千次阅读 2017-08-02 16:42:00
    servlet请求转发到另一个servlet,并传递数据 。 1.通过request.setAttribute("key",value)给request加信息。 2.通过request.getRequestDispather(目标servlet).forward(request,response) 传递制定servlet. 3.在...
  • servlet请求转发的三种方式   servlet中的请求转发主要有三种方式: 1、 forward:是指转发,将当前request和response对象保存,交给指定的url处理。并没有表示页面的跳转,所以地址栏的地址不会发生改变。...
  • 一、Servlet请求转发和请求重定向 1.1使用格式 1.1.1 请求转发: (1) 使用requestDispatcher对象: 转发格式:request.getRequestDispatcher(“path”).forward(request,response) (2) 使用jsp动作元素: <jsp:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,177
精华内容 2,070
关键字:

servlet请求转发