了解 JSP 文件的内容

了解 JSP 文件的内容

JavaServer Pages(JSP)使得我们能够分离页面的静态 HTML 和动态部分。HTML 可以用任何通常使用的 Web 制作工具编写,编写方式也和原来的一样。动态部分的代码放入特殊标记之内,大部分以“<%”开始,以“%>”结束。

比如:

<I><%= request.getParameter("title") %></I>Code language: HTML, XML (xml)

这句代码是获取客户端提交过来的参数,并且直接在页面中显示到 <i> 标签中。当我们访问 http://xxxxxx/demo.jsp?title=hello 时,JSP 页面就会把 hello 的内容显示出来。大家可以试试。

JSP 页面文件通常以 .jsp 为扩展名。

示例代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h3>你的搜索关键词是:</h3>
    <%=request.getParameter("keyword")%>
    <h3>2你的搜索关键词是:</h3>
    <%
        String keyword = request.getParameter("keyword");
        if(keyword!=null){
            out.println(keyword);
        }
    %>
</body>
</html>Code language: HTML, XML (xml)

从代码编写来看,JSP 页面更象普通 Web 页面而不象 Servlet,但实际上,JSP 最终会被转换成正规的 Servlet,静态 HTML 直接输出到和 Servlet service 方法关联的输出流。

  1. JSP 到 Servlet 的转换过程一般在出现第一次页面请求时进行。
  2. 你可以在安装 JSP 页面之后自己请求一下这个页面,这样 JSP 页面转换成 Servlet 了,其他用户访问速度就会更快。
  3. 另外也请注意,许多 Web 服务器允许定义别名,所以一个看起来指向 HTML 文件的 URL 实际上可能指向 Servlet 或 JSP 页面,这就是 URL 重写。

嵌入 JSP 页面的其他成分主要有如下三种:

  1. Java 脚本
  2. 指令
  3. 动作

这些 Java 代码将成为转换得到的 Servlet 的一部分。JSP 指令用来从整体上控制 Servlet 的结构。动作用来引入现有的组件或者控制 JSP 引擎的行为。

许多时候,JSP 页面的很大一部分都由静态 HTML 构成,这些静态 HTML 也称为“模板文本”。模板文本和普通 HTML 几乎完全相同,它们都遵从相同的语法规则,而且模板文本也是被 Servlet 直接发送到客户端。

JSP 文件结构及主要标签

<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
...
<HTML>
<BODY>
其他 HTML 语言
<%
符合 JAVA 语法的 JAVA 语句
%>
其他 HTML 语言
</BODY>
</HTML>Code language: HTML, XML (xml)

允许这个 JSP 文件,最后都会被解析成 HTML 代码,返回给客户端浏览器来呈现。

JSP 执行过程

JSP 实际上是 JSP 定义的一些标记和 JAVA 程序段,以及 HTML 文件的混合体。要掌握 JSP 首先必须对 HTML 有一定的了解,也必须有 JAVA 程序的基础。

另外,JSP 第一次有人访问它的时候,它可能会先检查是否已经解析成了 Servlet 并且编译成了 class,或者是否又修改过。

访问一个 JSP 文件,肯定先检查这个文件存不存在。存在才可以进行下一步判断,下一步判断是判断这个 JSP 是否已经被编译成了 class 文件,或者是否在上一次编译之后有修改。如果是,则会执行解析和编译。

下面我们来看一个程序。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注