JSP内置对象,指在JSP页面中内置的不需要定义就可以在网页中直接使用的对象。JSP定义了9种内置对象:
out
:负责管理对客户端的输出request
:负责得到客户端的请求信息response
:负责向客户端发出响应session
:负责保存同一客户端一次会话过程中的一些信息application
:表示整个应用的环境的信息- exception:表示页面上发生的异常,可以通过它获得页面异常信息
- page:表示当前JSP页面本身,就像Java类中定义的this一样
- pageContext:表示JSP的上下文
- config:表示此JSP的ServletConfig
下面主要是常用的五个对象out、request、response、session、application简述。
out对象
out对象作用如下:
-
用来向客户端输出各种数据类型的内容,依靠如下两个方法:
void print()
void println()
-
实现对应用服务器上的输出缓冲区进行管理,常用函数如下:
void close()
void clearBuffer()
void clear()
- …
request对象
request对象主要用途是获取客户端的基本信息。主要方法如下:
String getMethod()
:得到提交方式String getRequestURI()
:得到请求的URIString getProtocol
:得到协议名称String getServletPath()
:得到客户端请求服务器文件的路径String getQueryString()
:得到URI的查询部分String getServerName()
:得到服务器的名称String getServerPort()
:得到服务器端口号String getRemoteAddr()
:得到服务器的IP地址
request对象获取客户端的参数常用方法:
String getParameter(String name)
:获得客户端传送给服务器的name参数的值。当传递给此参数的参数名没有实际参数与之对应时,则返回null。String[] getParameterValues(String name)
:以字符串数组的形式返回指定参数所有值。
response对象
response对象和request对象是一对相对应的内置对象,response可以理解为客户端的响应,request可以理解为客户端的请求。
response对象具有以下用途:
- 利用response对象进行重定向:
response.sendRedirect(路径)
redirect和forward的区别:
- 浏览器显示上:forward()方法属于服务器去请求资源,服务器直接访问目标地址,并对该目标地址的响应内容进行读取,再把读取的内容发给浏览器,因此客户端浏览器的内容不会变。redirect是告诉客户端,使浏览器知道去请求哪一个地址,相当于客户端重新请求一遍,所以地址显示栏会变。
- 数据共享上:forward转发的页面之间能够共享request里面的数据,而redirect不能共享。
- 功能上:redirect能够重定向到其他网站上的资源,forward方法只能在同一web应用程序内的资源之间转发请求,可以理解为服务器内部的一种操作。
- 效率:forward效率较高,因为跳转仅仅发生在服务器端;redirect效率则相对较高,因为类似于再进行了一次请求。
session对象
JSP页面的session对象是跨页面保持的,当访问网站时,服务器端已经分配了一个session对象给用户使用,对于同一个用户,不管在哪个页面,它使用的都是一个session。可以用来保存登录信息和实现购物车(用户私有的)。
session的常用API:
void setAttribute(String name,Object obj)
:将一个对象放入session,如果两次调用此方法并且name相同,那么后面的内容将会覆盖以前放进去的内容。Object可以放入任意类型的数据,取出时进行强制转换即可。Object getAttribute(String name)
:读取session中的内容,返回的是Object类型,必须进行强制转型。void removeAttribute(String name)
:将属性名为name的内容从session中移除。- …
application对象
session对象中的数据可以被同一个用户在网站中的一次对话共享。但是对于不同客户来说,每个人的session是不同的。application对象对于不同客户端来说,服务器端的对象是相同的(用户共有的)。
对于一个web容器而言,所有的用户都共同使用一个application对象,服务器启动后就会自动创建application对象,这个对象会一直保存,直到服务器关闭为止。
application对象的常用API:
void setAttribute(String name,Object obj)
:将Object对象保存到application对象中void getAttribute(String name)
:读取application对象中的内容void removeAttribute(String name)
:将对象从application中移除
cookie操作
在JSP页面之间传递数据的方式当中,除了表单传值
、URL传值
以外,Cookie
是一种常见的方法,Cookie是一个小的文本,由服务器端生成,发送给客户端浏览器,客户端如果设置为启用Cookie,则会将这个小文本数据保存到某个目录下的文本文件内。下次登录同一个网站时,客户端浏览器会自动将Cookie读入之后,传给服务器端。一般情况下,Cookie中的值是以key-value的形式进行表达的。
基于这个原理,可以实现一个功能:在第一个页面中,将要共享的变量值保存在客户端Cookie文件内,在客户端访问第二个页面时,由于浏览器自动将Cookie读入之后,传给服务器端,因此只需要在第二个页面读取这个Cookie值即可。
<%@ page lanfuage="java" import="java.util.*" pageEncoding="gb2312"%>
<%
//定义一个变量
String str = "xingze";
//将str存入Cookie
Cookie cookie = new Cookie("name",str);
//设置Cookie的存活期为600秒
cookie.setMaxAge(600);
//将Cookie保存于客户端
response.addCookie(cookie);
%>
<%@ page lanfuage="java" import="java.util.*" pageEncoding="gb2312"%>
<%
//从Cookie获得name
String name1 = null;
Cookie[] cookies = request.getCookies();
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("name")){
name1 = cookies[i].getValue();
break;
}
}
%>
Cookie和session的区别
- 存储位置:Cookie存储在客户端浏览器上,session的数据信息存放在服务器上,会消耗服务器端的性能。
- 存储数据大小:单个cookie保存的数据<=4KB,session的内容大小没有限制。
- 安全性:Cookie相比于session来说不是安全的,容易被窃取。