JSP运行原理和九大隐式对象
JSP页面第一次被访问时,WEB容器会把请求交给JSP引擎(一个java程序)去处理
JSP引擎先将JSP翻译成一个_jspServlet(实质就是一个servlet)然后按照servlet的调用方式调用
翻译会导致第一次访问较慢,后面JSP无变化会直接调用
JSP引擎调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用
定义了对应的9个变量来快速获得这9大对象的引用
request
response
session
application
config
page
exception
out隐式对象用于向客户端发送文本数据
out对象通过调用pageContext对象的getOut方法返回的
类似于ServletResponse.getWriter方法返回的PrintWriter对象
JSP页面out隐式对象类型为JspWriter 相当于带缓存功能的PrintWriter
JSP-page指令-buffer属性 可以调整缓存大小或关闭
向out对象写入内容且(JSP-page指令-buffer属性缓存关闭/out对象缓冲区已满/整个JSP页面结束)才会写到浏览器(servlet引擎提供的缓冲区)
因为缓存 JSP页面推荐一致用out不要ServletResponse.getWriter输出(会导致输出顺序混乱)
pageContext JSP技术中最重要的对象 代表JSP页面的运行环境
封装了其他8大隐式对象的引用
getException()/getPage()/getRequest()/getResponse()/getServletConfig()/getServletContext()/getSession()/getOut()
封装其他8大隐式对象的意义 自定义标签开发技术
自身是一个域对象可以用来保存数据(page域作用于本页面)
setAttribute() getAttribute() removeAttribute()还封装了访问其他域的方法和代表各个域的常量
findAttribute() 查找各个域中的属性page-request-session-application(el表达式${...}的后台实现)
还封装了web开发中一些常用操作(引入include/跳转forward其他资源,检索其他域对象属性)
JSP标签
也称为JSP Action(JSP动作)元素 提供业务逻辑功能 避免JSP页面直接编写java代码难以维护
<jsp:include page="/aaa.jsp"></jsp:include> 动态包含
<jsp:forward page="/bbb"></jsp:forward> 首页跳到对应servlet
<jsp:param name="ccc" value="ddd"/> 带数据
JSP映射和常见错误处理
映射JSP
<servlet>
<servlet-name>xxx</servlet-name>
<jsp-file>/jsp/aaa.jsp</jsp-file>
<load-on-startup>1</load-on-startup>
</servlet>
...
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/bbb/ccc.jsp</url-pattern>
</servlet-mapping>
查找JSP页面中的错误
1.JSP页面中的JSP语法格式有问题--不能翻译成servlet源文件
2.JSP语法格式没问题翻译成的servlet源文件有java语法问题--翻译的servlet源文件不能通过编译
3.翻译成的servlet程序运行时异常--与普通java程序运行时错误一样