JSP基础
JSP基础一、什么是JSPJSP,即 Java Server Pages,Java 服务器页面,即运行在服务器端的页面。它是由 Sun 公司倡导,许多国际性大公司参与,一起建立的一种动态网页技术。JSP 技术是在传统的静态网页 HTML文件中插入 Java 代码片断和 JSP 标签后形成的一种文件,其后缀名为.jsp。使用 JSP 开发的 Web应用是跨平台的,既能在
JSP基础
一、什么是JSP
JSP,即 Java Server Pages,Java 服务器页面,即运行在服务器端的页面。它是由 Sun 公司
倡导,许多国际性大公司参与,一起建立的一种动态网页技术。JSP 技术是在传统的静态网页 HTML
文件中插入 Java 代码片断和 JSP 标签后形成的一种文件,其后缀名为.jsp。使用 JSP 开发的 Web
应用是跨平台的,既能在 Linux 上运行,也能在其他操作系统上运行。
例:
(1)在Eclipse下的Web工程的WebContent目录中新建一个JSP文件,例如新建一个index.jsp
文件。
(2)在 jsp 文件中写入如下内容:

(3)然后运行这个 Web 项目,在浏览器中即可看到“Hello JSP World!”字样。
打开 Eclipse 的工作空间 workspace 的如下子目录,可看到两个文件:
workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost

源码文件 index_jsp.java 就是由刚才的 Web 项目中的 Index.jsp 文件转变成的 Java 文件。
而 index_jsp.class 文件为 index_jsp.java 文件编译后的字节码文件。打开这个 index_jsp.java 文件,发现其继承自 HttpJspBase 类。打开 Tomcat 的源码目录中的 java 子目录,在其中查看 HttpJspBase 的源码,发现其继承
自 HttpServlet。
也就是说,JSP 文件的本质是 Servlet。只不过,JSP 与 Servlet 不同的是,JSP 是专门用于
进行数据展示的 Servlet,其有特殊的写法。而普通的 Servlet 是用于完成业务逻辑处理的。
由于 Servlet 是运行在单例多线程环境下的,所以 JSP 同样也是运行在单例多线程环境下的。
二、JSP规范
将 JSP 页面翻译为 Servlet 的过程,是由 Tomcat 完成。在 Tomcat 中内置了一个 JSP 翻译
引擎,当第一次访问该 JSP 页面时,翻译引擎会将 JSP 页面翻译为 Servlet 的.java 文件,再将
其编译为.class 文件进行运行。
SUN 公司制定的 JavaEE 规范中包含两个很重要的子规范:Servlet 规范,及 JSP 规范。其
中JSP规范中就包含了如何将JSP页面翻译为Servlet。例如,JSP页面中的HTML、CSS、JavaScript,
及普通文本部分,均会被翻译到 out. write ()中。
Tomcat 中的 JSP 翻译引擎,就遵循了这个 JSP 规范。
三、JSP注释
在 JSP 页面中使用注释,可以将要注释的内容使用<%– –%>括起来。
当然,在 JSP 页面中也可以使用 HTML 的注释。 但它们的使用效果是不同的。
(1)HTML 注释会被 JSP 翻译引擎翻译到 Servlet 的 out.write()中;而 JSP 注释则会被 JSP 翻
译引擎忽略,在 Servlet 中是看不到的。
(2)在客户端浏览器查看源码时,HTML 注释是可以查看到的;但 JSP 注释在客户端是查看
不到的。
例如,在 JSP 页面中写入如下注释:

查看 Tomcat 服务器的 work 目录中由 JSP 引擎翻译过的 Servlet,可以看到:

查看客户端浏览器的源码文件,可以看到:

四、JSP的java代码块
JSP 的 Java 代码块也称为 JSP 小脚本,是以<% %>括起来的部分,其中可以编写 Java
代码。编写在 Java 代码块中的代码,会被 JSP 翻译引擎将其置入到 Servlet 的_jspService()方
法中作为方法中的 Java 语句出现。所以,其中存放的必须是以分号结尾的 Java 语句。
需要注意的是,JSP 代码块可以放置在 JSP 页面的任意位置,可以放置任意数量。但它
们都会被按照顺序放置到 Servlet 的_jspService()方法中。也就是说,其执行顺序是与其在 JSP
页面中的出现顺序是一致的。例如,

被翻译到 Servlet 的_jspService()方法中为:

由于 JSP 小脚本是被翻译到了 Servlet 的_jspService()方法中,所以 JSP 小脚本中是不能
出现如下内容的:
- 声明的变量是不能添加权限访问控制符的
- 不能定义方法
- 不能定义静态语句块
五、JSP的声明语句块
在 JSP 页面中使用<%! %>括起来的部分,称为声明语句块。声明语句块中的内容,将
被 JSP 引擎翻译到 Servlet 的类体中,没有包含到哪个方法体中。
这样的话,在 JSP 的声明语句块中就可声明实例变量、实例方法、静态方法、静态代码
块等内容。并且,这些内容均可被 JSP 的 Java 代码块中代码访问。因为它们原本就是一个
Servlet 类中的代码。不过,还是不建议在 JSP 的声明语句块中声明实例变量。因为 JSP 是运
行在单例多线程环境下的,实例变量将会引起线程安全问题。
需要注意的是,在 JSP 的声明语句块中,是不能编写普通的 Java 语句的。否则的话,这些语句将会直接出现在 Servlet 的类体中。
声明语句块也可以定义在 JSP 页面的任意位置,且可以定义任意多个。

在 JSP 的 Java 代码块与声明语句块中,均可使用 Java 的单行注释与多行注释。该注释
将会出现在 Servlet 中的相应位置。

六、JSP的表达式块
在 JSP 页面中使用<%= %>括起来的部分,称为表达式块。其可在 JSP 页面中输出变量、
常量,及它们组成的各种表达式的值。注意,是表达式,而不是语句,是没有分号的。该表
达式将被 JSP 引擎翻译到_jspService()方法的 out.write()方法中输出。
例如,

被 JSP 引擎翻译为 Servlet 后为:

更多推荐



所有评论(0)