【JavaWeb】 目前主要更新JavaWeb,一起学习一起进步。
本期主要介绍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
因为 JSP 默认编码是 ISO8859-1 ,不利于我们中文开发,所以我们需要修改 JSP 的编码为 UTF-8
JSP 文件建议创建在项目的 WebContent 目录下
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 。