Java EE---JSP内置对象

(一)什么是JSP内置对象

指在JSP页面中内置的不需要定义就可以在网页中直接使用的对象

内置对象预定义的原因:     

JSP 程序员一般情况下使用这些内置对象的频率比较高。 

内置对象的特点:

内置对象是自动载入的,因此它不需要直接实例化;

内置对象是通过 Web 容器来实现和管理的;

在所有的 JSP 页面中,直接调用内置对象都是合法的。

(二)九大内置对象

(1)输入/输出相关 

request:负责得到客户端的请求信息

response :负责向客户端发出响应

out:负责管理对客户端的输出

(2)上下文相关

session :表示浏览器与服务器会话的上下文环境

application:表示应用程序的上下文环境

pageContext :表示的是此 JSP 的上下文 

(3)Servlet相关 

page :表示当前 JSP 页面本身,即this

config :表示此 JSP 的 ServletConfig 

(4)Error相关

 exception:表示页面上发生的异常

(5)补充一个

Cookies操作

(三)详细介绍

 1、request对象

 类型:javax.servlet.http.HttpServletRequest

request对象获取客户端基本信息的方法:

String getProtocol()          

String getServerName()

String getServerPort()      

String getRemoteAddr()

String getMethod()

String getRequestURL()

String getRequestURI()      

String  getQueryString()

String getServletPath()

request对象获取客户端参数的方法

String getParameter(String name):

String[] getParameterValues(String name)

Enumeration getParameterNames()

使用request对象获取客户端提交的信息

String name = request.getParameter("userName");

 使用request对象存取数据

void setAttribute(String key, Object obj):

将参数obj指定的对象保存到request对象中,key为所保存的对象指定一个关键字。 

Object getAttribute(String key):

获取请求域(如:forward转发)中的关键字为key的对象(属性值)。

注意:

1.request、session、application等对象均具有“容器”功能,即可以在其中“存入对象”,也可以“取出对象”;

2.解决request中的中文乱码问题request.setCharacterEncoding("UTF-8");

2、response对象

重定向发生在客户端、地址栏不变、数据共享(一次跳转)、两次跳转数据不共享

  类型:javax.servlet.http.HttpServletResponse      

 response对象常用方法

重定向:response.sendRedirect(String url)

动态改变contentType属性值:response.setContentType(String s)

设置HTTP头: response.setHeader(String name,String value)

response的重定向方法

格式:response.sendRedirect(目标页面路径);

功能:跳转到另一个页面,可以是任意页面

如,response.sendRedirect("loginSuccess.jsp");

动态改变contentType的值 

格式:response.setContentType(String s)

功能:重新设置contentType的属性值,使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。

注意:请求转发与重定向跳转的比较 

 浏览器地址:forward 地址不变;redirect 地址改变

数据共享:forward 能够共享 ;redirect 不能共享

效率:forward效率较高;redirect效率相对较低

功能:forward 方法只能在同一个 Web 应用程序内的资源之间转发请求;redirect  能够重定向到任何资源

跳转语句后面代码的执行情况:执行到forward标记停止后面代码的执行,重定向是在所有代码执行完毕之后跳转

3、设置响应表头

格式:response.setHeader(String name,String value) 

功能:设置指定名字的HTTP文件头值,以此来操作HTTP文件头。

示 例://每3秒钟刷新一次页面

response.setHeader("refresh","3");      

//页面3秒后跳到another.jsp文件

response.setHeader("refresh","3;url=another.jsp");

4、Cookie技术

是Web服务器发送给客户端的一段文本信息,它保存在客户端的硬盘上,对于后续请求,客户端将文本信息发送回给同一服务器。简单地说,Cookie是暂存于客户端的信息(以name=value形式) 

 Cookie工作原理

  1. 是一小段文本数据(以name=value形式),由服务器端生成,发送给客户端浏览器;
  2. 如果客户端浏览器允许使用Cookie,则会将这段文本保存在客户端硬盘的某一个目录下的文本文件内;
  3. 当客户端请求时,浏览器会读取保存在硬盘上Cookie信息,传送到服务器,服务器就能获取相关信息;若服务器执行Cookie写入操作,也是通过客户端浏览器来增加、修改、删除Cookie;
  4. 除了sessionID外,Cookie还能保存其它信息。 

1、Cookie编程

创建Cookie对象

格式:Cookie 对象名=new Cookie(“Cookie名称”,”值”); 

2、设置Cookie对象的属性

Cookie 常用API:

void setMaxAge(int expiry) :设置Cookie最大保存时间(秒)

expiry>0,Cookie将会被保存在客户端的硬盘上;

expiry<0数(默认值-1),客户端浏览器关闭时,Cookie被删除;

expiry=0,Cookie被删除。

例如:c.setMaxAge(365*24*3600);//设置存活期为1年

3、发送Cookie到客户端

格式:response.addCookie(Cookie c)

将Cookie写到客户端

