什么是JSP? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Java Server Pages,它和servlet技术一样,都是Java中用于开发动态WEB资源的技术 JSP相当于Java + HTML JSP最大的特点就是:有种写HTML代码的感觉,HTML只能提供静态的WEB资源 JSP技术允许在HTML页面中嵌套Java代码 对比Servlet有一个特别好的地方,可以对前端页面进行排版 JSP的执行过程: JSP本质上就是一个Servlet程序 1.第一次访问JSP文件时,会在Tomcat的work目录下生成一个对应的java程序 例如:01hello.jsp ==> _01hello_jsp.java 2.根据这个java程序生成对应的class字节码文件 3.Tomcat服务器会加载这个class字节码文件,执行里面的代码,执行的本质其实是一个Servlet程序 4.如果是第二次访问这个JSP文件,不会重新生存对应的java程序,以及class文件,直接执行对应的class文件 这里Tomcat服务器会根据JSP文件和class文件的修改时间,来判断是否需要重新生成Java和编译之后的class文件
JSP语法规则 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1.JSP脚本 <% 只能是Java代码 %> 在JSP脚本中只能出现Java代码,不能出现其他的任何东西,例如:html代码 在JSP脚本中的代码会被JSP编译器原封不动的放到Servlet程序中的_jspService方法中 2.JSP表达式 <%=Java的表达式%> 例如: <%= new Date()%> <%=name%> Java的表达式就是一条Java语句,但是在JSP表达式语法中不允许出现分号 3.JSP声明 <%! 定义变量,方法 %> JSP声明的Java代码不会被编译到_jspservice方法中,而是定义在这个JSP文件对应的class类中,JSP声明中的变量是成员变量,方法可以认为是成员方法 4.JSP注释 <%-- 注释内容--%> 唯一推荐格式
JSP三大指令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 JSP指令不是直接生成可视化文件,而是告诉JSP引擎如何处理JSP页面中的其他部分 JSP指令的基本语法: <%@ 指令名 属性名="值"%> 1.include指令 include指令用于引入其他JSP页面,如果使用include指令引入其他的JSP页面,JSP引擎会把这两个JSP文件翻译成一个servlet, 所以include指令引入称之为静态引入 格式: <%@include file="relativeURL"%> 这里要求file属性使用URL用来引入其他的JSP文件,这里URL必须是一个相对路径,如果使用"/",表示当前WEB项目的根目录 【注意】 1.被引入的文件必须符合JSP语法 2.被引入的文件可以使用HTML,JSP这些文件格式,JSP引擎也会按照JSP语法规则处理 小规范: 如果是静态的引入文件,通常会使用.jspf(JSP Fragments)作为文件后缀名 2.Page指令 用于定义JSP页面的各种属性,无论它在哪一个位置出现,都作用于整个JSP页面,书写要求:page指令最好放在页面的开始 page指令的常用语法: <%@ page [language = "java"], [import = "pagename.* 或者class"], [session = "true"], [buffer = "nune | 8kB | sizekB"], [autoFlush = "true | false"], [errorPage = "relativeURL"], [isErrorPage = "true | false"], [pageEncode = "utf-8 | charSet"], [contentType = "text/html;charset = utf-8"] %> 使用errorPage设置当前页面的错误异常处理页面,在错误处理页面中,如果需要使用exception对象,必须设置isErrorPage="true" 一般情况下不会给每一个页面都设置ErrorPage,否则工作量太大了。 全局异常处理 在web.xml中配置 <error-page > <error-code > 404</error-code > <location > /common/404.jsp</location > </error-page > <error-page > <error-code > 500</error-code > <location > /common/500.jsp</location > </error-page > <error-page > <exception-type > java.lang.NullPointerException</exception-type > <location > /common/error.jsp</location > </error-page > 3.teblib指令
JSP和Servlet的分工 Servlet用来处理响应的数据
JSP用来处理Servlet转发过来的响应数据
内置对象 1 2 3 4 5 6 每一个JSP页面在第一次访问的时候,WEB服务器都会把JSP文件交给JSP引擎处理,处理之后,会出现一个非常重要的方法_jspservice, 本质就是Servlet里面的Service方法 JSP引擎在调用JSP对应的_jspService方法时,会提供给 _jspService方法9 个开发相关的内置对象 1. 九大内置对象
内置对象
对应的Servlet技术
request
HttpServletRequest
response
HttpServletResponse
application
ServletContext
Session
HttpSession
out
jspWriter 类似于PrintWrite
pageContext
pageContext
exception
throwable
config
Servletconfig
page
Object(this) 很少使用
1 2 3 4 5 6 7 8 9 10 2. out 会有一个buffer缓存。 (自己的理解:JSPWriter对象)out用于给客户端发送文本数据 out对象是通过pageContext对象里面的pageOut获取的,类似于response.getWriter()获取到的PrintWriter对象 3. pageContext pageContext对象是JSP技术最重要的一个对象,这个pageContext表示当前JSP页面的运行环境 这个对象不仅封装了其他的8 大内置(隐式)对象的引用,而且pageContext本身就是一个域对象, 可以用来保存数据。而且pageContext还封装了WEB开发中经常涉及到的一些常用操作 例如: 跳转其他资源,检索其他域对象的属性