简介
JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。在JSP页面中,可以通过存取JSP内置对象实现与JSP页面和Servlet环境的相互访问。每个内部对象均有对应所属的ServletAPI类型。
内置对象是sevlet容器创建,我们程序不创建实例,可以在jsp文件中直接使用,而且名称是小写。
JSP内置对象包括request对象、response对象、session对象、out对象、application对象、page对象、exception对象、pageContext对象、config对象。这些对象在客户端和服务器端交互的过程中分别完成不同的功能。
隐匿对象
JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。
对象 | 描述 |
---|---|
request | HttpServletRequest 接口的实例 |
response | HttpServletResponse 接口的实例 |
out | JspWriter类的实例,用于把结果输出至网页上 |
session | HttpSession类的实例 |
application | ServletContext类的实例,与应用上下文有关 |
config | ServletConfig类的实例 |
pageContext | PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问 |
page | 类似于Java类中的this关键字 |
Exception | Exception类的对象,代表发生错误的JSP页面中对应的异常对象 |
HttpServletRequest
request 对象是 javax.servlet.HttpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
常用方法 | 描述 |
---|---|
String getParameter(String name) | 根据页面表单组件名称获取页面提交数据 |
String[] getParameterValues(String name) | 处理表单同名参数所有值,返回是字符串数组 |
String getHeader(String name) | 取得浏览器头信息 |
String getRemoteAddr() | 返回客户端的IP地址 |
String getLocalAddr() | 返回服务器的IP地址 |
String getServletContext().getServerInfo() | 返回Server信息 |
Enumeration<String> getHeaderNames() | 返回所有头部名称 |
String getHeader("user-agent“) | 头部信息浏览器及操作系统信息 |
String getHeader("referer") | 获取请求来源 |
//http://localhost:8080/web
String bp = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ request.getContextPath();
out.print(bp);
//获取当前页面的真实路径
String u = request.getRequestURI();
out.print(request.getServletContext().getRealPath(u));
常用方法 | 描述 |
---|---|
String getMethod() | 取得请求方法 GET POST |
void setCharacterEncoding(“utf-8”) | 设置请求编码,用来处理表单提交POST中文乱码 |
String getCharacterEncoding() | 取得编码字符集 |
Cookie[] getCookies() | 取得所有Cookie对象 |
void getRequestDispatcher(“show.jsp”).forward(request,response) 转发 | |
void setAttribute(name, o) | 设置属性对象 |
Object getAttribute(name) | 取得属性对象 |
String getContextPath() | 获取项目路径 /web |
getRequestURI() | /web/index.jsp |
getRequestURL() | http://localhost:8080/web/index.jsp |
getServletContext().getRealPath(request.getRequestURI()) 获取当前页面的真实地址 |
当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的。您可以查阅HTTP协议来获得更多的信息。
下表列出了浏览器端信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息:
信息 | 描述 |
---|---|
Accept | 指定浏览器或其他客户端可以处理的MIME类型。它的值通常为 image/png 或 image/jpeg |
Accept-Charset | 指定浏览器要使用的字符集。比如 ISO-8859-1 |
Accept-Encoding | 指定编码类型。它的值通常为 gzip 或compress |
Accept-Language | 指定客户端首选语言,servlet会优先返回以当前语言构成的结果集,如果servlet支持这种语言的话。比如 en,en-us,ru等等 |
Authorization | 在访问受密码保护的网页时识别不同的用户 |
Connection | 表明客户端是否可以处理HTTP持久连接。持久连接允许客户端或浏览器在一个请求中获取多个文件。Keep-Alive 表示启用持久连接 |
Content-Length | 仅适用于POST请求,表示 POST 数据的字节数 |
Cookie | 返回先前发送给浏览器的cookies至服务器 |
Host | 指出原始URL中的主机名和端口号 |
If-Modified-Since | 表明只有当网页在指定的日期被修改后客户端才需要这个网页。 服务器发送304码给客户端,表示没有更新的资源 |
If-Unmodified-Since | 与If-Modified-Since相反, 只有文档在指定日期后仍未被修改过,操作才会成功 |
Referer | 标志着所引用页面的URL。比如,如果你在页面1,然后点了个链接至页面2,那么页面1的URL就会包含在浏览器请求页面2的信息头中 |
User-Agent | 用来区分不同浏览器或客户端发送的请求,并对不同类型的浏览器返回不同的内容 |
HttpServletResponse
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
常用方法 | 描述 |
---|---|
response.addCookie(cookie) | 向客户端发送cookie数据 |
setCharacterEncoding("utf-8”) | 设置输出字符集,一般情况下不需要设置 |
setContentType("text/html; charset=utf-8”) | 设置当前文件输出类型编码 |
sendRedirect("") | 当前页面重定向,浏览器地址会改变 |
重定向:response.sendRedirect(String url)
发送了一次新的请求,之前的数据是不存在的,发生在客户端
浏览器的地址是重定向的页面的地址
转发:request.getRequestDispatcher(String url).forward(request,response)
没有开启新的请求,原来请求的数据一并传递过来,发生在服务器端。
浏览器的地址栏不会发生改变
<jsp:forward page=“del.jsp”></jsp:forward>也是转发
out
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
方法 | 描述 |
---|---|
out.print(dataType d); | 输出Type类型的值 |
out.println(dataType d); | 输出Type类型的值然后换行 |
out.flush(); | 刷新输出流 |
exception
HttpSession
HttpSession 服务端的技术 服务器会为每一个用户 创建一个独立的HttpSession
HttpSession原理 当用户第一次访问Servlet时,服务器端会给用户创建一个独立的Session 并且生成一个SessionID,这个SessionID在响应浏览器的时候会被装进cookie中,从而被保存到浏览器中 当用户再一次访问Servlet时,请求中会携带着cookie中的SessionID去访问 服务器会根据这个SessionID去查看是否有对应的Session对象 有就拿出来使用;没有就创建一个Session(相当于用户第一次访问)
域的范围: Context域 > Session域 > Request域 Session域 只要会话不结束就会存在 但是Session有默认的存活时间(30分钟)