<%
    //1. 实例化两个Cookie   			
    Cookie cookie1 = new Cookie("account","sa");    
    Cookie cookie2 = new Cookie  (“text”,URLEncoder.encode(“2020奥运会","utf-8"));  	
    //2. 设置Cookie的生命期限,分别为2、10分钟
    cookie1.setMaxAge(120);   
    cookie2.setMaxAge(600);  
		
    //3. 添加Cookie到客户端
    response.addCookie(cookie1);
    response.addCookie(cookie2); 
%>

4、 从客户端读取Cookie

从客户端读取你感兴趣的cookie,需要两个步骤:

调用request.getCookies()得到一个Cookie对象的数组;

调用每个cookie的getName方法,从数组中寻找所需的Cookie,再调用getValue()方法得到值。

<%
	Cookie[] cookies = request.getCookies();
	for (int i = 0; i < cookies.length; i++) {
        String cN = cookies[i].getName();
	    String cV = cookies[i].getValue();
	    out.print("Cookie名称:"+cN+","+"Cookie值 "+cV+"<br>");
	}
%>

 

 修改后的readCookie2.jsp主要代码:

<%
    Cookie[] cookies = request.getCookies();
    for (int i = 0; i < cookies.length; i++) {
        String cName = cookies[i].getName();
        if (cName.equals("text")) {
            String cValue = URLDecoder.decode(cookies[i].getValue(), "utf-8");
            out.print("Cookie名称:" + cName + "," + "Cookie值 " + cValue + "<br>");
        }
    }
%>

Cookie常用场合 

记录用户名和用户密码,允许用户下次自动登录;

定制站点,记录用户的偏好;

定向广告,记录用户感兴趣的主题,并显示与之相关的广告。 

Cookie不足之处 

Cookie并不是绝对安全的,信息容易泄露。

目前Cookie盗取的方法:

1) 利用跨站脚本技术 ,将信息发送给目标服务器;

2) 通过某些软件盗取硬盘下的Cookie。 

3、out对象

类型:javax.servlet.jsp.JspWriter 

作用: 用来向客户端输出各种数据类型的内容

对应用服务器上的输出缓冲区进行管理

out 输出主要有 2 个方法:       void print()         void println()

out 对象管理缓冲区常用方法      

void close();

void clearBuffer();

void clear();      

int getRemaining();

int getBufferSize();      

void flush();

 4、session对象

(1)会话 :在指定的时间段中来自同一客户端的一系列HTTP请求。

如果客户端能在规定时间内不断向服务器提出请求,这些请求就属于同一会话;会话从客户端连到服务器的一个Web应用程序开始,直到客户端与服务器端断开为止。

JSP中的内置对象session就是进行会话管理对象。

(2)sessionID

类型:javax.servlet.http.HttpSession

问:客户在访问多个页面时,多个页面用到  session,服务器如何知道该客户的多个页面使用的是同一个 session?

答:每个 session,服务器端都有一个 sessionID来标识; 获取sessionID 的方法:String  session.getId();。

 (3)使用session存取数据

通过session对象设置属性、获取属性,可设置、获取会话信息

void setAttribute(String name, Object obj) :设置属性

Object getAttribute(String name) :获取属性

Enumeration getAttributeNames() :获取属性名(多个)

void removeAttribute(String name) :删除指定属性

(4)session对象其他API

long getCreationTime():返回session被创建的时间(自1970.1.1 GMT算起),单位毫秒

long getLastAccessedTime() :返回session最后被客户发送的时间,计算方法同getCreateTime()

boolean isNew() :如果客户端不知道这个会话或没有选择加入这个会话,返回值为true

void invalidate() :强制会话失效,在用户注销时常使用

void setMaxInactiveInterval(int interval) :设置会话最长的空闲时间(单位为秒),超时将失效

int getMaxInactiveInterval() :获取会话最长空闲时间

(5)会话结束条件(session对象的生命周期)

会话过期:空闲时间超过指定期限(如:30分钟)  

强制失效:服务器的session对象调用invalidate()方法(在用户注销时常使用)  

客户关闭浏览器:不够准确,浏览器关闭时将丢失保存在内存的sessionID,无法继续与服务器联系,只有会话过期才真正结束。

在web.xml中配置session的最长空闲时间 :

<session-config>      

        <session-timeout>整数(负数永不过期,单位:分钟)</session-timeout>

</session-config>

 5、application对象

类型:javax.servlet.ServletContext

基本功能:同一个应用程序的所有页面共享其中的数据

原理:对于一个 Web 容器而言,所有的用户都共同使用一个 application 对象,服务器启动后,就会自动创建 application 对象,这个对象会一直保存,直到服务器关闭为止。

比较application与session不同 

application 对象常用API

对象

类型

作用范围

pageContext

javax.servlet.jsp.PageContext

页面范围

request

javax.servlet.http.HttpServletRequest

请求范围

session

javax.servlet.http.HttpSession

会话范围

application

javax.servlet.ServletContext 

应用上下文范围

6、pageContext对象 

类型:javax.servlet.jsp.PageContext

作用:它代表当前JSP页面的运行环境,可以获取JSP的另外八个隐式对象。获取其他隐式对象的方法如下表: 

pageContext对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。具体如下:

pageContext对象存取属性的方法

pageContext对象的作用范围有四个值,具体如下:

pageContext.PAGE_SCOPE:表示页面范围

pageContext.REQUEST_SCOPE:表示请求范围

pageContext.SESSION_SCOPE:表示会话范围

pageContext.APPLICATION_SCOPE:表示Web应用程序范围 

 7、其他内置对象

 page对象是一个与Servlet有关的内置对象,它表示JSP文件转译后的Servlet对象,代表JSP页面本身即this。因此它可以调用Servlet类所定义的方法。

config对象即页面配置对象,表示当前JSP页面转译后的Servlet的ServletConfig对象,存储着一些初始数据。

exception对象是java.lang.Exception类的实例对象,它用于封装JSP中抛出的异常信息。

(四)JSP的四种作用域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值