Servlet交互-作用域对象

Web组件之间跳转

Web组件之间的跳转,有三种方式:

方式1:请求转发(forward)  

方式2:URL重定向(redirect)  

方式3:请求包含(include):req.getRequestDispatcher("/include/s2").include(req, resp);

语法:    request对象,

getRequestDispatcher(String path).forward(request,response);

参数:      path:资源路径,跳转目标的地址.    

注意:一定要记得调用forward方法,如果没有调用,则不能跳转.

请求转发(forward)

请求转发的特点:    

1、请求转发的时候,浏览器地址栏不会改变依然是跳转之前的地址(不会显示目标地址).      

2、请求转发只发送了一个请求,Servlet1和Servlet2共享请求(共享请求中的数据).        

Servlet1和Servlet2之间可以在同一个请求中共享数据.      

3、最终给浏览器的响应有Servlet2来决定(如此:Servlet1没必要做响应).      

4、请求转发只能访问当前应用的资源,不能跨域访问.      

5、请求转发可以访问WEB-INF里面的资源.

URL重定向(redirect)

语法:    response对象.sendRedirect(String path);    参数:     path:资源路径,跳转目标的地址.

URL重定向的特点:    

1、URL重定向的时候,浏览器地址栏发生改变,变成了目标的地址.    

2、URL重定向发送了两个请求,Servlet1和Servlet2的请求不同.        

因为Servlet1和Servlet2不共享同一个请求,所以也不共享请求中的数据.    

3、最终给浏览器的响应有Servlet2来决定(如此:Servlet1没必要做响应).    

4、URL重定向支持跨域访问.    

5、URL重定向不能访问WEB-INF里面的资源

Servlet的三大作用域对象

Web组件在跳转的时候可以共享数据(信息共享),Web组件信息共享必须依赖作用域对象. 我们是把共享的信息先存放在共享对象中再做传递,在目标里面从共享对象中获取数据.    Servlet1  ------------>作用域对象(数据)-----------> Servlet2

作用域对象名称

对象的类型

对象的描述

request 

HttpServletRequest

请求对象,每次新的请求都会创建新的request

session

HttpSession

绘画对象,每次打开新的浏览器,在访问(可以包含多个请求)

ServletContext(application)

ServletContext

应用对象,描述了一个web应用,启动Tomcat创建ServletContext对象,关闭Tomcat销毁该对象

作用域对象如何来共享数据?

 把数据存放到作用域,从作用域取出数据,修改/删除数据

所有作用域对象的操作方法都是相同的

设置共享数据:  作用域对象.setAttribute(String name,Object value)

获取共享数据:  Object val = 作用域对象.getAttribute(String name);

删除共享数据:  作用域对象.removeAttribute(String name);

注意:从哪一个作用域中设置共享数据,就只能从该作用域中取出共享数据.    

 如果需要共享请求中的数据,只能使用请求转发(forward).

ServletContext接口和常用方法

ServletContext接口,表示Servlet的上下文(环境).

ServletContext其实表示的就是当前应用对象,在一个应用中,有且只有一个ServletContext对象

该对象在Tomcat启动的时候就创建,在关闭Tomcat的时候该对象被销毁. 可以被所有的Web组件共享数据.

 

ServletContext

如何获取ServletContext对象:    

方式1:ServletContext ctx = request对象.getServletContext();(Tomcat7才支持)    

方式2:ServletContext ctx = request对象.getSession().getServletContext();    

方式3:在Servlet类中: ServletContext ctx = super.getServletContext();(重写init方法 需调用super.init(config);)            getServletContext方法是ServletConfig接口中的,而ServletConfig接口是HttpServlet类的父接口.     获取的ServletContext都是相同的.

常用方法:  

1、String getContextPath():获取当前应用的上下文路径(<Context path="XXXX"/>)      和request.getContextPath是相同的.  

2、String getRealPath(String path):返回当前资源名称的真实路径(绝对路径).  

3、之前讲解初始化参数,是在<servlet>元素中做的配置,如此一来,该初始化参数就只能当前Servlet使用.          如果有N个Servlet有相同的初始化参数配置,就得重复配置N次,很不爽,------>全局初始化参数.      全局初始化参数:可以供所有的Web组件共享,配置如右图.      如何获取呢?就只能使用ServletContext对象.getInitParameter(String name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值