JSP 内置对象详解

内置对象简介

  • JSP 内置对象是 Web 容器创建的一组对象,不需使用 new 关键字就可以直接使用的内置对象。
                                代码 1
<%
    int[] value = {10,20,30};
    for(int i : value){ //Java 中for循环的增强形式
        out.println(value[i]); //out 为 JSP 中的内置对象
    }
%>

九大内置对象

  1. 五大常用的内置对象:out、request、reponse、session、application
  2. 不常用的内置对象:Page、pageContext、exception、config

get 与 post

  • 表单的一般形式 :
    < form name="regForm" action="动作" method="提交方式" >
  • 表单的两种提交方式:get 与 post
    1. get:以明文的的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB,安全性较低但速率比 post 方式高。适合提交的数据量不大,且安全性较低的数据,比如搜索、查询等功能。
    2. post:将用户提交的数据、信息封装在 HTML HEADER 内。适合提交数据量大,安全性高的用户信息,比如注册、修改、上传等功能。

缓冲区

  • 缓冲区:Buffer,所谓缓冲区就是内存的一块区域用来保存临时的数据。举个例子,刚煮好的一大锅米饭,一粒一粒吃会吃得很慢,而我们就会选择把米饭乘到碗里,一碗一碗吃岂不痛快。淡然,也可以把勺子当做容器,将米饭在不同的容器中传递,最后通过勺子吃掉,在这里勺子就可以看做缓冲区,多个字节在不同的缓冲区传递

out 内置对象

  • out 对象是JspWriter类实例,是向客户端输出内容常用的对象
  • 常用方法如下
    1. void println() 向客户端打印字符串
    2. void flush() 将缓冲区的内容输出到客户端
    3. void clear() 清楚缓存区的内容,如果在 flush 之后则调用会抛出异常
    4. void clearBuffer() 清楚缓冲区的内容,如果在 flush 之后调用不会出现异常
    5. int getBufferSize() 返回缓冲区字节数大小,若不设设置缓冲区则为0
    6. int getRemaining() 返回缓冲区还剩余多少字节可用
    7. boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常

request 内置对象

  • 客户端的请求信息被封装在 request 对象中,通过它才能了解到客户的需求,然后做出相应。它是 HttpServletRequest类的实例。request 具有请求域,即在完成用户请求前,该对象一直有效。

  • 常见的方法

    1. 请求方法名:request.getMethod
    2. 请求的资源:request.getRequestURL
    3. 请求使用的协议:request.getProtocol
    4. 请求使用的服务器 IP:request.getServerName
    5. 请求的服务器端口:request.getServerPort
    6. 客户端的 IP 地址:request.getRemoteAddr
    7. 客户端的主机名:request.getRemoteHost
    8. 获取表单提交的值:request.getParameter
    9. 返回请求者的MIME类型:request.getContentType
    10. 获取表单提交的多个值:request.getParameterValues
    11. web 组件之间共享信息,储存:request.setAttribute
    12. web 组件之间共享信息,获取:request.getAttribute
  • 下面以一个录入注册例子简单理解 request

  • 先是 用户注册 register.jsp,这里只要是创建了一个表单,有用户名、密码、爱好几个注册内容块。

                        代码2
<%@ page language="java" contentType="text/html; charset=UTF-8"%>




录入注册信息


    

用户注册


用户名:
密码
爱好: Java Android JavaWeb PHP IOS
  • 再是处理注册信息 do_register.jsp,这里主要是通过request 来处理注册的信息
                            代码 3
<%@ page language="java" contentType="text/html; charset=UTF-8"%>




