JSP内置对象
JSP容器(如:Tomcat)为用户创建了9个可以直接使用的内置对象,分别是out、response、request、session、application、config、pageContext、page、exception。所有这些对象在Tomcat容器启动时都会自动创建,程序员在JSP程序中可以直接使用这些对象(属性或方法)。
一、向客户端输出信息对象out
JSP内置对象out是抽象类java.io.Writer的实例(PrintWriter是其子类)。
out的常用方法是println(exp),其中,exp可以是普通文本、含有变量的表达式,甚至是作为特殊字符串的JS脚本。
例如:out.println("<script>alert('hello dta...')</script>");
注:<%out.println(exp);%>与JSP表达式用法<%=exp%>等效
二、响应对象response
response代表服务器对客户端请求进行响应的对象,是Java扩展包javax.servlet.http里接口HttpServletResponse的实例,其常用方法如下:
●sendRedirect(String location)
重定向请求,产生页面跳转
注:
重定向方法sendRedirect()会产生新的请求对象,跳转发生在客户端,地址栏也会相应地变化。
而JSP转发动作标签<jsp:forward>属于服务器端跳转,地址栏不会变化
使用Servlet实现的转发,属于服务器端跳转,不会引起浏览器地址栏中地址的变化。
●setContentType("text/html;charset=code")
设置响应信息的字符编码,其中code通常取值为utf-8
注:在Servlet程序里,如果响应信息包括中文,应在向客户端输出前使用setContentType()指定字符编码。否则,页面会出现中文乱码。
●getWriter()
获取java.io.PrinterWriter类型的响应流对象
●void setHeader(String name, String value)
设置页面自动刷新和自动跳转
●addCookie()
建立Cookie信息,向客户端写入一个Cookie
三、请求对象request
request对象是接口javax.servlet.http.HttpServletRequest的实例,封装了客户端请求的相关信息。
对象request主要封装了表单提交的数据、超级链接时传递的参数、客户端的IP地址和Cookie信息等。该对象具有获取这些信息的相关方法,方法如下:
●String getParameter("name")
获得客户端的请求数据,对应于参数name的值
●String[ ] getParameterValues("name")
获取客户端的请求数据,对应于name的数组
●void setCharacterEncoding("code")
设定请求信息的编码,其中code通常取值为utf-8
●void setAttribute("kn", obj)
属性设置,其中kn为键名,obj为任意类型的键值
●Object getAttribute("kn")
获取属性,返回值为顶级的Object类型
●String getRemoteAddr()
获取客户端的IP地址
●HttpSession getSession()
获取会话对象
●
●●
四、会话对象session
session对象是接口javax.servlet.http.HttpSession的实例化对象
当客户端访问一个Web服务器时,用户可能会在这个服务器的多个页面之间反复跳转。
从一个客户端打开浏览器并连接到服务器,到客户端关闭浏览器离开这个服务器的过程,称为一个会话。
session是存储于服务端的、用于记录和保持某些状态的一种会话跟踪技术。用户通过浏览器发起请求的时候,Web服务器可自动为客户端生成一个对象。
JSP内置对象session就是代表服务器与客户端所建立的会话,
当一个用户首次访问服务器页面时,服务器将产生一个session对象,同时自动分配一个String类型的ID号(会话标识,它是由不重复的字母和数字组成的随机字符串序列)。当用户访问服务器的其他页面时,服务器并不会为用户创建新的会话标识和session对象。
通过session对象,可以存储一些信息。会话信息不会因为页面的跳转而消失或者变化,从而实现在一个会话期间多个页面间的数据共享(传递)。session对象的常用方法如下:
●getId()
返回Web服务器创建session对象时设置的ID(会话标识)
●isNew()
判断当前客户是否为新的会话
●setAttribute("属性名", 值)
设置指定名称的属性值
●getAttribute("属性名")
获取指定的属性值,其类型为Object
●getValueNames()
返回一个包含此session中所有可用属性的数组
●removeValue("属性名")
删除session中指定的属性
●invalidate()
取消session,使session不可用
五、全局对象application
Web服务器一旦启动,就会自动创建application对象,并一直保持,直到服务器关闭。
application对象负责提供应用程序在服务器中运行时的一些全局信息,客户端使用的application对象都是一样的。在此期间,在任何地方对application对象相关属性的操作,都将影响到其他用户对此的访问。
application对象可以实现网站所有用户的数据共享和传递。
对象application是javax.servlet.ServletContext接口类型的实例。
application为全局变量,session为局部变量。
application对象的常用方法:
●setAttribute(属性名,属性值) 设置指定属性名称的属性值
如果指定的属性不存在,则新建一个;如果已经存在,则更改该属性的值。
●getAttribute(属性名) 获取指定的属性值
如果属性不存在,则返回空值(null)
●getServerInfo() 返回当前版本Servlet编译器的信息
●getAttributeNames() 获取所有属性的名称
例如:
<%
int visit_num;
String s=(String)application.getAttribute("num");
if(s!=null)
visit_num=Integer.parseInt(s);
else
visit_num=1;
if(session.isNew())
visit_num=visit_num+1;
application.setAttribute("num", String.valueOf(visit_num));
%>
<h3>欢迎您!您是本页面的第<%=visit_num %>位访客。</h3>
复制访问地址,使用另一个不同类型的浏览器访问,以观察人数的变化。
%>
六、上下文对象pageContext
七、Cookie信息的建立与使用
Cookie是指某些网站为了辨别用户身份,进行session跟踪而储存在用户本地终端上的数据(通常会经过加密处理),也称浏览器缓存。
Cookie是由Web服务器端生成的信息,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下一次请求同一网站时就可以发送该Cookie给服务器。
Cookie可以保持登录信息到用户下次与服务器的会话,即下一次访问同一网站时,用户发现不必输入用户名和密码就已经登录了(不排除用户手工删除Cookie)。
Cookie信息是指存放在客户端硬盘中的信息。
//javax.servlet.http.Cookie
Cookie类提供的主要方法:
●Cookie(String name, String value)
构造方法,实例化对象
●Cookie[ ] getCookies() (request.getCookies())
获取客户端设置的全部Cookie (获取存放在客户端硬盘里的Cookie名称信息)
●response.addCookie()
将某个Cookie信息发送至客户端
●getName()
获得Cookie的属性名
●getValue()
获得Cookie的属性值
●setMaxAge(int)
设置Cookie的保存时间,单位为秒
若int为正值,表示Cookie将在多少秒以后失效;为负值,表示当浏览器关闭时,该Cookie将会被删除。
例如:
//cookier.jsp
<%
Cookie[] c = request.getCookies();
if(c!=null){
out.write("目前,本机可用的Cookie信息如下:<hr/>");
for(int i = 0; i < c.length; i++){
out.println(c[i].getName()+"---"+c[i].getValue()+"<br/>");
}
}else{
out.write("本机没有可以使用的Cookie信息!");
}
%>
//cookiew.jsp
<%
Cookie myCookie1=new Cookie("dt", "22");
Cookie myCookie2=new Cookie("hj", "22");
myCookie1.setMaxAge(15);
myCookie2.setMaxAge(35);
response.addCookie(myCookie1);
response.addCookie(myCookie2);
out.write("已经成功建立了两个自定义的Cookie信息!");
out.write("Web服务器为来访者创建的JSESSIONID"+session.getId());
%>