JSP页面结构分析

    JSP(Java Server Page)是Sun公司制定的一种服务器端动态页面技术的组件规范。用来解决servlet中大量网页拼接困难的问题。JSP作为简化Servlet开发的一种技术,实质上最终依然要转变为Servlet才可能运行,只不过这个转变过程由Servlet容器来完成。

1、JSP页面的基本构成

    JSP页面主要由:指令标签、HTML标记语言、注释、嵌入的java代码(java小脚本)、JSP动作标签等五部分构成。如所示:

<!-- 1、指令标签 -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- 2、HTMLL标记语言 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>JSP页面基本构成</title>
    </head>

    <body>
        <!-- 3、HTML注释信息 -->
        <!-- 4、JAVA代码-->
        <% 
            Date date =new Date();
            String dateStr;
            dateStr=String.format("%tY年%tm月%td日", date,date,date);
        %>
                    当前日期是:<%=dateStr%>
        <br>

        <!-- 5、JSP动作标签 -->

    </body>
</html>

    以下对JSP页面的五个部分做一个详细介绍

2、指令标签

    指令标签不会产生任何内容输出到页面中,它的主要作用:声明页面使用的语言、导入的类包、指定错误处理页面。做如下解析:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ %> :       标签头,表示这是一个指令标签
page :        指令类型为page指令
language:     页面使用的编程语言
import:       导入页面的包
pageEncoding: 页面的编码格式

2.1、page指令


属性定义
language指定JSP Container用什么语言来编译,目前只支持JAVA语言。默认为JAVA
extends定义此JSP网页产生的Servlet是继承哪个
import定义此JSP网页要使用哪些Java API
session决定此页面是否使用session对象。默认为true
buffer决定输出流(Input stream)是否又缓冲区。默认为8kb
autoFlush决定输出流的缓冲区慢了后是否需要自动清除,缓冲区慢了后会产生异常错误(Exception).默认为true
isThreadSafe是否支持线程。默认为true
errorPage如果此页发生异常,网页会重新指向一个url
isErrorPage表示此页面是否为错误处理页面。默认为false
contentType表示MIME类型和JSP的编码方式。”text/html;charset=gb2312”
pageEncoding编码方式。”ISO-8859-1”
isELLgnored表示是否在此JSP页面中EL表达式。true则忽略,反之false则支持。默认为false


2.2、include指令

    include指令用于指定定一个JSP页面包含另外的一个文件。注意:被包含的文件(include引入的文件)只能是静态的,也就是说,这个文件中有代码将不被执行。这个文件可以是:Java代码、HTML代码、JSP页面。

<%@include file=”date.jsp”%>

    date.jsp页面:

<%@page pageEncoding="GB18030" %>
<%@page import="java.util.Date"%>
<%
    Date now = new Date();
    String dateStr;
    dateStr = String.format("%tY年%tm月%td日", now, now, now);
%>
<%=dateStr%>

    index.jsp页面

<%@ page language="java" import="java.util.*"
    contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>include指令演示</title>
    </head>
    <body>
        <!--HTML注释信息-->
        当前日期是:
        <%@include file="date.jsp"%>
        <br>
    </body>
</html>

    结果如下:
这里写图片描述

2.3、taglib指令

    该标签用来加载用户自定义的标签,自定义标签后面讲解。

    <%@taglib prefix=”fix” uri=”/WEB-INF/tags/view.tld”%>

语法讲解:

    taglib :表示加载的是自定义的标签
    prefix :表示设置加载自定义标签的前缀
    uri :指定自定义标签的描述文件位置

3、嵌入JAVA代码

    在JSP页面中嵌入JAVA代码有三种方式:代码脚本、声明脚本、JSP表达式。下面将对,每种情况都进行讲解。

3.1、代码片段

    代码片段(脚本片段、java脚本):本质就是在JSP页面内直接嵌入的一段JAVA代码,在请求处理期间被执行。代码片段使用 <% %>来包含。
    九九乘法表Multiplication .jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>JSP的代码片段</title>
    </head>
    <body>
        <%
            long startTime = System.nanoTime(); // 记录开始时间,单位纳秒
        %>
        输出九九乘法表
        <br>
        <%
            for (int i = 1; i <= 9; i++) {      // 第一层循环
                for (int j = 1; j <= i; j++) {  // 第二次循环
                    String str = j + "*" + i + "=" + j * i;
                    out.print(str + "&nbsp");   // 使用空格格式化输出
                }
                out.println("<br>");            // HTML换行
            }
            long time = System.nanoTime() - startTime;
        %>
        生成九九乘法表用时:
        <%
            out.println(time / 1000);           // 输出用时多少毫秒
        %>
        毫秒。
    </body>