处理注册信息


        <%
            String userName = request.getParameter("userName");
            String passWord = request.getParameter("passWord");
            //利用out内置对象输出
            out.println(userName);
            out.println("
"); out.println(passWord); %>
<% String favorite[] = request.getParameterValues("favorite"); out.print("
"); for(int i=0; i

reponse 内置对象

  • reponse 对象包含了响应客户端请求的有关信息,但在 jsp 中很少直接使用到它。他是 HttpServletResponse 类的实例。reponse 对象具有页面作用域,即方位一个页面时,该页面内的 reponse 对象只能对这次访问有效,其他页面的 reponse 对象对当前页面无效。
  • 常用方法如下
    1. String getCharacterEncoding() 返回响应用的何种字符编码
    2. void setContentType(String type) 设置响应的MIME类型
    3. PrintWriter getWriter() 返回可以向客户端输出字符的一个对象(注意与内置对象out的区别:一般情况下,PrintWriter 的输出都会在内置对象out之前显示,即使PrintWriter 代码靠后,但是可以在out 之后调用flush 方法可以解决)
    4. sendRedirect(java.lang.String location) 重新定向客户端的请求
                                    代码 4
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<%
    //设置响应的MIME类型
    response.setContentType("text/html;charset=utf-8");
    out.println("

reponse内置对象

"); out.println("
"); //out.flush();//将缓冲区内容输出到客户端,避免先显示 PrintWriter 输出 PrintWriter outer = response.getWriter(); outer.println("这是reponse对象生成的输出流"); //请求重定向到register 代码2, 此时将flush()注释掉不然会抛出异常 response.sendRedirect("register.jsp"); %>
  • 请求重定向:客户端行为,response.sedRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的的URL会发生改变。可以这么理解,你先乘车去了A公司,但是A公司的人说这个事不归他们管,让你去去B公司;然后你就从A公司退了出来,自己乘车去了B公司。
  • 请求转发:服务器行为,request.getRequestDispatcher().forworder(req,resp);适宜次请求,转发后请求对象会保存,地址栏的URL地址不会改变。一样也可以这样理解,你去A公司办事,A公司看了以后发现这件事该归B公司管,但是并没有把你退回来,而是A公司自己去联系了B公司,让B公司办好后,送了过来

session 内置对象

  • session 对象是 HttpSession 类的实例
  • session 表示客户端与服务器的一次会话,在服务的内存在保存着不同用户的 session 对象。
  • Web 中的 session 指的是用户在游览某个网站时,从进入网站到关闭游览器所经过的这段时间,也就是用户游览这个网站的所花费的时间,session 实际上就是一个特定的时间概念
  • session 对象是在第一个JSP页面被装载时自动创建的,完成会话期的管理
  • 当一个客户访问一个服务器时,可能会在服务器的几个页面之间来回切换,此时服务器就应该有某种方法来知道这是同一个用户
  • 常用方法
    1. long getCreationTime() 返回 session 的创建时间
    2. String getId() 返回 session 创建时JSP引擎为它创建的唯一ID号
    3. Object setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话
    4. Object getAttribute(String name) 返回与此会话中的指定名称绑定在一起时的对象,若无则返回null
    5. String[] getValueNames() 返回一个包含此session中所有可用属性的数组
    6. int getMaxInactiveInterval() 返回两次请求间隔时间多长时间此session被取消
  • 请结合以下代码理解
                               代码 5
<%@page import="java.text.SimpleDateFormat,java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>




session内置对象

  

session内置对象


<% SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); session.setAttribute("userName", "admin"); session.setAttribute("otherName", "otherUser"); //设置当前session最大生命期限 单位是秒 session.setMaxInactiveInterval(5);//10秒钟 %> session 创建时间:<%= sdf.format(new Date(session.getCreationTime())) %>
获取session的ID:<%=session.getId() %>
从 session 中获取用户名:<%= session.getAttribute("userName") %>
获取所有可用属性的值:<% String str[] = session.getValueNames(); for(int i=0;i
跳转到response.jsp
session 的生命周期
  • 创建:当客户端第一次访问某个JSP或者 Servlet 时候,服务器会为当前会话创建一个 session ID,每次客户端向服务器发送请求时,都会将此 ID 携带过去与服务器进行校检。
  • 活动:某次会话当中通过超链接打开得新页面属于同一次会话;只要当前全部会话页面没有全部关闭,重新打开的新的游览器窗口访问同一个项目资源属于同一个会话;除非将本次会话的所有页面全部关闭,再次访问就会创建新的session ID。注意事项,原有会话还会存在,只是这个旧的session ID 任然存在于服务器,只不过再也没有客户端携带者它来向服务器访问了。
  • 销毁:Session 的三种销毁方式,调用 session.invalidate() 方法;session 过期(超时);服务器重新启动。

application 内置对象

  • application 对象实现了用户间的数据共享,可存放全局变量
  • application 开始于服务器的启动,终止于服务器的关闭
  • 在用户的前后连接和不同用户之间的连接中,可以对 application 同一属性进行操作
  • 在任何地方对 application 对象进行操作,都将影响到其他用户对此的访问
  • 服务器的启动和关闭决定了 application 的声明周期
  • application 对象是 ServletContext 类的实例
  • 常用方法
    1. void setAttribute(String name,Object value) 使用指定的名称将对象绑定到会话
    2. Object getAttribute(String name) 返回与会话名称绑在一起的对象,如果没有对象绑定在此名称下,则返回 null
    3. Enumeration getAttributeNames() 返回所有可用属性名的枚举类型
    4. String getServerInfo() 返回 JSP(SERVLET) 引擎名及版本号
  • 请结合以下代码分析
                                                                         代码 6
<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="java.util.*"
%>




application.jsp

  <%
    application.setAttribute("name", "小明");
    application.setAttribute("age", "10");
  %>
    名字是:<%=application.getAttribute("name") %>
获取application所有属性:<% Enumeration attribute = application.getAttributeNames(); while(attribute.hasMoreElements()) out.println(attribute.nextElement()); %>
当前引擎名及版本号:<%=application.getServerInfo() %>

Page 内置对象

  • Page 对象就是指向当前JSP页面本身,有点像类中的 this,它是 java.long.Object 类的实例
  • 常用方法
    1. class getClass() 返回此 Object 的类
    2. int hashCode() 返回此 Objcet 的 hash 码
    3. boolean equals(Object obj) 判断此 Object 是否与指定的 Object 对象相等
    4. void copy(Object obj) 把此 Object 拷贝到指定的 Object 对象中
    5. Object clone() 克隆此 Object 对象
    6. String toString() 把此 Object 对象转换成 String 类的对象
    7. void notify() 唤醒一个等待的线程
    8. void notifyAll() 唤醒所有等待的线程
    9. void wait(int timeout) 使一个线程处于等待直到 timeout 结束或被唤醒
    10. void wait() 是一个线程处于等待直到被唤醒
  • 通过观察以上的方法基本上都是 Object 类中方法的实现,以下就选择常用的 toString 方法实验
                                   代码 7
<%@ page language="java" contentType="text/html; charset=UTF-8"%>




Page.jsp

      当前page页面对象字符串描述:<%=page.toString() %>

打印的为:

当前page页面对象字符串描述:org.apache.jsp.InnerObject.Page_jsp@526f75ab

PageContext 内置对象

  • pageContext 对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的 SESSION .也可以取本页面所在的 application 的某一属性值
  • 它相当于页面中所有功能的集大成者,它的本类名也叫 pageContext
  • 常用方法
    1. JspWriter getOut() 返回当前客户端响应被使用的 JspWriter 流(out)
    2. HttpSession getSession() 返回当前客户端响应被使用的 HttpSession 对象(session)
    3. Object getPage() 返回当前页面的 Object 对象(page)
    4. ServletRequest getRequest() 返回当前页的 ServletRequest 对象(request)
    5. ServletResponse() 返回当前页面的 ServletResponse 对象(response)
    6. void setAttribute(String name,Object attribute) 设置属性及属性值
    7. Object getAttribute(String name,int scope) 在指定范围内获取属性的值
    8. int getAttributeScope(String name) 返回某属性的作用范围
    9. void forward(String relativeUrlPath) 返回当前页面重导另一个页面
    10. void include(String relativeUrlPath) 在当前位置包含另一文件

Config 内置对象

  • Config 对象是在一个Servlet 初始化时,JSP 引擎向它传递信息用的,此信息包括 Servlet 初始化时所需要用到的参数(通常属性名和属性值构成)以及服务器有关信息(通过传递一个ServletContext 对象)
  • 常用方法
    1. ServletContext getServletContext() 返回有关服务器相关信息的ServletContext 对象
    2. String getInitParameter(String name) 返回初始化参数的值
    3. Enumeration getInitParameterNames() 返回 Servlet 初始化所需所有参数的枚举

Exception 内置对象

  • Exception 对象是一个异常对象,当一个页面运行中发生了异常,就产生了这个对象。如果一个 Jsp 页面要引用此对象,就必须 isErrorPage 设为 true ,否则无法编译。它实际上市 java.lang,Throwable 的对象
  • 常用方法
    1. String getMessage() 返回描述异常消息
    2. String toString() 返回有关异常的简短描述消息
    3. void printStackTrace() 显示异常及其栈轨迹
    4. Throwable FillInStackTrace() 重写异常的执行栈轨迹

你可能感兴趣的:(JSP 内置对象详解)