JSP内置对象
JSP内置对象是Web容器创建的一组对象,不使用new关键字就可以使用的内置对象,一共有9种内置对象,
分别为:out 、 request 、 response 、 session 、 applicationPage 、 pageContext 、 exception 、 config
其中常用的有:out 、 request 、 response 、 session 、 application
不太常用的对象:Page 、 pageContext 、 exception 、 config
1.out对象
out对象是JspWriter类的实例,是向客户端(这里指浏览器)输出内容的常用对象。
常用方法
· void println()向客户端打印字符
· void clear()清除缓冲区的内容。如果在flush之后调用,会抛出异常
· void clearBuffer() 也是清除缓冲区内容,但在flush之后不会抛出异常
· void flush()将缓冲区内容输出到客户端
· int getRemaining()返回缓冲区还剩余多少可用
· int getBufferSize()返回缓冲区的大小(字节数),如不设缓冲区则为0
· boolean isAutoFlush()返回缓冲区满时,是否自动清空缓冲区
· void close()关闭输出流
2.request对象
request对象表示客户端的请求,客户端的请求信息被封装在request对象中,通过他才能了解到客户的需求,然后做出响应,他是HttpServletRequest类的实例,request对象具有请求域,即完成客户端的请求之前,该对象一直有效.
常用方法
- String getParameter(String name)返回name指定参数的参数值(用户名,密码)
- Stringp[] getParameterValues(String name)返回包含参数name的所有值数组(复选框)
- void setAttribute(String,Object):存储此请求中的属性
- object getAttribute(String name)返回指定属性的属性值
- String getContentType():得到请求体的MIME类型
- String getProtocol()返回请求用的协议类型以版本号
- String getServerName():返回接受请求的服务器主机名
8.int getServerPort():返回服务器接受此请求所用的端口号
9.String getCharacterEncoding():返回字符编码方式
10.void setCharacterEncodign():设置请求的字符编码方式在server.xml的<connector></connector>内添加 URIEncoding="UTF-8"
11.int getContentLength():返回请求体的长度(以字节数)
12.String getRemoteAddr():返回发送此请求的客户端IP地址
13.String getRealPath(String path):返回虚拟路径的真实路径
下面通过一个小例子.看一下实现结果:
首先在项目中新建一个jsp文件,命名为reg.jsp,用于创建一个注册界面,把输出字符编码更改为utf-8,如下图:
使用表单方式创建界面结构,程序如下图:
新建一个request.jsp文件,用于接收表单传输的内容并测试request对象方法,程序代码如下:
实现结果如下:
点击登录之后,运行结果如下图:
response对象
respones对象包含了响应客户请求的有关信息,但在JSP中很少直接到它,它是HttpServletResponse类的实例,response对象具有页面的作用域,即访问一个页面时,该页面的response对象只能对这次访问有效,其他的页面response对象对当前页面无效
常用方法:
String getCharacterEncoding( ) 返回响应用的是何种字符编码
void setContentType (String type) 设置响应的MIME类型
PrintWriter getWriter( ) 返回可以向客户端输出字符的一个对象(注意比较:PrintWriter 与内置out对象的区别)
sendRedirect(java.lang.String location) 重新定向客户端的请求
测试代码如下所示:
有图可见,虽然out对象的输出程序代码写在前面,但是显示在由PrintWriter getWriter( )定义的outer对象后面.可见其两者的优先关系.
请求转发与请求重定向
1.请求重定向:
客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会发成改变!
2.请求转发:
服务器行为,request.getRequestDispatcher().forward(request,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会发成改变!
session对象
session介绍
1.1 session表示客户端与服务端的一次会话
1.2 Web中的session指的是用户在浏览某个网站的时候,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间
1.3 从上述定义中可以看到,session实际上是一个特定的时间概念
session保存在服务器内存中,并未不同用户保存不同session
session对象
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被取消(单位秒)
测试程序如下:
页面结果如下:
当设置了session最大生存期限为10秒时,点击跳转到session2,实现如下图:
可见ID编号变了,说明这是第二次会话.
当取消session最大生存期限后,结果如下图:
可见ID号相同,用户名均存在,是同一次会话.
session生命周期
创建->活动->销毁
- 创建
当客户端第一次访问某个jsp或者servlet时候,服务器会为当前会话创建一个sessionID,每次客户端向服务端发送请求时,都会将此sessionID携带过去,服务端会对此sessionId进行校验,会判断是否是同意会话 - 活动
2.1 某次会话当中通过超链接打开的新页面属于同一次会话
2.2 只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同意项目时属于同一会话
2.3 除非本次会话的所有页面都关闭后在重新访问某个Jsp或者Servlet将会创建新的会话
注意事项:
注意原有会话还存在,只是这个旧的sessionID任然存在与服务端,只不过再也没有客户端携带它然后交与服务端校验- 销毁
session销毁有三种方式
3.2 调用了session.invalidate() 3.3 session超时(过期)
3.4 服务器重新启动
- 销毁