Servlet是一个Java类,采用CGI方式逐句输出HTML语句,主要用于业务逻辑层,实现业务逻辑的处理。JSP将Java代码嵌套在HTML中,简化和方便了网页的设计和修改。是为实现表示层而设计的,主要完成界面的显示逻辑。其中jsp的隐式对象都一一对应一个Java类实例。
【1】与作用域范围有关的四个隐式对象
pageScope、requestScope、sessionScope和applicationScope。
它们可以读取使用JSP内置对象pageContext、request、session以及application的setAttribute()方法所设定的对象的数值-----即getAttribute(Stringname),却不能取得其他相关信息。
例如,要取得session中储存的一个username属性的值,可以利用下面的方法:
##设置属性如下 pageContext.setAttribute("name","tomcat"); request.setAttribute("name", "jane"); session.setAttribute("name", "janus"); application.setAttribute("name","lucy");
在EL中则使用下面的方法:
${pageScope.username} ${requestScope.username} ${sessionScope.username} ${applicationScope.username}
注意:如果没有设定使用EL内置对象的作用范围,则按照pageScope、requestScope、sessionScope和applicationScope的先后顺序读取属性值。
即,通知JSP引擎调用pageContext.findAttribute()
方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为“”
(注意,不是null)。
【2】与输入有关的两个隐式对象
param和paramValue,主要用于取得请求参数。
request.getParameter(Stringname) request.getParameterValues(String name)
在EL表达式中则可以使用param和paramValues两者来取得数据:
${param.name}*****${paramValues.name}
【3】cookie
用来取得使用者的cookie值,例如在cookie中设定了username属性值,可以使用如下格式获取值:
${cookie.JSESSIONID.value}
【4】header和headerValues
读取请求的头数据,使用header或headerValues内置对象。headerValues则用来取得所有的头信息,等价于调用request.getHeaders()
方法。EL表达式实例如下:
${header["User-Agent"]} ${headerValues}
【5】initParam
initParam用来读取设置在web.xml中的参数值。
例如${initParam.repeat}
,
等价于:(String)application.getInitParameter(“repeat”);
或:servletContext.getInitParameter(“repeat”)。
【6】pageContext
pageContext用于取得其他有关用户要求或页面的详细信息,提供了对JSP页面内所有的对象及名字空间的访问,使用它可以访问request、session和application等对象中的内容。pageContext是PageContext类型的实例。
${pageContext.request.queryString}:取得请求的参数字符串 ${pageContext.request.requestURL}: 取得请求的URL,不包括参数字符串 ${pageContext.request.contextPath}: 服务的web application 的名称 ${pageContext.request.method}: 取得HTTP 的方法(GET、POST) ${pageContext.request.protocol}:取得使用的协议(HTTP/1.1、HTTP/1.0) ${pageContext.request.remoteUser}: 取得用户名称 ${pageContext.request.remoteAddr}: 取得用户的IP 地址 ${pageContext.session.new}: 判断session 是否为新的 ${pageContext.session.id}: 取得session 的ID ${pageContext.servletContext.serverInfo}:取得主机端的服务信息
如下在页面使用el表达式pageContext可以获取如下属性:
【7】request对象
request代表请求对象,主要用于接受客户端通过HTTP协议链接传输到服务器端的数据。它是HttpServletRequest对象的实例。
生命周期:一次请求或使用forward方式执行请求转发。
【8】response对象
response代表响应对象,主要用于向客户端发送数据。它是HttpServletResponse对象的实例。
【9】session对象
session对象储存在服务器内存中,用于跟踪用户信息。默认有效期一般在30分钟左右。session代表客户端与服务器的会话,从客户连到服务器开始,直到客户端与服务器断开连接为止。session对象主要用于保存用户信息,它是HttpSession类型的实例。
生命周期:当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。会话超时或者服务器强制使session失效。
【10】out对象
out主要用于向客户端输出数据。它是JspWriter类型的实例。
【11】page对象
page对象代表了当前JSP页面的本身,有点类似于this关键字。它是java.lang.Object类的实例。
作用范围:一个JSP页面有效;
【12】application对象–非线程安全
application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器关闭。application是ServletContext类型的实例。
【13】exception对象
exception对象是一个异常对象,当页面在运行过程中产生异常时,就产生该对象。exception是java.lang.Throwable类型的实例。
常用方法如下:
String getMessage()--返回描述异常的信息; String toString()--返回关于异常的简短描述消息; void printStackTrace()--显示异常及其栈轨迹; Throwable FillInStackTrace()--重写异常的执行栈轨迹;
如果在一个JSP页面中使用该对象,则必须设置 “isErrorPage = true
”!!
【14】config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的。此信息包括Servlet初始化时所要用到的参数以及服务器有关的信息。config是ServletConfig类型的实例。
常用方法如下:
ServletContext getServletContext()--返回含有服务器相关信息的ServletContext对象; String getInitParameter(String name)--返回初始化参数的值; Enumeration getInitParameterNames()--返回Servlet初始化所需的所有参数的枚举;
【15】四种会话作用域
所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。
page域 数据在一个页面范围内有效,通过pageContext对象访问。 request域 数据在一个服务器请求范围内有效,通过request对象访问。 session域 数据在一次会话范围内容有效,通过session对象访问。 application域 数据在一个应用服务器范围内有效,通过application对象访问。
JSP中内置对象及其相应所属作用域如下表: