zoukankan      html  css  js  c++  java
  • servlet的运行机制,转发和重定向

    一、当发送一个请求到服务器端的时候,容器(tomcat)会判断该路径属于哪一个servlet进行处理,servlet有一个抽象父类“httpservlet”,这个类是一个模板设计模式的类,其中service是一个模板方法。当接受到请求之后容器会自动调用父类的service()方法;一个servlet需要继承“httpservlet”,这个类是一个抽象类却没有抽象方法,当用户发送请求的时候容器会调用相应的servlet的service方法()这个模板方法,在方法中判断该用户的请求是什么类型,根据类型来确定调用对应的钩子方法(doxxx()方法)

    二、request内置对象

    所谓内置对象就是已经创建好的对象(由容器创建),我们可以直接使用的对象,那么在容器中如果接受到了一个用户的请求这会自动创建一个对象来处理客户端发送的一些信息,这个对象就是内置对象,该对象的类型是“javax。servlet。http。httpservletrequest”,名称就是request,在调用service方法的时候容器会自动传递该对象给方法;既然该内置对象包含了用户发送的一些信息,则可以使用对应的方法将这些信息取得。

    request.getpathinfo()  //取得额外路径

    request.getquerystring()  //取得传递的参数

    request.getparameter("参数名")  //取得指定的参数

    其他方法  request.setattribute("键","值") //再转发getrequestdispatcher("path").forward(req,resp);

    三、细谈getRequestDispatcher()与sendRedirect()的区别(原文https://blog.csdn.net/mr_li13/article/details/50373972)

    (1)request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 这个是在服务端运行的,对浏览器来说是透明的。
    (2)response.sendRedirect()是重新定向,前后页面不是一个request。而这个是在浏览器端运行的。

          1) redirect 方式
       response.sendRedirect("/a.jsp");
       页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:
       response.sendRedirect("URL");
       跳转后浏览器地址栏变化。
       这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来 传递。所以该方式只适用于无传值跳转
      2) forward方式
       request.getRequestDispatcher("/路径(可以是jsp路径也可以是servlet)") .forward(request, response);

    如:

    request.getRequestDispatcher("/2.jsp)") .forward(request, response);

    request.getRequestDispatcher("/servlet/HomeServlet)") .forward(request, response);
      Servlet页面跳转的路径是相对路径。forward方式只能跳转到本web应用中的页面上。
      跳转后浏览器地址栏不会变化。
      使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute

     

  • 相关阅读:
    【机器学习】机器学习12个关键经验教训
    【机器学习】24个终极项目提升您的机器学习知识和技能
    2018-12-21-WPF-弹出-popup-里面的-TextBox-无法输入汉字
    2019-10-31-C#-dotnet-获取整个局域网的-ip-地址
    2018-11-26-win10-uwp-获取窗口的坐标和宽度高度
    2019-5-21-dotnet-core-使用-CoreRT-将程序编译为-Native-程序
    2019-5-21-Roslyn-使用-Directory.Build.props-管理多个项目配置
    2019-2-26-SublimeText-快速打开当前文件的文件夹
    2019-2-18-VisualStudio-给项目添加特殊的-Nuget-的链接
    2019-8-31-dotnet-如何在-Mock-模拟-Func-判断调用次数
  • 原文地址:https://www.cnblogs.com/yzxcs/p/10742508.html
Copyright © 2011-2022 走看看