java_web 复习 2 jsp 与 servlet (3)jsp内置对象

jsp内置对象


JSP 有以下九种内置对象,包括:
request,请求对象
response,响应对象
pageContext,页面上下文对象
session,会话对象
application,应用程序对象
out,输出对象
config,配置对象
page,页面对象
exception,异常对象

从本质上讲,JSP的这些内置对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成,一下是内置对象相对应的类的对应表,在jsp中可以直接使用对象的实例,内置对象 服务器帮忙创建好了。


 
“request” 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象 。 关 于 它 的 方 法 使 用 较 多 的 是getParameter 获得对应name的参数值、 getParameterNames 获得参数名的enumeration 通过调用 hasMoreElements()和nextElement()来遍历整个集合 和getParameterValues()返回string数组,通过调用这几个方法来获取请求对象中所包含的参数的值

 

 <body>
   
  <% 
   
    Enumeration e = request.getParameterNames();
  	
  	 while(e.hasMoreElements())
  	 {
		System.out.println(e.nextElement());  		 
  	 }
  
     String[] values = request.getParameterValues("age");
     
     for(String value : values)
     {
		System.out.println(value);    	 
     }
     
     String value = request.getParameter("age");
     
     System.out.println(value);
  
  %>

 

 “response” 对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out” 对象即可。

 

“pageContext”  对象直译时可以称作“页面上下文”对象,代表的是当前页面运行 的 一 些 属 性 , 常 用 的 方 法 包 括findAttribute 、 getAttribute 、getAttributesScope 和getAttributeNamesInScope,一般情况下“pageContext” 对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。一般Servlet容器会使用该对象。

 

“session” 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。

 

HTTP是无状态(stateless)协议;
Web Server 对每一个客户端请求都没有历史记忆;
Session用来保存客户端状态信息;

 

void setAttribute(String name,Object value)

 

Binds an object to this session, using the name specified. If an object of the same name is already bound to the session, the object is replaced.

 

Object getAttribute(String name)

 

Returns the object bound with the specified name in this session, or null if no object is bound under the name.

 

<HTML> 
  <BODY> 
  <% 
    String Name=request.getParameter("UserName"); 
    session.setAttribute("LogName", Name); 
  %> 
  你的名字"<%=Name%>"已经写入session  
  <br> 
  <a href='./check_session.jsp'>check</a> 
  </BODY> 
</HTML> 

 

<HTML><BODY> 
  <% 
    String yourName=(String)session.getAttribute("LogName"); 
    if (yourName= =null) 
    { 
    %>您还未登录 
    <% 
    }else 
    { 
    %> 
    "<%=yourName%>"已经登录 
    <% 
    } 
  %> 
</BODY></HTML> 

  

“out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了print和println之外,还包括clear、clearBuffer 、 flush 、 getBufferSize 和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。

 

“config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。
“page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。
“exception” 对象则代表了JSP文件运行时所产生的异常对象,此对象不能在一般JSP文件中直接使用 , 而只能在使用了 “ <%@  page isErrorPage="true "%>”的JSP文件中使用 
 

要想 getAttribute 必须先放进去 setAttribute

 

request 的 setAttribute 与 getAttribute 方法一般都是成对出现的,首先通过 setAttribute 方法设置属性与属性值,然后通过getAttribute 方法根据属性获取到与该属性对应的对象值(获取到之后一般都需要进行向下类型转换,将属性值转换为真正的对象)setAttribute与 getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。

 

request对象内数据的存活范围就是在request对象的存活范围内,当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了;之后再向服务器端发送新的请求时,服务器会创建新的 request 对象,该request 对象与之前的request 对象没有任何关系,因此也无法获得在之前的 request 对象中所存放的任何数据。

session对象内数据的存活范围也就是session对象的存活范围(?只要浏览器不关闭,session对象就会一直在?) ,因此在同一个浏览器窗口中,无论向服务器端发送多少个请求,session 对象只有一个。 

application(应用对象) :存活范围最大的对象,只要服务器没有关闭,application对象中的数据就会一直存在。在整个服务器运行过程当中,application 对象只有一个。

 

request、 session以及application这3个对象的范围是逐个增加的:
equest只在一个请求的范围内; ?session 是在浏览器窗口的范围内?;application则是在整个服务器的运行过程中。

 

关于session作用范围(网站找了一些资料) 

写道
session是在服务器端建立的,浏览器访问服务器会有一个jsessionid,浏览器端通过 jsessionid定位服务器端的session,session的创建和销毁由服务器端控制。当浏览器关闭后,session还存在在服务器端,只不过你新开的浏览器去访问服务器会创建另一个session,这个时候的jsessionid已经不一样了。也就不能访问上一次的哪个session里面的内容了。
那服务器端session如何建的呢?普通htm不会创建,jsp默认是创建的,只要你访问一个任何一个jsp就会创建(不过只创建一次),你关闭浏览器从新访问又会创建一个,这些创建的 session由服务器自己控制销毁,你也可以在服务器端代码中销毁。
session其实简单:
先request.getsession(),当已有一个session与前request相关时就返回对这个session的引用,当没有时就生成一个.一个session在server通过一个sessionid来标识的。也就是说在一个server是不会有两个相同sessionid的 session.

那么session为什么会和cookie扯在一起呢?

正如我所说对於一个session来说它的sessionid就是其身份的标识。若我们将这个sessionid保存到用户端,当同一个会话的后序请求来时都将这个sessionid放在request 的header中(也就是我们说的cookie)这样不就可以来验证这个request是否与之前的request是同一个会话了吗!

什么是会话呢?
我们可以通俗一点理解。只要你的browers不关我们就称这一系列的request与response为一个会话。一断你close就称这个会话已结束。虽然会话结束但并不代表你的session就被destroy.因为session是存活在server上的。它的生命完全由server来主宰(web.xml中的设定).
虽然你的session还存活在server上但你已无法再取得它。因为j2ee的api只给我们一种方法来取得与当前会话相关的session的引用:request.getsession() or reqeust.getsession(boolean)


这也就是为会什么会有"当浏览器关session就结束"这个错误的说法了!

 

请求转发

 
String username = req.getParameter("username");
req.setAttribute("username", username);
RequestDispatcher rd = req.getRequestDispatcher("myResult.jsp");
  
rd.forward(req, resp);

HttpServletResponse 对象的 sendRedirect(String location)方法称作重定向。如果 location 地址前面加上“/”,则表示相对于 Servlet容器的根来请求,即 http://localhost:8080,如果location地址前没有加上“/”,则表示相对于当前请求的 URI来寻找地址。 
RequestDispatcher的forward(request, response)方法称作请求转发。 

请求转发与重定向的区别。

请求转发,整个过程处于同一个请求当中

 

重定向。实际上客户端会向服务器端发送两个请求。

 

RequestDispatcher 是 通 过 调 用 HttpServletRequest 对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。


sendRedirect()是 HttpServletResponse 对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值