JSP内置对象
1.内置对象简介
JSP内置对象是Web容器创建的一组对象,不使用new关键字就可以使用的内置对象。
JSP内置对象
常用的JSP内置对象:
①out
②request
③response
④session
⑤application
⑥Page,pageContext,exception,confing
1.1 Web程序的请求响应模式
用户发送请求(request)
服务器给用户响应(response)
1.2什么是缓冲区
缓冲区:Buffer,所谓缓冲区就是内存的一块区域用来保存临时数据。
2.out
out对象:
out对象是JSPWriter类的实例,是向客户端输出内容常用的对象
常用方法如下:
- void println() 向客户端打印字符串
- void clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常
- void clearBuffer() 清空缓冲区的内容,如果在flush之后调用不会抛出异常
- void flush() 将缓冲区内容输出到客户端
- int getBufferSize() 返回缓冲区中字节数的大小,如果不设缓冲区则为0
- int getRemaining() 返回缓冲区还剩余多少可用
- boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
- void close() 关闭输出流
3.request/response
get与post
表单有两种提交方式:get与post
<form name="regForm" action="提交到" method="提交方式"></form>
- get:以明文的方式通过URL提交数据,数据在URL中可以看。提交的数据最多不超过2KB。安全性较低但效率比post方式高。适合提交数据量不大,安全性不高的数据。比如:搜索、查询等功能。
- post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。比如:注册、修改、上传等功能。
3.1request对象
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法如下:
- String getParameter(String name) 返回name指定参数的参数值
- String[] getParameterValues(String name) 返回包含参数name的所有值的数组
- void setAttribute(String,Object) 存储此请求中的属性。
- object getAttribute(String name) 返回指定属性的属性值。
- String getContentType() 得到请求体的MIME类型
- String getProtocol() 返回请求用的协议类型及版本号
- String getServerName() 返回接受请求的服务器主机名
3.2response对象
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。常用方法如下:
- String getCharacterEncoding() 返回响应的是何种字符编码
- void setContentType(String type) 设置响应的MIME类型
- PrintWriter getWriter() 返回可以向客户端输出字符的一个对象(注意比较:PrintWriter输出总是在out对象输出之前)
- sendRedirect(java.lang.String location) 重新定向客户端的请求
请求转发与请求重定向
请求重定向:客户端行为,response.sendRedirect(),从本质上讲等于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。
请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。
4.session
4.1什么是session
- session表示客户端与服务器的一次会话
- Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间
- 从上述定义中可以看到,session实际上是一个特定的时间概念
- 在服务器的内存中保存着不同用户的session
4.2session对象
- session对象是一个JSP内置对象
- session对象在第一个JSP页面被加载时自动创建,完成会话期管理。
- 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
- 当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。
- session对象是HTTPSession类的实例。
session对象常用方法如下:
- long getCreationTime() 返回session创建时间
- public String getId() 返回session创建时JSP引擎为它设的唯一ID号
- public Object setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话
- public Object getAttribute(String name) 返回与此会话中指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null
- String[] getValueNames() 返回一个包含此session中所有可用属性的数组
- int getMaxInactiveInterval() 返回两次请求间隔多长时间此session被关闭(单位秒)
4.3session的生命周期
4.3.1创建:
当客户端第一次访问某个jsp或者Servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。
4.3.2活动:
- 某次会话当中通过超链接打开的新页面属于同一次会话
- 只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
- 除非本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet将会创建新的会话。
注意事项:注意原有会话还存在,只是这个旧的SessionId仍然存在服务端,只不过再也没有客户端会携带它然后交予服务端校验。
4.3.3销毁:
Session的销毁只有三种方
- 调用了session.invalidate()方法
- Session过期(超时)
- 服务器重新启动
- Tomcat默认session超时时间为30分钟。
- 设置session超时有两种方式:
- session.setMaxInactiveInterval(时间);//单位是秒
- 在web.xml配置
<session-config>
<session-timeout>
10
</session-timeout>
</session-config> //单位是分钟。
5.application
常用方法如下:
- public void setAttribute(String name,Object value)使用指定名称将对象绑定到此会话。
- public Object getAttribute(String name)返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null。
- Enumeration getAttributeNames()返回所有可用属性名的枚举
- String getServerInfo()返回JSP(SERVLET)引擎名及版本号
6.其它内置对象
page对象
page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。常用方法如下:
- class getClass() 返回此Object的类
- int hashCode() 返回此Object的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() 使一个线程处于等待直到被唤醒
pageContext对象
- pageContext对象提供了对JSP页面内容所有的对象及名字空间的访问
- pageContext对象可以访问到本页所在的session,也可以取本页面所在的application的某一属性值
- pageContext对象相当于页面中所有功能的集成
- pageContext对象的本类名也叫pageContext。