关于JSP和Servlet中各中对象

JSP内置(隐示)对象

JSP隐式对象是JSP容器为每个页面提供的Java对象,已经封装内置好了,开发者可以直接使用它们而不用显式声明。一共九大内置对象

对象描述
requestHttpServletRequest 接口的实例
responseHttpServletResponse 接口的实例
sessionHttpSession类的实例
pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
applicationServletContext类的实例,与应用上下文有关
configServletConfig类的实例
page类似于Java类中的this关键字
outJspWriter类的实例,用于把结果输出至网页上
ExceptionException类的对象,代表发生错误的JSP页面中对应的异常对象

详情参考here(写的很全)

JSP中的作用域对象

  • pageContext:面对页面 只在一个页面保留数据
  • request:面对请求 只在一个请求中保存数据
  • session:面对当前浏览器 在一次会话中保存数据,仅供单个用户使用
  • application:面对服务器 在整个服务器中保存数据,全部用户共享

1、新建一个demo01.jsp文件

<%--设置作用域的值--%>
<% pageContext.setAttribute("pagecontext" , "pagecontext的值");%>
<% request.setAttribute("request" , "request的值");%>
<% session.setAttribute("session" , "session的值");%>
<% application.setAttribute("application" , "application的值");%>

<%--取值--%>
pagecontext:${pagecontext}<br> <%--页面显示pagecontext的值--%>
request:${request}<br> <%--页面显示request的值--%>
session:${session}<br> <%--页面显示session的值--%>
application:${application}<br> <%--页面显示application的值--%>

结果:
在这里插入图片描述
2、再新建一个demo02.jsp文件,再次直接取这四个值

    pagecontext:${pagecontext}<br>
    request:${request}<br>
    session:${session}<br>
    application:${application}<br> 

结果:
在这里插入图片描述

  • 这里没有取到pageContext对象的值是因为pageContext对象只作用于自己一个页面,切换页面取不到值
  • 没有request的值是因为这里不是请求过来的,我是直接访问demo02.jsp页面
  • session的值还在是因为默认30分钟的存活期,只有浏览器不关闭,session就还在
  • application的值还在是因为服务器不关闭,值就在

3、关闭浏览器,重新访问demo02.jsp(或者换个浏览器)
结果:
在这里插入图片描述

  • session值不见了是因为session对象是面向浏览器会话的,一旦浏览器关闭,这个会话对象无法找到,暂时当消失处理,再也取不到值
  • application的值还在是因为服务器没有关闭,值就在
关于pageContext对象

1、findAttribute()方法只有pageContext有

  • 可以获取所有其他域对象中的值
<%=pageContext.findAttribute("request") %>  <%--取demo01.jsp中的request的值   结果是:request的值--%>
  • 当不同域对象中有相同key值时,优先取作用域范围小的
    将名称都设成一样的
<% pageContext.setAttribute("a" , "pagecontext的值");%>
<% request.setAttribute("a" , "request的值");%>
<% session.setAttribute("a" , "session的值");%>
<% application.setAttribute("a" , "application的值");%>

<%--取值--%>
<%=pageContext.findAttribute("a")%> <br>   <%--结果:pagecontext的值    如果名称一样,会优先取作用范围最小的作用域的值。等同于下面使用el表达式的方式--%>
${a}<br><%--结果:pagecontext的值--%>

2、名称相同,取特定作用域对象的值

<%--取特定作用域的值 session--%>
<%=pageContext.getAttribute("a", pageContext.SESSION_SCOPE)%><br>
${sessionScope.a}<br><%--session的值  和上面取值一样--%>

3、通过pageContext设置其他作用域的值

<%
    pageContext.setAttribute("a1" , "page的值" , pageContext.PAGE_SCOPE);
    pageContext.setAttribute("a1", "request的值", pageContext.REQUEST_SCOPE);
    pageContext.setAttribute("a1", "session的值",pageContext.SESSION_SCOPE);
    pageContext.setAttribute("a1", "application的值", pageContext.APPLICATION_SCOPE);
%>
	<%--取值--%>
    <%=request.getAttribute("a1")%><br><%--request的值--%>
    <%=pageContext.findAttribute("a1")%><br><%--page的值--%>
    ${applicationScope.a1}<%--application的值--%>

Servlet中的作用域对象

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

  • ServletContext:上下文共享;从存储开始,到tomcat关闭都有;
  • request:请求共享;同一次请求中,共享数据可以获取,但请求结束,请求共享清除;请求转发能共享,重定向不能;
  • session:session共享/回话共享;同一次回话,共享数据可以获取;(回话:从共享数据开始,到浏览器关闭或主动清发和重定向影响,只要存到session中,浏览器不关闭,session不主动清除,就可以获取)

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

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

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

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

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

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

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

EL表达式中的对象

原文链接https://blog.csdn.net/qq_17045385/article/details/54799998

EL可以输出的东西都在11个内置对象中,11个内置对象,其中10个是Map,只有pageContext不是Map,它就是PageContext类型,EL所有内置对象如下:

  • pageScope:获取pageContext域属性,相当于pageContext.getAttribute(“xxx”)

  • requestScope:获取request域属性,相当于request.getAttribute(“xxx”)

  • sessionScope:获取session域属性,相当于session.getAttribute(“xxx”)

  • applicationScope:获取application域属性,相当于application.getAttribute(“xxx”)

  • param:对应参数,它是一个Map,其中key是参数,value是参数值,适用于单值的参数,相当于request.getParameter(“xxx”)

  • paramValues:对应参数,她是一个Map,其中key是参数,value是多个参数值,适用于多值的参数,相当于request.getParameterValues(“xxx”)

  • header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值的请求头,相当于request.getHeader(“xxx”)

  • headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值的请求头,相当于request.getHeaders(“xxx”)

  • initParam:获取web.xml中内的参数,${ initParam.xxx},xxx就是标签内的值,进而得到中的值

  • cookie:用于获取cookie,Map<String,Cookie>,其中key是cookie的name,value是cookie对象,例如${cookie.JSESSIONID.value }就是获取sessionId

  • pageContext:可以获取JSP九大内置对象,相当于使用该对象调用getxxx()方法,例如pageContext.getRequest()可以写为${pageContext.request)

EL表达式在获取Map的值或Bean的属性值是,可以使用“点”的方法,也可以使用“下标”的方法。

i n i t P a r a m . a 与 {initParam.a}与 initParam.a{initParam[‘a’]},它们是完成的东西相同的。但是,如果Map的键或Bean的属性名中包含下划线或横岗时,那么就必须使用“下标”方法,例如:${initParam[‘a_a’]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值