在看此文章前,确保已经学习Servlet。
JSP的九大内置对象:
对象名称 | 备注 | 作用域 | 类型 |
---|---|---|---|
out | 输出对象 | Page | javax.servlet.jsp.JspWriter |
request | 请求对象 | Request | javax.servlet.ServletRequest |
response | 响应对象 | Page | javax.servlet.SrvletResponse |
session | 会话对象 | Session | javax.servlet.http.HttpSession |
application | 应用程序对象 | Application | javax.servlet.ServletContext |
page | 页面对象 | Page | javax.lang.Object |
pageContext | 页面上下文对象 | Page | javax.servlet.jsp.PageContext |
exception | 异常对象 | Page | javax.lang.Throwable |
config | 配置对象 | Page | javax.servlet.ServletConfig |
pageContext对象
pageContext可以操控4个域:自己的page域、application域、session域、request域。
page域
page域的范围:在一个页面内共享的数据
因为pageContext对象实在Servlet内部的service()直接创建的,是service方法的局部变量,当方法结束时,这个对象也就消失了。
操作page域:
pageContext.setAttribute("name", "pageFeathers");
pageContext.getAttribute("name");
pageContext.removeAttribute("name");
pageContext.getAttributeNamesInScope(arg0);
用途
和自定义标签配合使用,是标签处理类与JSP之间交互的桥梁。
操作所有域:
pageContext.setAttribute("key", "value", type);
参1和参2用来指定往域中添加的键值,而第三个参数是一个int类型,用来指定域,在PageContext类中有以下几个值可供选择:
1. APPLICATION_SCOPE
2. PAGE_SCOPE
3. REQUEST_SCOPE
4. SESSION_SCOPE
pageContext.findAttribute("name");
// 从四个域中找,从小到大,一旦找到立即停止,并返回
获取其他内置对象
pageContext.getRequest();
pageContext.getResponse();
pageContext.getSession();
pageContext.getServletContext();
pageContext.getServletConfig();
pageContext.getException();
pageContext.getPage();
pageContext.getOut();
out对象:
out对象是JspWriter的实例,是向客户端输出内容的常用对象.
常用方法:
void println()
:向客户端打印字符串int getBufferSize()
:返回缓冲区的大小(单位字节),如果没有设置缓冲区,则返回0int getRemaining()
:返回缓冲区剩余可用的大小(同样以字节数为返回值)void flush()
:将缓冲区的内容输出到客户端void clear()
:清除缓冲区的内容,如果在flush()之后调用会抛异常void clearBuffer()
:清除缓冲区的内容,如果在flush()之后调用不会抛异常boolean isAutoFlush()
:缓冲区被填满时,是自动清空还是抛出异常void close()
:关闭输出流
缓冲区用来保存临时数据,首先读取代码,将读取到的数据添加到缓存区中,当缓存区已经满的时候,就会将缓冲区的数据一起显示出来,并把缓存区清空,并继续缓存而当我们call flush()的时候,就会直接输出,然后清除缓存区,然后继续缓存而 一般情况下(默认值)当缓冲区填满时,就会将缓存区中的内容输出,并清空缓存区,但是,如果isAutoFlush()的值为false,当缓存区满时,就会抛出异常,而不会flush()
request对象:
get请求通常使用传参的方式,而post请求则是将请求信息封装到request对象中,所以我们需要通过request对象获取post的请求信息,幸运的是,request也把get请求的param也封装到了自己内部。
它的作用域为request,即客户端完成请求之前,此对象将一直有效。
常用方法:
request.setCharacterEncoding("utf-8")
:设置获取的请求信息的编码格式,此方法无法解决URL传递中文出现的乱码问题。request.setAttribute("password", "123456")
:设置属性String nm = request.getParameter("name")
:根据get请求参数名称获取对应的值- request.getAttribute(“password”):根据属性名获取对应的属性值
- 根据表单标签的name属性,获取提交给该页面的表单信息,因为name可能相同,所以返回数组类型。
String[] ps = request.getParameterValues("fav");
if(ps!=null){
for (int i = 0; i < ps.length; i++){
out.println(ps[i]);
}
}
request.getProtocol()
:协议类型以及版本号request.getServerName()
:服务器的主机名request.getServerPort()
:服务器的端口号request.getRealPath("07_responsePage.jsp")
:请求的真实路径,因为可能有多个页面发出请求,所以要传入请求页面request.getContextPath()
:请求的上下文路径(相对路径)request.getRemoteAddr()
:请求的服务器iprequest.getContentLength()
:请求体长度request.getContentType()
:请求体MIME类型
返回样例:
姓名:Feather 爱好:daqiu wanqiu guanqiu 密码:123456 协议类型以及版本号:HTTP/1.1
服务器的主机名:localhost
服务器的端口号:8080
请求的真实路径:/home/feathers/workspace/JSPDemo/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/JSPStudyIMOOC/07_responsePage.jsp
请求的上下文路径(相对路径):/JSPStudyIMOOC
请求的服务器ip:127.0.0.1
请求体长度:42
请求体MIME类型:application/x-www-form-urlencoded
response对象:
加载一个网页,客户端(浏览器)发送request对象,服务端返回response对象
- 包含了响应客户端请求的信息,JSP中很少用到此对象,通常是用来操作服务器返回的数据,比如cookies
- response对象只是服务器响应给当前页面的,即:当前jsp页面请求后,接收到服务器的response对象,可以在页面中对response对象进行必要的修改,但最终还是由服务器决定响应的具体内容
- 设置响应的MIME类型:
response.setContentType("text/html;charset=utf-8")
各个对象的作用请查看Servlet。