天天看点

JSP详解(二):九大内置对象

在看此文章前,确保已经学习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()

    :返回缓冲区的大小(单位字节),如果没有设置缓冲区,则返回0
  • int 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 = ; i < ps.length; i++){
        out.println(ps[i]);
    }
} 
           
  • request.getProtocol()

    :协议类型以及版本号
  • request.getServerName()

    :服务器的主机名
  • request.getServerPort()

    :服务器的端口号
  • request.getRealPath("07_responsePage.jsp")

    :请求的真实路径,因为可能有多个页面发出请求,所以要传入请求页面
  • request.getContextPath()

    :请求的上下文路径(相对路径)
  • request.getRemoteAddr()

    :请求的服务器ip
  • request.getContentLength()

    :请求体长度
  • request.getContentType()

    :请求体MIME类型

返回样例:

姓名:Feather 爱好:daqiu wanqiu guanqiu 密码: 协议类型以及版本号:HTTP/
服务器的主机名:localhost
服务器的端口号:
请求的真实路径:/home/feathers/workspace/JSPDemo/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/JSPStudyIMOOC/_responsePage.jsp
请求的上下文路径(相对路径):/JSPStudyIMOOC
请求的服务器ip:
请求体长度:
请求体MIME类型:application/x-www-form-urlencoded
           

response对象:

加载一个网页,客户端(浏览器)发送request对象,服务端返回response对象

  • 包含了响应客户端请求的信息,JSP中很少用到此对象,通常是用来操作服务器返回的数据,比如cookies
  • response对象只是服务器响应给当前页面的,即:当前jsp页面请求后,接收到服务器的response对象,可以在页面中对response对象进行必要的修改,但最终还是由服务器决定响应的具体内容
  • 设置响应的MIME类型:

    response.setContentType("text/html;charset=utf-8")

各个对象的作用请查看Servlet。