内置对象简介
- JSP 内置对象是 Web 容器创建的一组对象,不需使用 new 关键字就可以直接使用的内置对象。
代码 1
<%
int[] value = {10,20,30};
for(int i : value){ //Java 中for循环的增强形式
out.println(value[i]); //out 为 JSP 中的内置对象
}
%>
九大内置对象
- 五大常用的内置对象:out、request、reponse、session、application
- 不常用的内置对象:Page、pageContext、exception、config
get 与 post
- 表单的一般形式 :
< form name="regForm" action="动作" method="提交方式" > - 表单的两种提交方式:get 与 post
- get:以明文的的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB,安全性较低但速率比 post 方式高。适合提交的数据量不大,且安全性较低的数据,比如搜索、查询等功能。
- post:将用户提交的数据、信息封装在 HTML HEADER 内。适合提交数据量大,安全性高的用户信息,比如注册、修改、上传等功能。
缓冲区
- 缓冲区:Buffer,所谓缓冲区就是内存的一块区域用来保存临时的数据。举个例子,刚煮好的一大锅米饭,一粒一粒吃会吃得很慢,而我们就会选择把米饭乘到碗里,一碗一碗吃岂不痛快。淡然,也可以把勺子当做容器,将米饭在不同的容器中传递,最后通过勺子吃掉,在这里勺子就可以看做缓冲区,多个字节在不同的缓冲区传递
out 内置对象
- out 对象是JspWriter类实例,是向客户端输出内容常用的对象
- 常用方法如下
- void println() 向客户端打印字符串
- void flush() 将缓冲区的内容输出到客户端
- void clear() 清楚缓存区的内容,如果在 flush 之后则调用会抛出异常
- void clearBuffer() 清楚缓冲区的内容,如果在 flush 之后调用不会出现异常
- int getBufferSize() 返回缓冲区字节数大小,若不设设置缓冲区则为0
- int getRemaining() 返回缓冲区还剩余多少字节可用
- boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
request 内置对象
客户端的请求信息被封装在 request 对象中,通过它才能了解到客户的需求,然后做出相应。它是 HttpServletRequest类的实例。request 具有请求域,即在完成用户请求前,该对象一直有效。
-
常见的方法
- 请求方法名:request.getMethod
- 请求的资源:request.getRequestURL
- 请求使用的协议:request.getProtocol
- 请求使用的服务器 IP:request.getServerName
- 请求的服务器端口:request.getServerPort
- 客户端的 IP 地址:request.getRemoteAddr
- 客户端的主机名:request.getRemoteHost
- 获取表单提交的值:request.getParameter
- 返回请求者的MIME类型:request.getContentType
- 获取表单提交的多个值:request.getParameterValues
- web 组件之间共享信息,储存:request.setAttribute
- web 组件之间共享信息,获取:request.getAttribute
下面以一个录入注册例子简单理解 request
先是 用户注册 register.jsp,这里只要是创建了一个表单,有用户名、密码、爱好几个注册内容块。
代码2
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
录入注册信息
用户注册
- 再是处理注册信息 do_register.jsp,这里主要是通过request 来处理注册的信息
代码 3
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
处理注册信息
<%
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");
//利用out内置对象输出
out.println(userName);
out.println("
");
out.println(passWord);
%>
<%
String favorite[] = request.getParameterValues("favorite");
out.print("
");
for(int i=0; i
reponse 内置对象
- reponse 对象包含了响应客户端请求的有关信息,但在 jsp 中很少直接使用到它。他是 HttpServletResponse 类的实例。reponse 对象具有页面作用域,即方位一个页面时,该页面内的 reponse 对象只能对这次访问有效,其他页面的 reponse 对象对当前页面无效。
- 常用方法如下
- String getCharacterEncoding() 返回响应用的何种字符编码
- void setContentType(String type) 设置响应的MIME类型
- PrintWriter getWriter() 返回可以向客户端输出字符的一个对象(注意与内置对象out的区别:一般情况下,PrintWriter 的输出都会在内置对象out之前显示,即使PrintWriter 代码靠后,但是可以在out 之后调用flush 方法可以解决)
- sendRedirect(java.lang.String location) 重新定向客户端的请求
代码 4
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%
//设置响应的MIME类型
response.setContentType("text/html;charset=utf-8");
out.println("reponse内置对象
");
out.println("
");
//out.flush();//将缓冲区内容输出到客户端,避免先显示 PrintWriter 输出
PrintWriter outer = response.getWriter();
outer.println("这是reponse对象生成的输出流");
//请求重定向到register 代码2, 此时将flush()注释掉不然会抛出异常
response.sendRedirect("register.jsp");
%>
- 请求重定向:客户端行为,response.sedRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的的URL会发生改变。可以这么理解,你先乘车去了A公司,但是A公司的人说这个事不归他们管,让你去去B公司;然后你就从A公司退了出来,自己乘车去了B公司。
- 请求转发:服务器行为,request.getRequestDispatcher().forworder(req,resp);适宜次请求,转发后请求对象会保存,地址栏的URL地址不会改变。一样也可以这样理解,你去A公司办事,A公司看了以后发现这件事该归B公司管,但是并没有把你退回来,而是A公司自己去联系了B公司,让B公司办好后,送了过来
session 内置对象
- session 对象是 HttpSession 类的实例
- session 表示客户端与服务器的一次会话,在服务的内存在保存着不同用户的 session 对象。
- Web 中的 session 指的是用户在游览某个网站时,从进入网站到关闭游览器所经过的这段时间,也就是用户游览这个网站的所花费的时间,session 实际上就是一个特定的时间概念
- session 对象是在第一个JSP页面被装载时自动创建的,完成会话期的管理
- 当一个客户访问一个服务器时,可能会在服务器的几个页面之间来回切换,此时服务器就应该有某种方法来知道这是同一个用户
- 常用方法
- long getCreationTime() 返回 session 的创建时间
- String getId() 返回 session 创建时JSP引擎为它创建的唯一ID号
- Object setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话
- Object getAttribute(String name) 返回与此会话中的指定名称绑定在一起时的对象,若无则返回null
- String[] getValueNames() 返回一个包含此session中所有可用属性的数组
- int getMaxInactiveInterval() 返回两次请求间隔时间多长时间此session被取消
- 请结合以下代码理解
代码 5
<%@page import="java.text.SimpleDateFormat,java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
session内置对象
session内置对象
<%
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
session.setAttribute("userName", "admin");
session.setAttribute("otherName", "otherUser");
//设置当前session最大生命期限 单位是秒
session.setMaxInactiveInterval(5);//10秒钟
%>
session 创建时间:<%= sdf.format(new Date(session.getCreationTime())) %>
获取session的ID:<%=session.getId() %>
从 session 中获取用户名:<%= session.getAttribute("userName") %>
获取所有可用属性的值:<%
String str[] = session.getValueNames();
for(int i=0;i
跳转到response.jsp
session 的生命周期
- 创建:当客户端第一次访问某个JSP或者 Servlet 时候,服务器会为当前会话创建一个 session ID,每次客户端向服务器发送请求时,都会将此 ID 携带过去与服务器进行校检。
- 活动:某次会话当中通过超链接打开得新页面属于同一次会话;只要当前全部会话页面没有全部关闭,重新打开的新的游览器窗口访问同一个项目资源属于同一个会话;除非将本次会话的所有页面全部关闭,再次访问就会创建新的session ID。注意事项,原有会话还会存在,只是这个旧的session ID 任然存在于服务器,只不过再也没有客户端携带者它来向服务器访问了。
- 销毁:Session 的三种销毁方式,调用 session.invalidate() 方法;session 过期(超时);服务器重新启动。
application 内置对象
- application 对象实现了用户间的数据共享,可存放全局变量
- application 开始于服务器的启动,终止于服务器的关闭
- 在用户的前后连接和不同用户之间的连接中,可以对 application 同一属性进行操作
- 在任何地方对 application 对象进行操作,都将影响到其他用户对此的访问
- 服务器的启动和关闭决定了 application 的声明周期
- application 对象是 ServletContext 类的实例
- 常用方法
- void setAttribute(String name,Object value) 使用指定的名称将对象绑定到会话
- Object getAttribute(String name) 返回与会话名称绑在一起的对象,如果没有对象绑定在此名称下,则返回 null
- Enumeration getAttributeNames() 返回所有可用属性名的枚举类型
- String getServerInfo() 返回 JSP(SERVLET) 引擎名及版本号
- 请结合以下代码分析
代码 6
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="java.util.*"
%>
application.jsp
<%
application.setAttribute("name", "小明");
application.setAttribute("age", "10");
%>
名字是:<%=application.getAttribute("name") %>
获取application所有属性:<%
Enumeration attribute = application.getAttributeNames();
while(attribute.hasMoreElements())
out.println(attribute.nextElement());
%>
当前引擎名及版本号:<%=application.getServerInfo() %>
Page 内置对象
- Page 对象就是指向当前JSP页面本身,有点像类中的 this,它是 java.long.Object 类的实例
- 常用方法
- class getClass() 返回此 Object 的类
- int hashCode() 返回此 Objcet 的 hash 码
- boolean equals(Object obj) 判断此 Object 是否与指定的 Object 对象相等
- void copy(Object obj) 把此 Object 拷贝到指定的 Object 对象中
- Object clone() 克隆此 Object 对象
- String toString() 把此 Object 对象转换成 String 类的对象
- void notify() 唤醒一个等待的线程
- void notifyAll() 唤醒所有等待的线程
- void wait(int timeout) 使一个线程处于等待直到 timeout 结束或被唤醒
- void wait() 是一个线程处于等待直到被唤醒
- 通过观察以上的方法基本上都是 Object 类中方法的实现,以下就选择常用的 toString 方法实验
代码 7
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
Page.jsp
当前page页面对象字符串描述:<%=page.toString() %>
打印的为:
当前page页面对象字符串描述:org.apache.jsp.InnerObject.Page_jsp@526f75ab
PageContext 内置对象
- pageContext 对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的 SESSION .也可以取本页面所在的 application 的某一属性值
- 它相当于页面中所有功能的集大成者,它的本类名也叫 pageContext
- 常用方法
- JspWriter getOut() 返回当前客户端响应被使用的 JspWriter 流(out)
- HttpSession getSession() 返回当前客户端响应被使用的 HttpSession 对象(session)
- Object getPage() 返回当前页面的 Object 对象(page)
- ServletRequest getRequest() 返回当前页的 ServletRequest 对象(request)
- ServletResponse() 返回当前页面的 ServletResponse 对象(response)
- void setAttribute(String name,Object attribute) 设置属性及属性值
- Object getAttribute(String name,int scope) 在指定范围内获取属性的值
- int getAttributeScope(String name) 返回某属性的作用范围
- void forward(String relativeUrlPath) 返回当前页面重导另一个页面
- void include(String relativeUrlPath) 在当前位置包含另一文件
Config 内置对象
- Config 对象是在一个Servlet 初始化时,JSP 引擎向它传递信息用的,此信息包括 Servlet 初始化时所需要用到的参数(通常属性名和属性值构成)以及服务器有关信息(通过传递一个ServletContext 对象)
- 常用方法
- ServletContext getServletContext() 返回有关服务器相关信息的ServletContext 对象
- String getInitParameter(String name) 返回初始化参数的值
- Enumeration getInitParameterNames() 返回 Servlet 初始化所需所有参数的枚举
Exception 内置对象
- Exception 对象是一个异常对象,当一个页面运行中发生了异常,就产生了这个对象。如果一个 Jsp 页面要引用此对象,就必须 isErrorPage 设为 true ,否则无法编译。它实际上市 java.lang,Throwable 的对象
- 常用方法
- String getMessage() 返回描述异常消息
- String toString() 返回有关异常的简短描述消息
- void printStackTrace() 显示异常及其栈轨迹
- Throwable FillInStackTrace() 重写异常的执行栈轨迹