201819102030刘清照

一、out内置对象

out对象用于向浏览器输出数据,这个out对象的类型是JspWriter。
jsp输出底层使用的是response.getWriter(),JSP页面转换为Servlet后,使用的out对象是JspWriter类型的,所以是会先将要发送的数据存入JSP输出缓存中,然后,等JSP输出缓存满了在自动刷新到servlet输出缓存,等serlvet输出缓存满了,或者程序结束了,就会将其输出到浏览器上。除非手动out.flush()。


 

                                                      

如果按没有jsp缓存和servlet缓存的话,输出的结果应该是abc,但是输出的却是bac,out对象是先将其输出到JSP缓存中,所以a加入了jsp缓存,response.getWriter().print("b")是直接将b输出到servlet缓存中,然后又使用out对象将c输出到jsp缓存,到程序结束,servlet缓存中有b,然后jsp会将缓存中的内容就刷新到servlet缓存中,serlvet就是bac了,然后到浏览器也就得到我们的输出结果了。如果将out.flush()注释去掉,答案就是abc。原因是我们手动的将jsp缓存里面的数据刷新到servlet缓存里面了。

二、request

request对象代表这是从用户发送过来的请求,从这个对象中可以取出客户端用户提交的数据或者是参数,这个对象只有接受用户请求的页面才可以访问,如果要与用户互动,必须要知道用户的需求,然后根据这个需求生成用户期望看到的结果。这样才能实现与用户的互动。在Web应用中,用户的需求就抽象成一个request对象,这个对象中间包括了用户的需求。request正是用来收集类似这些用户的输入数据和参数的。同时,request对象中还包括一些服务器的信息,例如端口、真实路径、访问协议等信息,通过request对象可以取得服务器的这些参数

客户提交信息的方式:<%=request.getMethod()%>
  <br>使用的协议:<%=request.getProtocol()%>
  <br>获取发出请求字符串的客户端地址:<%=request.getRequestURI()%>
  <br>获取发出请求字符串的客户端地址:<%=request.getRequestURL()%>
  <br>获取提交数据的客户端IP地址:<%=request.getRemoteAddr()%>
  <br>获取服务器端口号:<%=request.getServerPort()%>
  <br>获取服务器的名称:<%=request.getServerName()%>
  <br>获取服务器的主机名:<%=request.getRemoteHost()%>
  <br>获取服务器端口号:<%=request.getServerPort()%>

三、session

session对象也可以绑定若干个参数或者Java对象,这些参数或者Java对象就相当于局部变量,不同session对象间的同名变量是不会相互干扰的。应用session对象的功能,可以十分简单地实现购物车等功能。

  但是我们仅能获取原session对象的一个同步副本,这一点上,session对象和application对象是一致的。application对象和session对象并非不能被创建,但是,他们只能够由JSP引擎自动创建。application对象在服务器启动的时候被创建,在服务器关闭时被删除,session对象在新的HTTP连接产生时被创建,在HTTP连接中断或者超时的时候被删除,同时,JSP程序员也可以调用invalidate()方法强行删除session对象,中断HTTP连接。这是application对象和session对象的不同点之一。

<%
  out.print(session.getAttribute("text1"));out.print("<br>");
  out.print(session.getAttributeNames());out.print("<br>");
  out.print(session.getCreationTime()/(24*3600000*365));out.print("<br>");
  out.print(session.getId());out.print("<br>");
  out.print(session.getLastAccessedTime()/(24*3600000*365));out.print("<br>");
  out.print(session.getMaxInactiveInterval());out.print("<br>");
%>

四、application

application对象,上下文对象,其生命周期和工程的生命周期一致。application类似于系统的"全局变量",用于实现用户之间的数据共享

<%   application.setAttribute("1","1111");
  application.setAttribute("2","2222");
  application.removeAttribute("2");
  out.print(application.getAttribute("1"));out.print("<br>");
  out.print(application.getAttribute("2"));out.print("<br>");
  out.print(application.getAttributeNames());out.print("<br>");
  out.print(application.getContextPath());out.print("<br>");
  out.print(application.getMajorVersion());out.print("<br>");
  out.print(application.getMinorVersion());out.print("<br>");
  out.print(application.getServerInfo());out.print("<br>");
  out.print(application.getServletContextName());out.print("<br>");
%>

 

五、response

response对象用于响应客户请求,向客户端输出信息。发送到客户端以响应客户端的请求。

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Insert title here</title>
</head>
<body>
<form action="index.jsp"method="post">
  用户名:<input type="text" name="username"/></br/>
  密  码:<input type="password" name="pwd"/></br/>
  <input  type="submit" name="登陆"/>
</form>
</body>
</html>

六、page

page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例

<center><h3>Page内置对象的实例</h3></center>
<%!Object obj; %> <!-- 申明 -->
getClass:<%=page.getClass() %>
<br>hashCode:<%=page.hashCode()%>
<br>toString:<%=page.toString()%>
<br>equals:<%=page.equals(obj) %>
<br>equlas2:<%=page.equals(this) %>

七、pageContext

pageContext能作为一个域对象来存储数据,通常称为page域,而这个page域的范围只是在当前JSP页面中。例如我们可以使用pageContext.setAttribute方法和pageContext.getAttribute方法(这两个方法都从pageContext的父类JSPContext类继承而来)来在page域中设置和获取某个属性值

pageContext中最重要的方法:findAttribute方法,使用pageContext.findAttribute方法能从四个域(page, request, session, context)中寻找存储的数据,查找的顺序也是从小到大(page--->request--->session--->context),只要在某个域中能查到相对应的键值对,就返回,如果四个域都没有则返回null。这个方式对于EL表达式是最重要的,例如JSP页面中有一个EL表达式: ${data}  最终在Servlet中就会被翻译成 pageContext.findAttribute(“data”)。

pageContext还提供了include包含和forward跳转这两种方法,这两种方法是request.getRequestDispatch.include方法和request.getRequestDispatch.forward方法的简化,其实pageContext.include和pageContext.forward在Servlet中内部依然还是使用request的方式,只是提供了简化。

<h4>向pageContext域存取东西</h4>
<%
  pageContext.setAttribute("name", "page");
  pageContext.setAttribute("name", "page", pageContext.PAGE_SCOPE);
  request.setAttribute("name", "request");
  pageContext.setAttribute("name", "request", pageContext.REQUEST_SCOPE);
  pageContext.setAttribute("name", "session", pageContext.SESSION_SCOPE);
  pageContext.setAttribute("name", "pageContext", pageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("name",pageContext.PAGE_SCOPE) %>
<%=pageContext.getAttribute("name",pageContext.REQUEST_SCOPE) %>
<%=pageContext.getAttribute("name",pageContext.SESSION_SCOPE) %>
<%=pageContext.getAttribute("name",pageContext.APPLICATION_SCOPE) %>

八、config

这个对象最主要的作用就是可以取得正在使用服务器的配置信息。这个对象是需要通过pageContext对象来获得的

<%
  String servletName=config.getServletName();
  out.print("servlet-name:"+servletName);
%>

 

九、exception

exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值