JSP运行原理
1.客户端访问zhangpeng.jsp
2.服务器读取zhangpeng.jsp内容到内存
3.服务器根据zhangpeng.jsp内容生成servlet程序--存在tomcat/work下
4.servlet编译运行
图解:
JSP中的代码都会被翻译至servlet中的_jspService()方法中
翻译规则:
1.JSP中HTML翻译成out.write()
2.JSP中java代码不会被翻译,会原样不动的放进_jspService()中
JSP程序的翻译过程
JSP脚本元素
1.声明 将被翻译成servlet类成员变量和方法以及内部类等
2.表达式<%=%> 用于向页面输出内容 将被翻译成servlet的out.print()方法
3.代码块 <%%> 可以编写任何的java程序。代码块可以和HTML嵌套使用
JSP和servlet的关系
JSP和servlet都是动态网页技术,只是分工不同。
有人恰当的比喻:servlet就是嵌入HTML的java文件,JSP就是嵌入java的HTML文件
JSP技术的企业最佳实践
生成HTML内容
JSTL,全称(jsp standard Taglib Liberary) JSP标准标签库
JSTL有什么用?
简化页面<%%>与HTML嵌套写法,说白了就是简化JSP开发。
--------------------------------------------------------------------------------------------------------------------------------
JSP基本语法
JSP脚本元素
JSP页面注释
JSP指令元素
JSP内置对象
JSP标签
JSP四种数据范围
JSP中的pageEncoding和contentType的作用
pageEncoding
在编写阶段,当我们编写完jsp文件时,点击"save"时,jsp将保存在硬盘,pageEncoding就是JSP文件
保存在硬盘上的编码格式。
contentType
用来对servlet生成的HTML页面进行编码,同时指定浏览器查看内容的编码。
图解:
错误友好页面的设置
当页面发生错误时不应该给用户看到含有代码的错误页面,应该给一个友好的页面。
通过errorPage 和 isErrorPage控制JSP页面发生错误时的跳转
errorPage在发生错误的jsp中设置发生错误时跳转的页面
isErrorPage设置true ,就是错误页面本身,只有设置了这个属性,才能使用jsp的内置对象
excetion打印出错误信息。
这种方式的配置只能处理一个页面的错误,处理多个页面的时候需要每个页面都要
做如上的配置。
实际开发中,通常用这个方法。
web.xml中配置
这种方式能处理所有页面的错误,同时它不仅可以处理500,还可以处理404.
JSP 的include指令
用来静态包含页面---将页面的公共部分提取出来,通过include完成页面的布局
include包含目标页面的整个内容,被包含页面不需要一个完整的HTML,只要编写HTML片段就可以了,同时保留它的编码。
静态包含的原理:
index.jsp-------翻译------index_jsp.java
在翻译的过程中,遇到这句时<% include file="/demo6/logo.jsp"%>.翻译logo.jsp将p翻译后的servlet内容嵌入到index_jsp中。
静态包含:包含include中的文件的源代码,将两者的源代码合并至一起,结果就是生成一个servlet。
动态包含的原理:
taglib指令,用来在jsp中引用标签库文件的。
JSP9大内置对象
JSP Servlet
page ---this(HttpServlet) 代表当前jsp生成的servlet对象
pageContext ---PageContext 页面上下文对象 1.向page范围存储数据 2..可以获得另外8个内置对象
request ---HttpServletRequest
session ---HttpServletSession
application ---ServletContext
response ---HttpServletResponse
out ---JspWriter
config ---ServletConfig
exception ---Throwable
应用上下文:可以获取应用的所有信息
页面上下文可以获取页面中的所有信息
servlet上下文可以获取servlet生命周期中的所有信息
out对象的原理,和response.getWriter()有什么区别
两者都是向浏览器输出内容
但是后者输出的内容在前者的内容之前
什么是内置对象?
JSP翻译为servlet代码时候,有些对象默认在servlet中已经创建好的,这类对象可以直接在JSP中使用。