JSP 三、JSP内置对象(上)
-
内置对象简介
-
四种作用域范围
-
out
-
request/respone
-
session
-
application
-
其它内置对象
3-1 JSP内置对象简介
JSP九大内置对象:
out,request,response,session,application(五大常用对象)
Page,pageContext,exception.config(四个不太常用对象)
3-3 web程序的请求与响应模式
用户发送请求(request),服务器给用户响应(response)
3-4 out对象
什么是缓冲区
1、缓冲区:Buffer,所谓缓冲区就是内存的一块区域,用来保存临时数据
2、IO输出最原始的就是一个字节一个字节输出,效率很低。缓冲区可以先将多个字节读出来,再一次性的输出,提高效率
out对象
out对象是JspWriter类的实例,是向客户端(这里指浏览器)输出内容的常用对象。
常用方法:
- void println()向客户端打印字符
- void clear()清除缓冲区的内容。如果在flush之后调用,会抛出异常
- void clearBuffer() 也是清除缓冲区内容,但在flush之后不会抛出异常
- void flush()将缓冲区内容输出到客户端
- int getBufferSize()返回缓冲区的大小(字节数),如不设缓冲区则为0
- int getRemaining()返回缓冲区还剩余多少可用
- boolean isAutoFlush()返回缓冲区满时,是否自动清空缓冲区
- void close()关闭输出流
3-6 get和post提交方式的区别
表单有两种提交方式:get与post。定义在<form action="dologin.jsp" name="loginForm" method="提交方式***"></form> 动作/名称等顺序无所谓。
1.get:以【明文】方式,通过URL提交数据,数据在URL中【可以看到】。提交数据最多不超过【2KB】。安全性较低,但效率比post方式高。适合提交数据量不大,且安全要求不高的数据:比如:搜索、查询等功能。
2.post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。如:注册、修改、上传等功能。
3-7 request对象
内容:
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。 它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。
方法:
- object getAttribute(String name) 返回指定属性的属性值
- Enumeration getAttributeNames() 返回所有可用属性名的枚举
- String getCharacterEncoding() 返回字符编码方式
- int getContentLength() 返回请求体的长度(以字节数)
- String getContentType() 得到请求体的MIME类型
- ServletInputStream getInputStream() 得到请求体中一行的二进制流
- String getParameter(String name) 返回name指定参数的参数值
- Enumeration getParameterNames() 返回可用参数名的枚举
- String[] getParameterValues(String name) 返回包含参数name的所有值的数组
- String getProtocol() 返回请求用的协议类型及版本号
- String getScheme() 返回请求用的计划名,如:http.https及ftp等
- String getServerName() 返回接受请求的服务器主机名
- int getServerPort() 返回服务器接受此请求所用的端口号
- BufferedReader getReader() 返回解码过了的请求体
- String getRemoteAddr() 返回发送此请求的客户端IP地址
特别注意:在通过url传递参数时会出现中文乱码问题,这时request.setCharacterEncoding("utf-8")是不能解决的,需要修改配置文件,在Tomcat目录的confi下的web.xml的<connect ></connect>标签内追加URIEncoding="utf-8",然后重启服务器生效
3-10 respone对象
设置响应的MIMI类型 response.setContentType("text/html;charset=utf-8")
向客户端输出字符串对象, 而且先于jspWriter,使用out.flush()来避免 RrintWriter response.getWriter()
请求重定向 response.sendRedirect("index.jsp");
3-11 请求重定向与请求转发的区别
请求重定向:服务端responce.sendRedirect("xx.jsp")重定向。【客户端行为】:即客户端会访问两次,第一次访问后会立即跳转到第二个重定向页面上,【从本质上讲等于两次请求】,而前一次的请求封装的request对象不会保存,地址栏的URL地址会改变。
请求转发:服务端request.getRequestDispatcher("xx.jsp").forward(request,response)请求转发。forward(request,response)用于保存内置对象request和response。【服务器行为】:服务器会代替客户端去访问转发页面,【从本质是一次请求】,转发后请求对象会保存,地址栏的URL地址不会改变。
4-1 什么是session
1、session表示客户端与服务器的一次会话
2、Web中的session指:用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览网站所花费的时间。
3、在服务器的内存中保存着不同用户的session,一个用户对应一个session
4、从上述定义中可以看到,session实际是一个【特定的时间概念】
4-2 session对象
- ession是JSP的一个内置对象,是HttpSession类的实例。
- 从客户打开浏览器并连接到服务器开始,到客户关闭浏览器窗口断开与服务器的连接,这一过程成为一个会话。
- 当客户在同一个网站的不同页面之间进行切换并访问时,服务器是通过session来判断这些请求是否来自同一个客户。
- session一般有时间限制,长时间不操作可能会导致session失效。session失效后原session中保存的属性值会全部丢失。
- setMaxInactiveInterval(int i) 该方法可直接设定session的生存时间,超过该时间session会重新创建。(单位:秒)
session对象的常用方法有:
- long getCreationTime() : 返回session的创建时间;
- public String getId() : 返回session的唯一ID号(该ID在session生成时,由JSP引擎创建)
- public Object setAttribute(String name,Object value) : 按照键值对的方式在该session会话中保存一个属性(该属性是一个对象类型)
- public Object getAttribute(String name) : 返回指定名称的属性的值(如果该名称的属性不存在,则返回null)
- String[] getValueNames() : 返回一个(包含在此session中所有可用属性)的数组。
- int getMaxInactiveInterval() : 返回一个时间,该时间表示当前session间隔多少时间之后会失效(单位:秒)。
4-3 session的生命周期
1.创建:
当客户端第一次访问某个jsp或者servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务器发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验
2.活动:
①某次会话当中通过超链接打开的新页面属于同一次会话
②只要当前会话页面没有全部关闭,重新打开的浏览器窗口访问同一个项目资源时属于同一次会话
③除非本次会话的所有页面都关闭后在重新访问某个JSP或者servlet将会创建新的会话
注意:注意原有会话还存在,只是这个旧的Session仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验
3.销毁:三种方式
①调用了session.invalidate()方法
②Session过期(超时)
③服务器重新启动
设置session超时的两种方式: tomcat默认session超时时间为30分钟
1:session.setMaxInactiveInterval(时间);//单位是秒
2:在web.xml配置 <session-config> <session-timeout> 10 <session-timeout> <session-config> //单位是分钟
4-6 application对象
application介绍
1、实现了用户间数据的共享,可存放全局变量。(类似静态对象)
2、开始于服务器启动,终止于服务器的关闭(生命周期)
3、在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作
4、在任何地方对application对象属性进行操作,都将影响到其他用户对此的访问
5、application对象是ServletContext类的实例
常用方法:
- public void setAttribute(String name,Object value)使用指定名称将对象绑定到此会话。
- public Object getAttribute(String name)返回于此会话中指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null。
- Enumeration getAttributeName()返回所有可用属性名的枚举。
- String getServerInfo()返回jsp(servlet)引擎名及版本号。
4-8 page对象
page对象:
是指指向当前JSP页面本身,有点像类中的this指针,它是java.long.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()使一个线程处于等待直到被唤醒。
4-9 pageContext对象和config对象
pageContext对象
- ageContext对象提供了对jsp页面内所有的对象及名字空间的访问。
- pageContext对象可以访问到本页所有的Session,也可以区本页面所在的application的某一属性值。
- pageContext对象相当于页面中所有功能的集大成者。
- pageContext对象的本类名也叫pageContext。
pageContext对象的常用方法:
- jspWriter getOut()返回当前客户端响应被使用的jspWriter流(out)。
- HttpSession getSession()返回当前页中的HttpSession对象(Session)。
- Object getPage()返回当前页的Object对象(page)。
- ServletRequest getRequest()返回当前页的ServletRequest对象(Request)。
- ServletResponse getResponse()返回当前页的ServletResponse对像(Response)。
- void setAttribute(String name,Object Attribute)设置属性及属性值
- Object getAttribute(String name,int scope)在指定范围内去属性的值。
- int getAttribute(String name)返回某属性的作用范围。
- void forward(String relativeURLPath)是当前页重导到另一页面。
- void include(String relativeURLPath)在当前位置包含另一文件。
config对象 常用方法:
- ServletContext getServletContext()返回含有服务器相关信息的ServletContext对象
- String getInitParameter(String name)返回初始化参数的值
- Enumeration getInitParameterNames()返回Servlet初始化所需所有参数的枚举
4-10 exception对象
1.需要捕获异常的页面,在page指令中写属性errorpage=“出错跳转到的页面”
2.在跳转到的错误处理页面page指令中输入属性isErrorPage=“true”
JSP内置对象 - Exception
- Exception是java.lang.Throwable类的实例
- 当一个页面运行发生了异常,就产生了该Exception对象。
- 若一个JSP页面要使用该Exception对象,需要将isErrorPage的值设为true
Exception对象常用方法:
- String getMessage() 返回描述异常的信息
- String toString() 返回关于异常的简短描述信息
- void printStackTrace() 显示异常及其栈轨迹
- Throwable FillInStackTrace() 重写异常的执行栈轨迹