什么是JSP
JSP全名为Java Server Pages,java服务器页面。JSP是一种基于文本的程序,其特点就是HTML和Java代码共同存在!
JSP的工作原理
其实JSP在第一次被访问的时候会被编译为HttpJspPage类(该类是HttpServlet的一个子类)
编译过程是这样子的:浏览器第一次请求1.jsp时,Tomcat会将1.jsp转化成1_jsp.java这么一个类,并将该文件编译成class文件。编译完毕后再运行class文件来响应浏览器的请求。
以后访问1.jsp就不再重新编译jsp文件了,直接调用class文件来响应浏览器。当然了,如果Tomcat检测到JSP页面改动了的话,会重新编译的。
- 既然JSP是一个Servlet,那JSP页面中的HTML排版标签是怎么样被发送到浏览器的?我们来看下上面1_jsp.java的源码就知道了。原来就是用write()出去的罢了。说到底,JSP就是封装了Servlet的java程序罢了。
- JSP页面的代码服务器是怎么执行的?再看回1_jsp.java文件,java代码就直接在类中的service()中。
JSP比Servlet更方便更简单的一个重要原因就是:内置了9个对象!内置对象有:out、session、response、request、config、page、application、pageContext、exception
JSP生命周期
JSP也是Servlet,运行时只有一个实例,JSP初始化和销毁时也会调用Servlet的init()和destroy()方法。另外,JSP还有自己初始化和销毁的方法
public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } public void _jspDestroy() { }
JSP的语法
JSP代码可以分为两部分:
模板数据:就是HTML代码
元素:JSP页面中的java代码、JSP指令、JSP标签
JSP脚本
JSP的脚本就是JSP页面中的java代码,也叫做scriptlet。JSP的脚本必须使用<%%>括起来,不然会被当成是模板数据的!
JSP脚本有三种方式
<%%>【定义局部变量,编写语句】---------------<jsp:scriptlet>行为代替(好像用不了,需要考虑版本?)
<%!%>【定义类或方法,但是没人这样用!】
<%=%>(也称之为表达式输出)【输出各种类型的变量,int、double、String、Object等】
JSP注释
<%--这是JSP注释--%>
<%--%>
JSP指令
JSP指令用来声明JSP页面的相关属性,例如编码方式、文档类型等等
JSP指令的语法
<%@指令 属性名="值" %>
page指令
page指令常见属性
-
-
- language="java"
- extends="package.class"
- import="{package.class | package.*}, …"
- session="true | false"
- buffer="none | 8kb | sizekb"
- autoFlush="true | false"
- isThreadSafe="true | false"
- info="text"
- errorPage="relative_url"
- 错误跳转友好页面,属于服务器跳转
- 可以在web.xml文件中全局设置错误页,只要发生了404错误或者空指针异常的错误都会跳转到error.jsp页面上
-
<error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/error.jsp</location> </error-page>
- isErrorPage="true | false"
- 错误页面本误
- contentType="mimeType ;charset=characterSet " | "text/html ; charset=ISO-8859-1"
- contentType 不仅仅可以指定以text/html的方式显示,还可以使用其他的形式显示出来。在conf/web.xml文件中可以查询出来
- pageEncoding="characterSet | ISO-8859-1"
- isELIgnored="true | false"
-
include指令
include指令是静态包含。静态包含的意思就是:把文件的代码内容都包含进来,再编译!,看一下jsp的源代码就知道了!
<%@include file="head.jsp" %>
taglib指令
JSP支持标签技术,要使用标签技术就先得声明标签库和标签前缀。taglib指令就是用来指明JSP页面内使用标签库技术。