Java EE JSP内置对象及表达式语言
一、JSP内置对象
JSP根据Servlet API规范提供了一些内置对象,开发者不用事先声明就可使用标准变量来访问这些对象。
JSP提供了9种内置对象:
(一)、request
简述:
JSP编程中最常用的对象,代表来自客户端的请求,调用request对象相应的方法可以获取关于客户请求的信息。
常见方法的用法示例:
1 <font size=5> 2 <br>客户端使用的协议是: 3 <% 4 String protocol = request.getProtocol(); 5 out.println(protocol); 6 %> 7 <br>获取接收客户提交信息的页面: 8 <% 9 String path = request.getServletPath(); 10 out.println(path); 11 %> 12 <br>获取客户提交信息的长度: 13 <% 14 int length = request.getContentLength(); 15 out.println(length); 16 %> 17 <br>获取HTTP头文件中User-Agent的值: 18 <% 19 String headerFirst = request.getHeader("User-Agent"); 20 out.println(headerFirst); 21 %> 22 <br>获取HTTP头文件中accept的值: 23 <% 24 String headerSecond = request.getHeader("accept"); 25 out.println(headerSecond); 26 %> 27 <br>获取HTTP头文件中Host的值: 28 <% 29 String headerThird = request.getHeader("Host"); 30 out.println(headerThird); 31 %> 32 <br>获取HTTP头文件中accept-encoding的值: 33 <% 34 String headerFourth = request.getHeader("accept-encoding"); 35 out.println(headerFourth); 36 %> 37 <br>获取客户的IP地址: 38 <% 39 String IP = request.getRemoteAddr(); 40 out.println(IP); 41 %> 42 <br>获取客户机的名称: 43 <% 44 String clientName = request.getRemoteHost(); 45 out.println(clientName); 46 %> 47 <br>获取服务器的名称: 48 <% 49 String serverName = request.getServerName(); 50 out.println(serverName); 51 %> 52 <br>获取服务器的端口号: 53 <% 54 int serverPort = request.getServerPort(); 55 out.println(serverPort); 56 %> 57 </font>
(二)、response
简述:
该对象用于向客户端发送数据,例如Cookie、HTTP文件头信息等数据。
通过response对象组织发送到客户端的信息,但组织方式比较底层故不建议一般程序开发人员使用,一般需向客户端发送文字信息时直接用out对象。
常见方法的用法说明及示例:
①、addCookie(Cookie cookie):向response对象添加一Cookie对象来保存客户端的用户信息,通过request对象的getCookies()方法获取该Cookie。
1 Cookie cookie = new Cookie("name","dlut"); 2 response.addCookie(cookie);
②、addHeader(String name,String value):向response对象添加HTTP文件头,该头文件会传到客户端,若同名文件头存在则覆盖原来的文件头。
③、containsHeader(String name):判断response对象中指定名字的HTTP文件头是否存在。
④、sendError(int sc):向客户端发送错误信息。
⑤、setHeader(String name,String value):设定指定名字的HTTP文件头的值,若该值存在改值将被新值覆盖。
1 eg:让网页每隔5秒刷新一次 2 response.setHeader("Refresh","5");
⑥、setContentType(String value):设定返回response对象的类型。
⑦、sendRedirect(String url):将请求重新定义到一个新的页面。
(三)、out
简述:
out对象表示向客户端发送数据的对象,通过该对象发送的内容将在浏览器上显示,属于文本。
out对象内部包含了一个缓冲区。
常用方法:
print()、println()、clear()、clearBuffer()、flush()、getBufferSize()及getRemaining()
(四)、session
简述:
会话(session)是同一个用户发起的多个请求的集合,当用户第一次向站点发送请求时,服务器会创建一会话(session)对象,并为该对象分配一个唯一的会话ID,该会话ID作为每个请求的一部分传递,以此将用户与会话对象匹配便于让服务器跨多个请求记住客户机的状态。
会话(session)中保存和检索的信息必须是Java Object对象,而不是int等基本数据类型。
用法说明:
1.获取会话(session)对象
通过调用HttpServletRequest的getSession()获取当前请求的session对象。通常通过制定getSession()的参数为true使不存在现成的会话时自动创建一会话对象。
1 HttpSession session = request.getSession(true);
HttpSession对象生存与服务器上,通过Cookie或URL这类后台机制自动关联到请求的发送者。
2.存储与读取属性值
会话对象提供了一个内建的数据结构,该结构可以保存任意数量的键值对。
(1).存储
通过调用session对象的setAttribute(String name,Object object)方法存储属性值。
(2).读取
通过调用session对象的getAttribute(String name)方法读取属性值。
(五)、application
简述:
该对象代表运行在服务器上的Web应用程序,相当于Servlet上下文。
该对象一旦创建后会一直保持下去直至服务器关闭。
常见方法的用法说明:
方法名称 | 方法说明 |
getAtteibute(String name) | 返回由name指定名字的application对象属性的值,该值为一Object对象。 |
setAttribute(String name,Object object) | 用object初始化某个属性,该属性由name指定。 |
getAtteibuteNames() | 返回所有application对象属性的名字,结果集是一Enumeration(枚举)类的实例。 |
getInitParameter(String name) | 返回application初始化参数属性值,属性由name指定。 |
getServerInfo() | 获得当前版本Servlet编译器的信息。 |
getMimeType() | 获取组件MIME的类型。 |
getRealPath() | 获取组件在服务器上的真实路径。 |
(六)、config
简述:
config内置对象是ServletConfig类的一个实例,用于JSP引擎在Servlet初始化时,通过config向它(Servlet)传递信息。这种信息可以是属性名/值匹配的参数,也可以是通过ServletContext对象传递的服务器的有关信息。一般在JSP开发中很少用到config内置对象,只有在编写Servlet时若需要重载Servlet的init()方法时才会用到。
常用方法:
方法名称 | 方法说明 |
getServletContext() | 返回 一个含有服务器相关信息的ServletContext对象。 |
getInitParameter(String name) | 返回初始化参数的值 |
getInitParameterNames() | 返回包含了Servlet初始化所需要的所有参数,返回类型是枚举型 |
(七)、pagecontext
简述:
pageContext内置对象是一个比较特殊的对象,它相当于页面中所有其他对象功能的最大集成者,即使用它可以访问到本页面中所有其他的对象,例如前面已经描述的request、response、out和page对象等。由于在JSP中request和response等对象本来就可以通过直接调用方法使用,所以pageContext对象在实际JSP开发中很少使用到。
常用方法:
方法名称 | 方法说明 |
getRequest() | 返回当前页面中的request对象。 |
getResponse() | 返回当前页面中的response对象。 |
getSession() | 返回当前页面中的session对象。 |
getServletContext() | 返回当前页面中的application对象。 |
getPage() | 返回当前页面中的page对象。 |
getOut() | 返回当前页面中的out对象。 |
getException() | 返回当前页面中的exception对象。 |
getServletConfig() | 返回当前页面中的config对象。 |
setAttribute(String name) | 给指定的属性名设置属性值。 |
getAttribute(String name) | 根据属性名找到相应的属性值。 |
setAttribute(String name, Object obj, int scope) | 在给定的范围内设置相应的属性值。 |
getAttribute(String name, int scope) | 在给的范围内获取相应的属性值。 |
findAttribute(String name) | 寻找一个属性并返回,如果查找不到则返回null。 |
removeAttribute(String name) | 通过属性名删除掉某个属性。 |
removeAttribute(String name, int scope) | 在指定的某个范围里删除某个属性。 |
getAttributeScope(String name,int scope) | 返回某属性的作用域。 |
getAttributeNamesInScope(int scope) | 返回指定范围内的所有属性名的枚举。 |
release() | 释放pageContext占据的所有资料。 |
forward(String relativeURLpath) | 使用当前页面重导到另一个页面。 |
include(String relativeURLpath) | 使用当前位置包含的另一个页面。 |
(八)、page
简述:
page对象有点类似于Java编程中的this指针,就是指当前JSP页面本身。page是java.lang.Object类的对象。page对象在实际开发过程中并不经常使用。
常用方法:
方法名称 | 方法说明 |
getClass() | 返回当时Object的类。 |
hashCode() | 返回此时Object的哈希代码。 |
toString() | 将此时的Object类转换成字符串。 |
equals(Object object) | 比较此对象是否与指定的对象相等。 |
copy(Object object) | 将此对象复制到指定的对象中。 |
clone() | 对此对象进行克隆。 |
(九)、exception
简述:
该对象用来处理JSP文件在执行时所有发生的错误及异常。
常用方法:
方法名称 | 方法说明 |
getMessage() | 返回错误信息。 |
printStackTrace() | 以标准错误形式输出一个错误及错误的堆栈。 |
toString() | 以字符串形式返回一个对异常的描述。 |
注意事项:(很重要)
必须在<%@page isErrorPage="true"%>的情况下才可以使用内嵌对象exception。
二、JSP内置对象对应类型及作用范围
JSP内置对象 | 对应类型 | 作用范围 |
request | javax.servlet.servletRequest | request |
response | javax.servlet.servletResponse | page |
session | java.servlet.http.HttpSession | session |
application | java.servlet.servletContext | application |
page | java.lang.Object | page |
out | java.servlet.jsp.JspWrite | page |
pagecontext | java.servlet.jsp.PageContext | page |
config | java.servlet.servletConfig | page |
exception | java.lang.throwable | page |
三、表达式语言
表达式语言(EL):与JSP脚本相比,EL提供了一种更加简便的生成动态Web页面的方式。
基本语法:
${expr}:$为EL语法中的输出符号,expr为EL有效表达式。EL有效表达式包含文字、操作符、变量(对象引用)及函数调用。
基本语法示例:
1 <!--Boolean--> 2 ${true }<br> 3 <!--Integer与Float--> 4 ${23 + 15.28 }<br> 5 ${13 < 5 }<br> 6 ${(12 > 5)&&(a!=b) }<br> 7 <!--String--> 8 ${"Hello!" }<br> 9 <!--Null--> 10 ${null }<br>
隐式对象:
EL表达式语言除了输出JSP页面中定义变量外还可对JSP页面的相关信息进行操作。为方便这些操作,EL提供了11个隐式对象。
类别 | 标识符 | 描述 |
JSP | pageContext | JSP页面的上下文 |
作用域 | pageScope | 与page作用域的属性名称和值相关联的Map类 |
requestScope | 与request作用域的属性名称和值相关联的Map类 | |
sessionScope | 与session作用域的属性名称和值相关联的Map类 | |
applicationScope | 与application作用域的属性名称和值相关联的Map类 | |
请求参数 | param | 存储请求参数名值对的Map类 |
paramValues | 将请求参数的所有值作为String数组存储的Map类 | |
请求头 | header | 按名称存储请求头部主要值的Map类 |
headerValues | 按请求头部的所有值作为String数组存储的Map类 | |
Cookie | cookie | 按名称存储请求附带的Cookie的Map类 |
初始化参数 | initParam | 按名称存储Web应用程序上下文初始化参数的Map类 |
这11个隐式对象中只有pageContext是与JSP内置对象所共有的。
因pageContext拥有访问所有其他8个JSP内置对象的功能,故可通过EL访问所有的JSP内置对象。
EL11个隐式对象中除pageContext以外其他的隐式对象均为Map类型。
存取器:
EL提供了两种不同的存取器:
1.点运算符:"." 通常用于访问对象的属性。
2.方括号运算符:"[]" 用于检索数组和集合的元素。
与JSP脚本不同的是若应用EL存取器的对象为null时,那么EL将输出null到JSP页面而不会抛出异常。