</html>

    结果如下图所示:

               这里写图片描述


3.2声明脚本

    声明脚本用于在整个JSP页面中定义一个全局的成员变量或者方法,可以被整个JSP页面访问。当JSP页面被翻译为Servlet时,生命脚本将会转化为类的成员。声明脚本使用:<%! %>包含。

    声明一个变量:

<%! long startTime=System.nanoTime(); %>

    声明一个方法:

<%!  
    int getMax(int a,int b){
        int max=a>b?a:b;
        return max;
    }
%>

3.3、JSP表达式

    JSP表达式可以将java表达式的结果直接输出到JSP页面,表达式最终的结果将被转化为String,因为在JSP页面中所有的文字都是String。语法如下:

<%= 表达式 %>

    例如:

圆周率是:<%= Math.PI %>

4、注释

    JSP页面有:HTML注释、JSP注释、代码注释组成。

4.1、HTML注释

    不执行,但,会随着页面发送到前端。

<!-- 注释文本 -->

4.2、JSP注释

    不执行,但,不会随着页面发送到前端。

<%-- 注释文本 --%>

4.2、代码注释注释

    不执行,但,不会随着页面发送到前端。本质就是将java脚本注释掉。

<%
    //单行代码
    /*
      多行代码
    */
%>

5、JSP动作标签

    动作标签是在请求处理阶段按照动作标签在JSP页面出现的顺序被执行,JSP动作标签的优先级低于指令标签,在JSP页面在被翻译阶段将首先翻译指令标签,将他们转化为Servlet,从而设置整个页面。

5.1、< jsp:include >动作标签

    include动作标签可以将一个文件包含到当前的JSP页面中。被包含的文件可以是静态的文本,也可是动态文本。该标签会将动态资源的返回结果放到当前页面。它的语法如下:

<jsp:include page="url flush="true|false">

或者

<jsp:include page="url flush="true|false">
    子标签
</jsp:include>

语法解释:
page属性:生命被包含文件的相对路径
flush属性:是否冲刷缓冲区,默认值为false

    注意:
         被包含的文件中不能有 < HTML>、< body>等HTML语言的结构标签,她会破坏原先的页面结构。源文件和被包含文件也不要同名的变量和方法,因为它们最后会被编译为一个Servlet,重名导致错误发生。

5.2、< jsp:forward >动作标签

    < jsp:forward >是转发标签,将当前页面接受到的请求转发个其他资源,例如:Servlet、JSP页面、HTML页面。当前页面只是一个转发的动作。

    addUser.jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>JSP的include动作标签</title>
    </head>
    <body>
        <form action="index.jsp" method="post">
            <table align="center">
                <tr>
                    <td align="center" colspan="2">
                        <h3>添加用户</h3>
                    </td>
                </tr>
                <tr>
                    <td>姓名:</td>
                    <td><input name="name" type="text"></td>
                </tr>
                <tr>
                    <td>性别:</td>
                    <td>
                        <input name="sex" type="radio" value="男" checked="checked">
                        <input name="sex" type="radio" value="女">
                    </td>
                </tr>
                <tr>
                    <td align="center" colspan="2">
                        <input type="submit" value="添加">
                        <input type="reset" value="重置">
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html>

    add.jsp页面:

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>添加</title>
    </head>
    <body>
        <jsp:forward page="addUser.jsp">
            <jsp:param name="userName" value="mingri"/>
        </jsp:forward>

    </body>
</html>

结果如下:
                这里写图片描述

5.2、< jsp:parama >动作标签

    这个标签可以作为其他动作标签的子标签,为其他标签传递参数,语法如下:

< jsp:parama name="name" value="杨胖子">

语法解析:
    name:参数名
    value:参数值

    例如:

<jsp:forward page="addUser.jsp">
            <jsp:param name="userName" value="mingri"/>
</jsp:forward>
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