Web基础知识(11)- JSP (三)
作者:互联网
JSP 隐式(内置)对象
为了简化页面的开发过程,JSP 提供了一些内置对象。
JSP 内置对象又称为隐式对象,它们由容器实现和管理。在 JSP 页面中,这些内置对象不需要预先声明,也不需要进行实例化,我们可以直接在脚本和表达式中使用。
JSP 中定义了 9 个内置对象:
对象 | 说明 |
request | 获取用户请求信息,类型是 javax.servlet.http.HttpServletRequest |
response | 响应客户端请求,并将处理信息返回到客户端,类型是 javax.servlet.http.HttpServletResponse |
out | 输出内容到 HTML 中,类型是 javax.servlet.jsp.JspWriter |
session | 用来保存用户信息,类型是 javax.servlet.http.HttpSession |
application | 所有用户共享信息,类型是 javax.servlet.ServletContext |
config | Servlet 配置对象,用于 Servlet 和页面的初始化参数,类型是 javax.servlet.ServletConfig |
pageContext | JSP 的页面容器,用于访问 page、request、application 和 session 的属性,类型是 javax.servlet.jsp.PageContext |
page | 类似于 Java 类的 this 关键字,表示当前 JSP 页面,类型是 javax.servlet.jsp.HttpJspPage |
exception | 该对象用于处理 JSP 文件执行时发生的错误和异常;只有在 JSP 页面的 page 指令中指定 isErrorPage 的取值 true 时,才可以在本页面使用 exception 对象,类型是 java.lang.Throwable |
*注:本文暂时不讨论 exception 对象,后期单独讨论 JSP 异常处理
JSP 的内置对象主要特点:
(1) 由 JSP 规范提供,不用编写者实例化;
(2) 通过 Web 容器实现和管理;
(3) 所有 JSP 页面均可使用;
(4) 只能在脚本和表达式中使用,在声明中不能使用。
1. JSP request 对象
JSP request 是 javax.servlet.http.HttpServletRequest 的实例对象,主要用来获取客户端提交的数据。
request 对象提供了一系列方法,可以获取请求参数信息、表单数据、HTTP 头信息、cookie 和 HTTP 请求方法等。request 对象常用方法如下表所示。
request 对象常用方法:
方法 | 说明 |
String getParameter(String name) | 获取请求参数 name 的值 |
Enumeration getParameterNames() | 获取所有参数名称 |
String[] getParameterValues(String name) | 获取请求参数 name 的所有值 |
Object getAttribute(String name) | 获取 name 属性的值 |
Enumeration getAttributeNames() | 返回所有属性的名称集合 |
void setAttribute(String key, Object value) | 给 key 对象赋 value 值 |
void removeAttribute(String name) | 删除指定的 name 属性 |
cookie[] getCookies() | 获取所有的 cookie 对象 |
HttpSession getSession() | 返回 request 对应的 session 对象,如果没有则创建一个 session 对象 |
HttpSession getSession(boolean create) | 返回 request 对应的 session 对象,如果没有,且 create 值为 true,则创建一个 session 对象 |
Enumeration getHeaderNames() | 返回 HTTP 头信息的名称集合 |
String getHeader(String name) | 获取 name 指定的 HTTP 头信息 |
String getMethod() | 获取 HTTP 请求方法/客户提交信息方式 |
示例,在 request.jsp 页面使用 getHeaderNames() 方法获取 HTTP 头信息,并遍历输出参数名称和对应值。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>Request</title> 7 </head> 8 <body> 9 <h2>Get Request Header Info</h2> 10 <table width="100%" border="1" align="center"> 11 <tr bgcolor="#949494"> 12 <th>Parameter</th> 13 <th>Value</th> 14 </tr> 15 <% 16 Enumeration headerNames = request.getHeaderNames(); 17 while (headerNames.hasMoreElements()) { 18 String paramName = (String) headerNames.nextElement(); 19 out.print("<tr><td>" + paramName + "</td>\n"); 20 String paramValue = request.getHeader(paramName); 21 out.println("<td> " + paramValue + "</td></tr>\n"); 22 } 23 %> 24 </table> 25 </body> 26 </html>
2. JSP response 对象
JSP response 是 javax.servlet.http.HttpServletResponse 的实例对象。response 对象和 request 对象相对应,主要用于响应客户端请求,将处理信息返回到客户端。
response 对象的常用方法如下:
方法 | 说明 |
void addHeader(String name, String value) | 添加头信息(参数名称和对应值) |
void addCookie(Cookie cookie) | 添加 cookie 信息 |
void sendRedirect(String location) | 实现页面重定向 |
void setStatus(int status) | 实现页面的响应状态代码 |
void setContentType(String type) | 设置页面的 MIME 类型和字符集 |
void setCharacterEncoding(String charset) | 设定页面响应的编码类型 |
示例,response.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <title>Response</title> 6 </head> 7 <body> 8 <% if ("POST".equals(request.getMethod())) { 9 String username = request.getParameter("username"); 10 String password = request.getParameter("password"); 11 if ("admin".equals(username) && "123456".equals(password)) { 12 response.sendRedirect("success.jsp"); 13 } else { 14 response.sendRedirect("failed.jsp"); 15 } 16 } else { %> 17 <h2>User Login</h2> 18 <form method="post" action=""> 19 <p>Username: <input type="text" name="username" value="admin"/></p> 20 <p>Password: <input type="text" name="password" value="123456"/></p> 21 <p><input type="submit" value="Login" /></p> 22 </form> 23 <% } %> 24 </body> 25 </html>
success.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <h2>Login successfully!</h2> 6 </body> 7 </html>
failed.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <body> 4 <h2>Login failed, invalid username or password!</h2> 5 </body> 6 </html>
3. JSP out 对象
JSP out 是 javax.servlet.jsp.JspWriter 的实例对象。out 对象包含了很多 IO 流中的方法和特性,最常用的就是输出内容到 HTML 中。
out 对象的常用方法如下:
方法 | 说明 |
void print() | 将内容直接打印在 HTML 标签中 |
void println() | 类似于 print,唯一区别是 println 方法添加了换行符 |
void newLine() | 输出换行字符 |
void clear() | 清除页面缓冲区 |
boolean isAutoFlush() | 检查页面是否自动清除缓冲区 |
out 对象的方法相对比较简单,一般情况下很少使用。下面我们使用 out 对象的 print、println 和 newLine 方法将内容输出到 HTML 中。
示例:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <% 6 out.print("JSP out object test page"); 7 out.newLine(); 8 out.println("Test println()"); 9 out.print("Test print()"); 10 %> 11 </body> 12 </html>
4. JSP session 对象
JSP session 是 javax.servlet.http.HttpSession 的实例对象,主要用来访问用户数据,记录客户的连接信息。
HTTP 协议是一种无状态的协议(即不保存连接状态的协议)。每次用户向服务器发出请求,且服务器接收请求并返回响应后,该连接就被关闭了,服务器端与客户端的连接被断开。此时,服务器端不保留连接的有关信息,要想记住客户的连接信息,就用到了 session 对象。
session 对象的常用方法如下:
方法 | 说明 |
void setAttribute(String name, Object value) | 将参数名和参数值存放在 session 对象中 |
Object getAttribute(String name) | 通过 name 返回获取相应的 value 值,如果 name 没有相应的 value 值,则返回 null |
void removeAttribute(String name) | 删除指定的 name 参数 |
Enumeration getAttributeNames() | 获取 session 对象中存储的所有参数 |
long getCreationTime() | 返回 session 对象创建的时间 |
String getId() | 获取 session 对象的 ID 值 |
boolean isNew() | 用于检查 session 对象是不是新对象,如果客户端禁用了 cookie ,则 session.isNew() 始终返回 true |
void invalidate() | 终止 session,即指定 session 对象失效 |
void setMaxInactiveInterval() | 设置 session 对象的有效时间,单位:秒 |
int getMaxInactiveInterval() | 获取 session 对象的有效时间,单位:秒 |
long getLastAccessedTime() | 获取上次访问 session 对象的时间 |
示例,session.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <title>Response</title> 6 </head> 7 <body> 8 <% if ("POST".equals(request.getMethod())) { 9 String username = request.getParameter("username"); 10 String password = request.getParameter("password"); 11 if ("admin".equals(username) && "123456".equals(password)) { 12 session.setAttribute("username", username); 13 response.sendRedirect("success.jsp"); 14 } else { 15 out.print("<p>Login failed, invalid username or password!</p>"); 16 } 17 } else { %> 18 <h2>User Login</h2> 19 <form method="post" action=""> 20 <p>Username: <input type="text" name="username" value="admin"/></p> 21 <p>Password: <input type="text" name="password" value="123456" /></p> 22 <p><input type="submit" value="Login" /></p> 23 </form> 24 <% } %> 25 </body> 26 </html>
success.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <p>Welcome, <%=(String)session.getAttribute("username")%></p> 6 </body> 7 </html>
5. JSP application 对象
JSP application 是 javax.servlet.ServletContext 的实例对象。在服务器部署应用和项目时,Web 容器仅创建一次 ServletContext 实例,也就是说 application 设置的任何属性和值可以用于整个应用(所有 JSP 页面)。
可以将 application 对象看作 Web 应用的全局变量。一般用于保存应用程序的公用数据。
application 对象在 Web 应用运行时一直存在于服务器中,非常占用资源,因此在实际开发中不推荐使用,否则容易造成内存不足等情况。
application 对象常用方法如下:
方法 | 说明 |
Object getAttribute(String attributeName) | 获取 attributeName(属性名称)对应的 object |
void setAttribute(String attributeName, Object object) | 设置 attributeName 对应的属性值 |
Enumeration getAttributeNames() | 返回 application 对象中所有的 attributeName |
void removeAttribute(String objectName) | 删除 application 对象中指定 attributeName 的属性 |
String getServerInfo() | 获取当前 Servlet 的版本信息 |
String getRealPath(String value) | 获取指定文件的实际路径 |
示例,application.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <% 6 Integer count = (Integer) application.getAttribute("count"); 7 if (count == null) { 8 count = 1; 9 } else { 10 count++; 11 } 12 application.setAttribute("count", count); 13 %> 14 <p>Welcome to WebBasic, you are the <%=count%> visitor!</p> 15 </body> 16 </html>
6. JSP config 对象
JSP config 是 javax.servlet.ServletConfig 的实例对象,一般用于获取页面和 Servlet 的初始化参数。
config 对象的常用方法如下:
方法 | 说明 |
String getInitParameter(String paramname) | 获取指定的初始化参数值 |
Enumeration getInitParameterNames() | 获取当前页面所有的初始化参数值 |
ServletContext getServletContext() | 获取当前执行 Servlet 的 servletContext(Servlet 上下文)的值 |
String getServletName() | 获取当前执行 Servlet 的名称 |
在 web.xml 文件中定义 Servlet 名称和映射,然后使用 config 对象获取信息。
示例,web.xml 代码如下:
1 <servlet> 2 <servlet-name>ConfigServlet</servlet-name> 3 <jsp-file>/jsp/config.jsp</jsp-file> 4 <init-param> 5 <param-name>url</param-name> 6 <param-value>http://www.test.com</param-value> 7 </init-param> 8 </servlet> 9 <servlet-mapping> 10 <servlet-name>ConfigServlet</servlet-name> 11 <url-pattern>/config</url-pattern> 12 </servlet-mapping>
config.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <% 6 String servletName = config.getServletName(); 7 String url = config.getInitParameter("url"); 8 out.print("Servlet Name: " + servletName + "<br>"); 9 out.print("Url: " + url + "<br>"); 10 %> 11 </body> 12 </html>
7. JSP pageContext 对象
pageContext 是 javax.servlet.jsp.PageContext 的实例对象。pageContext 对象表示整个 JSP 页面,可以获取或删除这些对象的任意属性:page、request、session、application
pageContext 常用的方法如下:
方法 | 说明 |
Object findAttribute (String AttributeName) | 按 page、request、session、application 的顺序查找指定的属性,并返回对应的属性值。如果没有相应的属性,则返回 NULL |
Object getAttribute (String AttributeName, int Scope) | 在指定范围内获取属性值。与 findAttribute 不同的是,getAttribute 需要指定查找范围 |
void removeAttribute(String AttributeName, int Scope) | 在指定范围内删除某属性 |
void setAttribute(String AttributeName, Object AttributeValue, int Scope) | 在指定范围内设置属性和属性值 |
Exception getException() | 返回当前页的 Exception 对象 |
ServletRequest getRequest() | 返回当前页的 request 对象 |
ServletResponse getResponse() | 返回当前页的 response 对象 |
ServletConfig getServletConfig() | 返回当前页的 ServletConfig 对象 |
HttpSession getSession() | 返回当前页的 session 对象 |
Object getPage() | 返回当前页的 page 对象 |
ServletContext getServletContext() | 返回当前页的 application 对象 |
Scope 的值: 1 - page;2 - request;3 - session; 4 - application;
示例,page_context.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <% 6 pageContext.setAttribute("info", "page's value"); 7 request.setAttribute("info", "request's value"); 8 session.setAttribute("info", "session's value"); 9 application.setAttribute("info", "application's value"); 10 %> 11 <p>pageContext.getAttribute("info"):<%=pageContext.getAttribute("info")%></p> 12 <p>pageContext.getRequest().getAttribute("info"):<%=pageContext.getRequest().getAttribute("info")%></p> 13 <p>pageContext.getSession().getAttribute("info"):<%=pageContext.getSession().getAttribute("info")%></p> 14 <p>pageContext.getServletContext().getAttribute("info"):<%=pageContext.getServletContext().getAttribute("info")%></p> 15 <hr> 16 17 <p> pageContext.getAttribute("info", 1):<%=pageContext.getAttribute("info", 1)%></p> 18 <p> pageContext.getAttribute("info", 2):<%=pageContext.getAttribute("info", 2)%></p> 19 <p> pageContext.getAttribute("info", 3):<%=pageContext.getAttribute("info", 3)%></p> 20 <p> pageContext.getAttribute("info", 4):<%=pageContext.getAttribute("info", 4)%></p> 21 <hr> 22 23 <% 24 pageContext.setAttribute("info", "Change page's value", 1); 25 pageContext.setAttribute("info", "Change request's value", 2); 26 pageContext.setAttribute("info", "Change session's value", 3); 27 pageContext.setAttribute("info", "Change application's value", 4); 28 %> 29 <p>执行 pageContext.setAttribute("info", "Change page's value", 1) 后</p> 30 <p> pageContext.getAttribute("info"):<%=pageContext.getAttribute("info")%></p> 31 <p>执行 pageContext.setAttribute("info", "Change request's value", 2) 后</p> 32 <p> pageContext.getRequest().getAttribute("info"):<%=pageContext.getRequest().getAttribute("info")%></p> 33 <p>执行 pageContext.setAttribute("info", "Change session's value", 3) 后</p> 34 <p> pageContext.getSession().getAttribute("info"):<%=pageContext.getSession().getAttribute("info")%></p> 35 <p>执行 pageContext.setAttribute("info", "Change application's value", 4) 后</p> 36 <p> pageContext.getServletContext().getAttribute("info"):<%=pageContext.getServletContext().getAttribute("info")%></p> 37 38 <% 39 pageContext.removeAttribute("info"); 40 %> 41 <p>执行 pageContext.removeAttribute("info") 后</p> 42 <p> pageContext.getAttribute("info"):<%=pageContext.getAttribute("info")%></p> 43 <p> request.getAttribute("info"):<%=request.getAttribute("info")%></p> 44 <p> session.getAttribute("info"):<%=session.getAttribute("info")%></p> 45 <p> application.getAttribute("info"):<%=application.getAttribute("info")%></p> 46 47 </body> 48 </html>
8. JSP page 对象
JSP page 的实质是 java.lang.Object 对象,相当于 Java 中的 this 关键字。page 对象是指当前的 JSP 页面本身,在实际开发中并不常用。
page 对象的常用方法如下:
方法 | 说明 |
class getClass() | 返回当前页面所在类 |
int hashCode() | 返回当前页面的 hash 代码 |
String toString() | 将当前页面所在类转换成字符串 |
boolean equals(Object obj) | 比较对象和指定的对象是否相等 |
void copy (Object obj) | 把对象复制到指定的对象中 |
Object clone() | 复制对象 |
示例
下面通过一个简单的例子来演示 page 中的方法。page.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <% 6 Object obj = null; 7 %> 8 <p>返回当前页面所在类:<%=page.getClass()%></p> 9 <p>返回当前页面的 hash 代码:<%=page.hashCode()%></p> 10 <p>转换成 String 类的对象:<%=page.toString()%></p> 11 <p>page 和 obj 比较:<%=page.equals(obj)%></p> 12 <p>page 和 this 比较:<%=page.equals(this)%></p> 13 </body> 14 </html>
标签:11,Web,String,对象,void,session,JSP,pageContext 来源: https://www.cnblogs.com/tkuang/p/16029035.html