发表于: 2020-08-23 01:31:22
1 1503
今天完成的事情:唉,写代码写忘记时间了,忘记占坑,昨天的错过了。难过
明天计划的事情:小课堂讲解。学习Dubbo.
遇到的问题:暂无
收获:
jsp九大内置对象
1.背景介绍
jsp是什么?内置对象怎么来的?这是从背景应该知道的。
首先,jsp(JavaServer Pages)java服务器页面,是一种动态网页技术。实际上就是java Servlet,实现的是java web应用程序的用户界面部分,将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。
在这里我们需要知道jsp的一些弊端,
可读性差,在jsp页面中,我们会用<%..%>将java代和html写在一起,整个页面就和杂。
jsp难于调试,不能debug,单元测试。
java代码写在jsp中,暴露了我们内部服务等对象信息,安全性低。
内置对象就是就是为了将一些常用的,经常用到的代码封装起来,简化JSP对程序的操作。
2.知识剖析
内置对象就是JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。
jsp有几个内置对象,毋庸置疑九大内置对象,可以划分为四类。
- 输入输出对象:out对象、response对象、request对象
- 通信控制对象:pageContext对象、session对象、application对象
- Servlet对象:page对象、config对象
- 错误处理对象:exception对象
2.1 request对象
封装了从客户端到服务器发出的请求信息,是 javax.servlet.httpServletRequest类型的对象,比如可以获取请求信息,请求参数,头部信息,设置指定参数。
request对象方法介绍:
方法名 | 说明 |
isUserInRole | 判断认证后的用户是否属于某一成员组 |
getAttribute | 获取指定属性的值,如该属性值不存在返回Null |
getAttributeNames | 获取所有属性名的集合 |
getCookies | 获取所有Cookie对象 |
getCharacterEncoding | 获取请求的字符编码方式 |
getContentLength | 返回请求正文的长度,如不确定返回-1 |
getHeader | 获取指定名字报头值 |
getHeaders | 获取指定名字报头的所有值,一个枚举 |
getHeaderNames | 获取所有报头的名字,一个枚举 |
getInputStream | 返回请求输入流,获取请求中的数据 |
getMethod | |
getParameter | 获取指定名字参数值 |
getParameterNames | 获取所有参数的名字,一个枚举 |
getParameterValues | 获取指定名字参数的所有值 |
getProtocol | |
getQueryString | |
getRequestURI | 获取发出请求字符串的客户端地址 |
getRemoteAddr | 获取客户端的IP地址 |
getRemoteHost | 获取客户端的名字 |
getSession | 获取和请求相关的会话 |
getServerName | |
getServerPath | 获取客户端请求文件的路径 |
getServerPort | |
removeAttribute | 删除请求中的一个属性 |
setAttribute | 设置指定名字参数值 |
2.2 response对象
response对象主要用于对客户端的请求进行回应。,以及处理http的连接信息,例如设置http文件头,设置cookie对象等。
response对象方法:
方法名 | 说明 |
addCookie | 添加一个Cookie对象 |
addHeader | 添加Http文件指定名字头信息 |
containsHeader | 判断指定名字Http文件头信息是否存在 |
encodeURL | 使用sessionid封装URL |
flushBuffer | 强制把当前缓冲区内容发送到客户端 |
getBufferSize | 返回缓冲区大小 |
getOutputStream | 返回到客户端的输出流对象 |
sendError | 向客户端发送错误信息 |
sendRedirect | 把响应发送到另一个位置进行处理 |
setContentType | 设置响应的MIME类型 |
setHeader | 设置指定名字的Http文件头信息 |
2.3 out对象
out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。
方法 | 描述 |
out.print(dataType dt) | 输出Type类型的值 |
out.println(dataType dt) | 输出Type类型的值然后换行 |
out.flush() | 刷新输出流 |
2.4 session
session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。session对象用来跟踪在各个客户端请求间的会话。
session对象方法:
方法名 | 说明 |
getAttribute | 获取指定名字的属性 |
getAttributeNames | 获取session中全部属性名字,一个枚举 |
getCreationTime | 返回session的创建时间 |
getId | 获取会话标识符 |
getLastAccessedTime | 返回最后发送请求的时间 |
getMaxInactiveInterval | 返回session对象的生存时间单位千分之一秒 |
invalidate | 销毁session对象 |
isNew | 每个请求是否会产生新的session对象 |
removeAttribute | 删除指定名字的属性 |
setAttribute | 设定指定名字的属性值 |
2.5 application
application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。
应用为多个用户共享全局信息,比如统计在线人数。
application对象方法:
方法名 | 说明 |
getAttribute | 获取应用对象中指定名字的属性值 |
getAttributeNames | 获取应用对象中所有属性的名字,一个枚举 |
getInitParameter | 返回应用对象中指定名字的初始参数值 |
getServletInfo | 返回Servlet编译器中当前版本信息 |
setAttribute | 设置应用对象中指定名字的属性值 |
2.6 pageContext
pageContetx对象是jsp页面中所有对象功能的最大集成着。使用他可以访问所有的jsp内置对象。比如这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。
pageContext对象方法:
方法名 | 说明 |
forward | 重定向到另一页面或Servlet组件 |
getAttribute | 获取某范围中指定名字的属性值 |
findAttribute | 按范围搜索指定名字的属性 |
removeAttribute | 删除某范围中指定名字的属性 |
setAttribute | 设定某范围中指定名字的属性值 |
getException | 返回当前异常对象 |
getRequest | 返回当前请求对象 |
getResponse | 返回当前响应对象 |
getServletConfig | 返回当前页面的ServletConfig对象 |
getServletContext | 返回所有页面共享的ServletContext对象 |
getSession | 返回当前页面的会话对象 |
2.7 page
这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。page 对象就是this对象的同义词。
page对象的方法:
方法名 | 说明 |
toString | 将当前项目的信息打印出来 |
getClass | 返回当前的object类 |
hashCode | 返回page对象的hashCode值 |
equals | 用于比较对象是否与当前对象相同 |
2.8 config
config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。
这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。
2.9 exception
exception对象表示jsp引擎在执行代码时抛出的异常
如果想要使用exception对象,那么需要配置编译指令的isErrorPage属性为true
即在页面指令中设置:<%@page isErrorPage=“true”%>
3.常见问题
1).能说下JSP的生命周期吗?
2).能说下jsp的常见内置对象?
4.解决方案
1). JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。
以下是JSP生命周期中所走过的几个阶段:
- 编译阶段:
servlet容器编译servlet源文件,生成servlet类
- 初始化阶段:
加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
- 执行阶段:
调用与JSP对应的servlet实例的服务方法
- 销毁阶段:
调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
2). 总共九大内置对象,常用的就是Request,Response,PageContext,Seesion等
5.编码实战
6.扩展思考
1).内置对象如何封装使用的?
7.参考文献
8.更多讨论
评论