JavaWeb【五、内置对象】

时间:2024-10-02 10:08:08

简介

Web容器创建的一组对象,不用new即可使用。

共有9种,out、request、response、session、application,五种比较常用,page、pageContent、exception、config四种不太常用。

4种作用域范围

  • page

    变量当前页面有效,页面跳转了就无效了

    除了request、session、application三种内置对象的作用域分别与自身名称相同,其他内置对象的作用域全部是page
  • request

    变量在该次请求有效,即从page1跳转到page2,变量在page1、page2都有效
  • session

    变量在当前回话有效,即变量在浏览器启动期间都有效,当浏览器重启变量刷新
  • application

    变量在当前应用有效,即tomcat服务器不重启,变量都有效

out

缓冲区:临时保存数据的区域

out对象:JspWriter类的实例,向客户端输出内容常用的对象。

常用方法:

println() 打印字符串

clear() 清除缓冲区内容,flush调用后调用会抛异常

clearBuffer() 清除缓冲区内容,flush调用后调用不抛异常

flush() 将缓冲区的数据输出到客户端

getBufferSize() 返回缓冲区大小,若不设置返回0

getRemaining() 返回缓冲区还剩多少可用

isAutoFlush() 返回缓冲区满时,是否自动清空还是抛出异常

close() 关闭输出流

<%
out.println("鹅鹅鹅<br>");
out.println("曲项向天歌<br>");
out.flush();//清除后,剩余空间会增大
out.clear();//会异常,以下不输出
out.println("白毛浮绿水<br>");
out.println("红掌拨青波<br>");
%>
<br>
缓冲区大小:<%=out.getBufferSize()%><br>
缓冲区剩余容量:<%=out.getRemaining()%><br>
是否自动清空:<%=out.isAutoFlush() %><br>

request/response

表单提交方式:

get:url明文传输,2k量小,不安全,效率高

post:封装在header里,量大,相对安全,效率偏低

  • request 对象

    客户端请求信息被封装在request对象中,通过它才能获取客户的请求,并做出响应,HttpServletRequest类下的实例。

    request对象具有请求域,即完成客户端的请求之前,该对象一直有效。

    getParameter(String name) 获取参数,通过参数名

    getParameterValues(String name) 获取参数数组,通过参数名

    setAttribute(String,Object) 存储此请求中的属性

    getAttribute(String name) 获取指定属性的属性值

    getContentType() 获取MIME类型

    getProtocol() 获取协议类型及版本号

    getServerName() 获取服务器主机名

    getServerPort() 获取服务器端口

    getCharacterEncoding() 获取字符编码方式

    setCharacterEncoding() 设置请求的编码方式

    getContentLength() 获取请求体长度(字节)

    getRemoteAddr() 获取客户端地址

    getRealPath(String Path) 返回一个虚拟路径的真实路径

    getContextPath() 获取上下文路径

  • response对象

    包含了相应客户端请求的相关信息,很少使用。是HttpServletResponse的实例。

    页面作用域,即访问一个页面时该页面的response对象只对这次访问有效,其他页面的response对象对当前页面无效。

    getCharacterEncoding() 获取响应的编码方式

    setContentType(String type) 设置响应的MIME类型

    PrintWriter getWriter() 返回一个对象,可以向客户端输出字符(与out对象有区别)

    sendRedirect(String location) 重定向客户端请求

PrintWriter与out的区别:

PrintWriter对象打印输出总是提前于out对象,若想调整顺序,需要使用out.flush()

请求转发与请求重定向的区别:

request.getRequestDispatcher().forward(req.resp) 请求转发是服务端行为,原请求对象会发给新地址,URL不会改变。

response.sendRedirect() 请求重定向是客户端行为,本质是两次请求,URL会改变。

session

session的定义:表示客户端与服务器端的一次会话,即用户访问某个网站到关闭浏览器的这段时间

服务器端保存的session是对应于每一个用户的,即有n个用户在访问该网站,则该网站的服务器端就保存有n个session

session在第一个jsp页面被加载时创建,Session对象是HttpSession类的实例

getCreationTime() 获取创建时间

getId() 在session创建时jsp引擎为它设置的唯一id

setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话

getAttribute(String name) 通过名称获取当前会话下的对象,若无此名称对象则返回null

String[] getValueNames() 返回一个该会话中所有可用属性的数组

int getMaxInactiveInterval() 获取两次请求间隔多长时间此session被取消

session的声明周期:

创建-当客户端第一次访问某个jsp或servlet时创建,并创建一个id,每次客户请求都会携带此id,服务器端会进行校验。

活动-每次打开新页面属于同一次会话,除非页面全部关闭,重新访问时才会创建新的session,但原有的session仍会保留在服务器中。

销毁-三种方式,1、session.invalidate(),2、session过期,3、重启服务器

  • 设置超时时间的两种方式

    1、session.setMaxInactiveInterval()

    2、web.xml

    配置 10//单位是分钟

application

实现了用户间数据共享,可存放全局变量。

开始于服务器启动,终止于服务关闭。

是ServletContext类的实例。

setAttribute(String name,Object value) 存储对象到application

getAttribute(String name,Object value) 通过名称获取对象

getAttributeNames() 返回所有可用属性名枚举

getServerInfo() 返回JSP(Servlet)引擎名及版本号

其他内置对象

  • page:

    指当前页面本身,类似与this指针,是java.lang.Object类的实例
  • pageContext:

    提供了对JSP页面内所有对象及命名空间的访问,可以访问session及application的某一属性,是pageContext类的实例

    常用方法:

    forward("pagename") 页面跳转

    include("pagename") 当前位置页面嵌套
  • config:

    config对象是在一个Servlet初始化时,JSP引擎向其传递信息用的,包含初始化必须的信息以及一些服务器的信息

    常用方法:

    ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象

    String getInitParameter() 返回初始化参数的值

    Enumeration getInitParameterNames() 获取初始化所有参数的枚举
  • Exception:

    当页面发生异常时,即产生该对象;若一个页面需要应用此对象,需要将isErrorPage设为true,否则无法编译;是java.lang.Throwable类的对象

    常用方法:

    String getMessage() 获取异常信息

    void printStackTrace() 打印异常堆栈信息

    Throwable FillInStackTrace() 重写异常堆栈信息

待续。。。