JavaWeb——JSP技术基础

JavaWeb——JSP技术基础

一、JSP语法概述

1. JSP脚本元素

例如:todayDate.jsp

<%@ page import="java.time.LocalDate" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" session="true" %>
<%! LocalDate date=null; %>
<html>
<head>
    <title>当前时间</title>
</head>
<body>
<%
    date = LocalDate.now();
%>
今天的日期是:<%= date.toString()%><br>
</body>
</html>
  • JSP声明
    声明标识用于在JSP页面中声明全局的变量或方法。通过声明标识定义的变量和方法可以被整个JSP页面访问,所以通常使用该标识定义整个JSP页面需要引用的变量或方法。服务器执行JSP页面时,会将JSP页面转换为Servlet 类,在该类中会把使用JSP声明标识定义的变量和方法转换为类的成员变量和方法(全局变量或方法)。
<%! LocalDate date=null; %>

上面的代码声明了一个date变量。**声明的变量仅在页面第一次载入时由容器初始化,初始化之后一直保持该值。<%与!之间不可以有空格, 但是!与其后面的代码之间可以有空格。 另外,<%!与%>可以不在同一行,每个声明语句必须以分号结束。

<%!
int number = 0;//声明全局变量
int count() {
   //声明全局方法
number++;//累加number
retum number;//返回number的值
}
%>

通过上面的代码声明全局变量和全局方法后,在后面如果通过<%= number%>调用全局方法,则每次刷新页面,都会输出前一次值+1 的值(执行number+1)。

  • JSP小脚本
    JSP小脚本是嵌入JSP页面的java代码段。小脚本是以"<%…%>形式的标签。
<%
    date = LocalDate.now();
%>

小脚本每次访问界面时都被执行,所以date在每次请求时会返回当前日期。
JSP小脚本是java代码段,所以必须以分号结束

  • JSP表达式
    JSP表达式用于向页面中输出信息,其语法格式如下:
    <%= 表达式%>
    表达式可以是任何Java语言的完整表达式。该表达式的最终运算结果将被转换为字符串。<%与=之间不可以有空格,但是=与其后面的表达式之间可以有空格。与JSP声明不同,JSP表达式不可以以分号结束。表达式每次访问界面时都被执行,然后将求的值嵌入HTML的输出中。
    例如:expression.jsp
<%@ page contentType= "text/html;charset=UTF-8" language = "java" %>
<%!
    int anInt=3;
    boolean aBoolean=true;
    Integer aInteger=new Integer(3);
    Double aDouble=new Double(3.2);
%>
<html>
<head>
    <title>计算</title>
</head>
<body>
<%= 500+800 %><br>
<%= anInt*3.5/100-500 %><br>
<%= aBoolean %><br>
<%= Math.random() %><br>
<%= aDouble %><br>
</body>
</html>

结果:

2、JSP指令

指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到网页中。也就是说,指令标识对于客户端浏览器是不可见的。JSP页面的指令标识与我们的身份证类似,虽然公民身份证可以标识公民的身份,但是它并没有对所有见到过我们的人所公开。
JSP指令标识的语法格式如下:

<%@ 指令名属性1="属性值1" 属性2="属性值....%>

参数说明:
指令名:用于指定指令名称,在JSP中包含pageincludetaglib 3条指令。
属性:用于指定属性名称,不同的指令包含不同的属性。在一个指令中,可以设 置多个属性,各属性之间用逗号或空格分隔。
属性值:用于指定属性值。
例如,在应用Eclipse创建JSP文件时,在文件的最底端会默认添加一条指令,用于指定JSP所使用的语言、编码方式等。这条指令的具体代码如下:

<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030*%>
  • page指令
    page是JSP页面最常用的指令,用于定义整个JSP页面的相关属性,这些属性在JSP被服务器解析成Servlet时会转换为相应的Java程序代码。page 指令的语法格式如下:
<%@ page contentType= "text/html;charset=UTF-8" language = "java" %>
  • include指令
    文件包含指令include是JSP的另一条指令标识。通过该指令可以在一个JSP页面中包含另一个JSP页面。不过该指令是静态包含,也就是说被包含文件中所有内容会被原样包含到该JSP页面中,即使被包含文件中有JSP代码,在包含时也不会被编译执行。使用include指令,最终将生成一个文件,所以在被包含和包含的文件中,不能有相同名称的变量
    例如:expression.jsp
<%@ page contentType= "text/html;charset=UTF-8" language = "java" %>
<%@ include file="todayDate.jsp"%>
<%!
    int anInt=3;
    boolean aBoolean=true;
    Integer aInteger=new Integer(3);
    Double aDouble=new Double(3.2);
%>
<html>
<head>
    <title>计算</title>
</head>
<body>
<%= 500+800 %><br>
<%= anInt*3.5/100-500 %><br>
<%= aBoolean %><br>
<%= Math.random() %><br>
<%= aDouble %><br>
</body>
</html>

结果:

  • taglib指令
    在JSP文件中,可以通过taglib指令标识声明该页面中所使用的标签库,同时引用标签库,并指定标签的前缀。在页面中引用标签库后,就可以通过前缀来引用标签库中的标签。taglib 指令的语法格式如下:
<%@ taglib prefix="tagPrefix" uri="tagURI" %>

参数说明:
prefix: 用于指定标签的前缀。该前缀不能命名为jsp、 jspx、java、javax、sun、servlet和sunw。
uri: 用于指定标签库文件的存放位置。

<%@ taglib prefix="c" uri=http://java.sun.com/sp/jt/core" %>

3、JSP动作

动作是页面发给容器的指令,它指示容器在页面执行期间完成某种任务。在JSP页面的动作可以分为3类,包括:JSP动作、标准标签库动作、自定义动作。
常见的JSP动作:

  • jsp:include,在当前页面包括另一个页面的输出
  • jsp:forword,将请求发送给指定的页面
  • jsp:useBean,查找或创建一个useBean对象

二、JSP页面的生命周期

在这里插入图片描述
1.转换阶段
Web容器读取JSP页面对其解析,转换成 java源代码
JSP文件中的元素都转换成页面实现类(本质是Servlet的成员)
容器将检查JSP页面中的标签语法是否正确
JSP声明的变量将会编程页面实现类的成员变量(全局变量)
小脚本和模板文本 JSP表达式 都将转换成_jspService()里的局部变量

2.编译阶段
Web容器调用java编译器javac编译该文件
编译阶段将会检查声明中 小脚本中的全部Java代码

3.类的加载和实例化
将页面实现类编译成类文件后 ,web容器调用类加载程序将页面实现类加载到内存中去,然后容器调用页面实现类的构造方法创建该类的实例

4.调用jspInit()
初始化Servlet实例,并且只调用一次,获得资源及初始化JSP声明的变量和方法。

5.调用_jspService()
对该页面的每次请求容器都调用一次_jspService(),并给它传递请求和响应对象,HTML元素、JSP小脚本和JSP表达式都成为该方法的一部分。

6.调用jspDestroy()
清理jspInit()获得资源 容器停止为该实例提供服务

我们可以根据需要覆盖jspInit方法和jspDestroy方法。但是不可以覆盖_jspService方法,因为该方法由web容器自动产生。
例如:lifeCycle.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%!
    publ
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值