HttpServletRequest、HttpServletResponse对象的常用方法getServletPath()、getSession()、getRequestDispatcher()等

HttpServletRequest和ServletRequest都是接口,HttpServletRequest继承自ServletRequest ;

1、获取项目路径

 请求地址: http://localhost:8090/JSPStudy/09/index.jsp

  • req.getServletPath(): 获取请求地址 ,得到相对项目的url,不带项目名称   
        String servletPath = req.getServletPath();
        System.out.println( servletPath);

        打印结果:/09/index.jsp

  •  req.getContextPath():获取网站跟路径,得到部署的项目名(Context-root),不是URL,仅仅项目名字
       String path = req.getContextPath();
      System.out.println(path);
      打印结果:/JSPStudy
  • req.getRequestURI():得到相对服务器的url,getRequestURI带有项目root,以项目名称为开头
     String urlString = req.getRequestURI();
     System.out.println(urlString);
     打印结果:/JSPStudy/09/index.jsp

  •  request.getRealPath("/"):得到应用程序部署在服务器上的绝对路径
      String realpath = request.getRealPath("/");
     System.out.println(realpath);
     打印结果:\JAVA\.metadata\.me_tcat85\webapps\JSPStudy\


  • ((HttpServletRequest) req).getRequestURL():得到绝对地址url
     String requestUrl = ((HttpServletRequest) req).getRequestURL().toString();
     System.out.println("绝对路径" + requestUrl);
     打印结果:http://localhost:8090/JSPStudy/09/index.jsp

运行结果:


2 、获取HttpSession对象

HttpSession session = req.getSession();

String flag = (String) session.getAttribute("flag");

设置Session:

session.setAttribute("flag", "login_success")

清空session:

session.invalidate()

3、获取RequestDispatcher对象

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

RequestDispatcher dispatcher=req.getRequestDispatcher("/09/login.jsp");

RequestDispatcher接口的两种请求转发:

         dispatcher.forward(request, response):这个方法将请求从一个 Servlet or JSP目标资源 上 转发到服务器上的另一个资源(servlet、JSP 文件或 HTML 文件,这些资源必须是当前Web上下文中的),让其它的资源去生成响应数据。
        例如用户请求的是目标资源A,A接受到请求后,转发到B,真正产生响应数据是被转发的资源B,而A只是起个引导转发作用。浏览器的地址栏不会变,依然是A的URL
         dispatcher.include(request, response):此方法用于包含响应中某个资源(servlet、JSP 页面和 HTML 文件)的内容。
调用者指定一个被包含的资源,将这个包含的资源(JSP,Servlet,HTML)的响应数据包含到自己的响应体中。被包含的数据是在服务器上经过运行产生的,因此是动态包含,而不同于JSP中的include指令,它是JSP转译期的静态包含,类似于C语言中的宏一样。


4、HttpServletResponse接口中的sendReadirect()方法和RequestDispatcher接口中forward()方法的区别 

区别:

  • 定位与转发 :sendReadirect()方法是重新定位到另外一个资源来处理请求,URL会重新定位,让客户端重新访问另外一个资源。    forward()方法是转发到另外一个资源来处理请求。URL不会变化。隐藏了处理对象的变化。
  • 处理请求的资源的范围 :sendReadirect()方法可以跨WEB应用程序和服务器重新定位资源来处理请求。    forward()方法只能在应用程序内部转发。

sendReadirect()方法原理:

  • 客户端发送请求,servletA作出处理;
  • servletA调用sendReadirect()方法,将客户端的请求重新定位到ServletB;
  • 客户端浏览器访问ServletB;
  • ServletB客户端对浏览器作出响应;

forward()方法原理:

  • 客户端发送请求,servletA作出处理;
  • ServletA调用forward()方法,将请求转发给ServletB来处理请求,为客户端服务;
  • ServletB对客户端浏览器作出响应;


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值