1.1、什么是 JSP(了解)
JSP 全名是 Java Server Pages ,它是建立在 Servlet 规范之上的动态网页开发技术。在 JSP 文件中, HTML代码与 Java 代码共同存在,其中, HTML 代码用来实现网页中静态内容的显示, Java 代码用来实现网页中动态内容的显示。为了与传统 HTML 有所区别, JSP 文件的扩展名为 .jsp 。
JSP 技术所开发的 Web 应用程序是基于 Java 的,它可以用一种简捷而快速的方法从 Java 程序生成 Web页面,其使用上具有如下几点特征:
跨平台:由于 JSP 是基于 Java 语言的,它可以使用 Java API ,所以它也是跨平台的,可以应用于不同的系统中,如 Windows 、 Linux 等。当从一个平台移植到另一个平台时, JSP 和 JavaBean 的代码并不需要重新编译,这是因为 Java 的字节码是与平台无关的,这也应验了 Java 语言“一次编译,到处运行”的特点。
业务代码相分离:在使用 JSP 技术开发 Web 应用时,可以将界面的开发与应用程序的开发分离开。
开发人员使用 HTML 来设计界面,使用 JSP 标签和脚本来动态生成页面上的内容。在服务器端,JSP 引擎(或容器,本书中指 Tomcat )负责解析 JSP 标签和脚本程序,生成所请求的内容,并将执行结果以 HTML 页面的形式返回到浏览器。
组件重用: JSP 中可以使用 JavaBean 编写业务组件,也就是使用一个 JavaBean 类封装业务处理代码或者作为一个数据存储模型,在 JSP 页面中,甚至在整个项目中,都可以重复使用这个JavaBean ,同时, JavaBean 也可以应用到其他 Java 应用程序中。
预编译:预编译就是在用户第一次通过浏览器访问 JSP 页面时,服务器将对 JSP 页面代码进行编译,并且仅执行一次编译。编译好的代码将被保存,在用户下一次访问时,会直接执行编译好的代码。这样不仅节约了服务器的 CPU 资源,还大大的提升了客户端的访问速度。
JSP 是 Java 独有,除了可以书写 HTML/CSS/JS 代码,
更支持书写 Java 代码和 EL 表达式等强大功能。
扩展名: .jsp
1.2、JSP 开发模板修改
因为 JSP 默认编码是 ISO8859-1,不利于我们中文开发,所以我们需要修改 JSP 的编码为 UTF-8
1.3、JSP 快速入门
JSP 文件建议创建在项目的 WebContent 目录下
1.4、JSP 运行原理(了解)
JSP 的本质是一个 Servlet(Java 程序)。
【以下为自学 - 扩展 - 了解】
JSP 的工作模式是请求 / 响应模式,客户端首先发出 HTTP 请求, JSP 程序收到请求后进行处理并返回处理结果。在一个 JSP 文件第一次被请求时, JSP 引擎(容器)把该 JSP 文件转换成为一个Servlet ,而这个引擎本身也是一个 Servlet 。 JSP 的运行过程如图 1-6 所示。
JSP 的运行过程具体如下:
( 1 )客户端发出请求,请求访问 JSP 文件。
( 2 ) JSP 容器先将 JSP 文件转换成一个 Java 源文件( Java Servlet 源程序),在转换过程中,如果发现JSP 文件中存在任何语法错误,则中断转换过程,并向服务端和客户端返回出错信息。
( 3 )如果转换成功,则 JSP 容器将生成的 Java 源文件编译成相应的字节码文件 *.class 。该 class文件就是一个 Servlet , Servlet 容器会像处理其他 Servlet 一样来处理它。
为了使同学们更容易理解 JSP 的运行原理,接下来简单介绍分析一下 JSP 所生成的 Servlet 代码。
以 HelloWorld.jsp 为例,当用户第一次访问 HelloWorld.jsp 页面时,该页面会先被 JSP 容器转换为一个名称为 HelloWorld_jsp.java 的源文件,然后将源文件编译为一个名称为 HelloWorld_jsp.class 字节码文件。
如 果 项 目 发 布 在 Tomcat 的 webapps 目 录 中 , 源 文 件 和 .class 文 件 可 以 在 “ Tomcat 安装 目 录
/work/Catalina/localhost/ 项目名 /org/apache/jsp ”下找到,如图 1-7 所示。
在图 1-7 中,地址栏中的路径多出了 org\apache\jsp ,这是由于 JSP 文件转换成类文件时会带有包名,该包名为 org.apache.jsp 。从图中还可以看出, HelloWorld.jsp 已被转换为源文件和 .class 文件。
打开HelloWorld_jsp.java 文件,可查看转换后的源代码,其主要代码如下所示。(以下代码可以快速浏览,确定父类和方法名即可)
从上面的代码可以看出,HelloWorld.jsp 文件转换后的源文件没有实现 Servlet 接口,但继承了org.apache.jasper.runtime.HttpJspBase 类。在 Tomcat 源文件中查看 HttpJspBase 类的源代码,具体如下所示:(以下代码可以快速阅读,确定父类即可)
从 HttpJspBase 源代码中可以看出, HttpJspBase 类是 HttpServlet 的一个子类,由此可HelloWorld_jsp类就是一个 Servlet 。 结论: JSP 就是 Servlet 。