9大内置对象
内置对象不能在<%! %>中使用!
1)out对象
out对象是javax.servlet.jsp.JspWriter的实例,代表jsp的输出流,用于输出内容形成html页面。
- out对象一些方法:
- out.println( ):输出完成后会换行,换行效果在页面中不显示只在源码中显示
- out.print( ):输出后不换行
- out.getBufferSize( ):输出缓冲区大小
- out.getRemaining( ):输出剩余缓冲区大小
- out.clear( ):清空缓冲区,不将数据发送至客户端
- out.clearBuffer( ):将数据发送至客户端,再清空缓冲区
- out.flush( ):输出缓冲区内容
- out.close( ):关闭输出流
2)request对象
request对象是jsp中的重要对象,每个对象封装着一次用户请求,并且所有对请求参数都被封装在request对象中,request对象是获取用户请求参数的重要途径。
request对象的一些方法:
- request.getMethod( ):获取请求的方法名,如get,post.
- request.getRequestURI( ):获取请求资源名.如请求访问:/jspstudy/08/request.jsp
- request.getProtocol( ):获取请求使用的协议.如:HTTP/1.1
- request.getServerName( ):获取请求使用的服务器,如:localhost.
- request.getServerPort( ):获取请求使用的服务器端口,如:8080
- request.getRemoteAddr( ):获取客户端的ip地址.
- request.getRemoteHost( ):获取客户端主机.
- request.getParameter( ):获取传递过来的参数值.
- request.getParameterValues( ):请求参数有多个值时,该方法返回多个值组成的数组.
- request.setAttribute( ):用来在同一个request周期中保存变量使用;
setAttribute( )
方法和RequestDispatcher.forward()
都在一起使用。 - request.getAttribute( ):可得到JSP页面一表单中控件的Value
- request.getRequestDispatcher( ).forward( ):请求转发
测试
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>request方法</title>
</head>
<body>
<form action="" method="post">
username:<input type="text" name="username"><br/>
<input type="submit">
请求方法名:<%=request.getMethod() %><br/>
请求的资源:<%=request.getRequestURI() %><br/>
请求使用的协议:<%=request.getProtocol() %><br/>
请求使用的服务器:<%=request.getServerName() %><br/>
请求使用的服务器端口:<%=request.getServerPort() %><br/>
客户端的IP地址:<%=request.getRemoteAddr() %><br/>
客户端主机:<%=request.getRemoteHost() %><br/>
表单提交过来的值:<%=request.getParameter("username") %><br/>
</form>
</body>
</html>
- 输出
请求方法名:POST
请求的资源:/jspstudy/08/request.jsp
请求使用的协议:HTTP/1.1
请求使用的服务器:localhost
请求使用的服务器端口:8080
客户端的IP地址:0:0:0:0:0:0:0:1
客户端主机:0:0:0:0:0:0:0:1
表单提交过来的值:test
3)response对象
response对象用于服务器对客户端的响应,大部分时候使用out对象向页面输出,但是out对象是JspWriter对象的实例,JapWriter是Writer的子类,Writer是字符流,因此out对象无法输出非字符内容。jsp页面需要输出图片、pdf文档、excel等非字符对象时需要使用response作为响应输出;response还可以用于重定向,向客户端增加cookie.
常用方法:
- addCookie(Cookie):添加cookie
- setHeader(String name,String value):设置头信息。
- sendRedirect( ):重定向,类似于客户端跳转
- getOutputStream( ):输出流
常用用法:
- 定时刷新:
response.setHeader("refresh","2")
:2秒刷新一次。 - 定时跳转:
response.setHeader("refresh","2;URL=hello.jsp")
:2秒后跳转到hello.jsp。注:此为客户端跳转; - 客户端跳转:
response.sendRedirect("hello.jsp");
注意:以上(2)用法可能会失败,原因是用户在2秒内刷新了页面,导致refresh失效;
- 定时刷新:
4)session对象
session对象代表一次用户会话,一次用户会话的含义是:从客户端连接服务器开始,到客户端与服务器断开为止,这个过程就是一次会话。
session通常用于跟踪用户的会话信息,如判断用户是否登录,购物车中跟踪用户购买的商品。
session范围的属性可以在多个页面点跳转之间共享,一旦关闭浏览器,session结束,session范围内的属性就会全部丢失。
- session常用方法:
- String getId( ):获得Session Id。Session Id类似于Cookie的JSessionId,是服务器自动分配的;
- session.setAttribute(key , value):设置属性。
- session.getCreationTime( ):获得创建时间。
- session.getLastAccessedTime( ):获得最后访问时间。
- session.isNew( ):这个Session是否是新的,即判断Session Id。
- session.invalidate( ):把session的属性设置全部清空。
- 登录-注销页面:
- 使用session.setAttribute( )注册。
- 使用session.getAttribute( )判断是否已经注册。
- 使用session.invalidate( )注销。
5)page对象
代表该页面本身,通常没有太大用处。
6)pageContext对象
代表页面上下文,主要用于jsp之间的共享数据,使用pageContext对象可以访问page、request、session、application范围的变量。
- pageContext.forward(String)
- pageContext.include(String)
- pageContext.getServletConfig( )
- pageContext.getServletContext( )
- pageContext.getRequest( )
- pageContext.geResponse( )
pageContext.getSession( )
- 也就是说,只要有了pageContext对象,就能完成一切内置对象的功能;
7)application对象
jsp、servlet之间不能相互调用,为了解决jsp和servlet之间数据交换的问题,web服务器提供了四个对象,分别是application、session、request、page。放入application对象中的数据对整个Web应用有效,一旦jsp、servlet将数据放入application对象之中,该数据可以被该应用下其它jsp、servlet访问。
- 常用方法:
- getRealPath(path):获得真实路径。
- getContextPath( ):获得虚拟路径。
- getInitParameter(String )
//我们可以在web.xml中添加初始化参数:
[html] view plain copy
<context-param>
<param-name></param-name>
<param-value></param-value>
</context-param>
application==this.getServletContext()
8)config对象
config对象代表当前jsp配置信息,但jsp页面通常无需配置,该对象在jsp页面中较少使用,在servlet中使用较多。
- 如果将一个hello.jsp文件放到WEB-INF中,如果能够让其能够被访问。
答案就是在WEB-INF/web.xml设置即可,内容如下:
<servlet>
<servlet-name>he</servlet-name>
<jsp-file>/WEB-INF/hello.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>he</servlet-name>
<url-pattern>hello</url-pattern>
</sevlet-mapping>
重启服务器后,则在地址栏输入http://localhost:8080/test/hello即可。
config常用方法:
- getInitParameterNames( )
- getInitParameter(String name)
什么是初始化参数呢?
初始化参数在web.xml中进行配置,形式如下:
<servlet>
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
9)exception对象
exception对象是Throwable的实例,代表jsp脚本中产生的错误和异常,是jsp页面异常机制的一部分。把page指令的isErrowPage属性设置为true时可以访问exception内置对象。
- 常用方法:
- getMessage( );
4大域对象
- request——HttpServletRequet
- session——HttpSession
- application——ServletContext
page——PageContext
- 这四个对象有3个方法:
1)void setAttribute(String key,Object o)//设置属性
2)Object getAttribute(String key)//取得后要向下转型
3)void removeAttribute(String key)//删除属性
注意:在getAttribute之后一定要转型!
- 这四个对象有3个方法:
//举例:
pageContext.setAttribute("name","xiazdong");//只能在单个页面中进行保存
String name = (String)pageContext.getAttribute("name");//换了一个页面后就无法取得
//注意:尽可能在满足功能的前提下,将属性设置的保存范围尽可能的小。这样能够提高性能;