Javaweb 学习记录—JSP语法
1.JSP简介
- JSP 全名为 Java Server Pages ,中文名叫 java 服务器页面,其根本是一个简化的 Servlet 。
- JSP 技术有点类似 ASP 技术,用于开发包含动态内容的 Web 页面,它是在传统的网页 HTML 文件中插入 Java 程序段和 JSP 标记,从而形成 JSP 文件,后缀名为 .jsp。
- 用 JSP 开发的 Web 应用是跨平台的,既能在 Linux 下运行,也能在其他操作系统上运行。
2.JSP原理
JSP 同 Servlet 一样,都运行在 Servlet 容器中。当用户第一次访问 JSP页面时, JSP 页面的处理过程:
当同一个 JSP 页面再次被请求时,只要该 JSP 文件没有发生过改动,容器将直接调用已装载的 .class 文件,而不会再执行翻译和编译的过程,从而大大提高了服务器的性能。此过程如下:
JSP 请求执行流程图
在 JSP 的执行过程中,JSP 文件会被翻译为 Servlet。可以通过查看tomcat 的临时工作目录 work。
在处理一个 JSP 页面请求时, html 和 JSP 元素的内容会转化为 Servlet ,然后再将结果作为响应内容发送给浏览器。
3.JSP基本结构
4.脚本元素
- 脚本元素允许用户将小段的代码(一般情况下是 Java 代码)添加到JSP 页面中。
- 脚本元素在页面被请求时执行。
- JSP 脚本元素包括:脚本、表达式、声明和注释。
5.JSP脚本
所谓脚本代码(Scriptlet),是指 JSP 中的代码部分,在这个部分中可以使用几乎任何 Java 的语法。
语法:<% JSP 脚本 %>
示例:判断语句
<%if(request.getParameter("un")==null){ %>
null
<%}else{ %>
not null
<%} %>
6.JSP 表达式
JSP 中的表达式可以被看做一种简单的输出形式,需要注意的是,表达式一定要有一个可以输出的值 。
语法:<%= = 表达式 %>
示例: 使用 JSP表达式显示当地时间:
<%=(new java.util.Date()).toLocaleString() %>
创建showDate.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//创建Date类,以获取系统时间
java.util.Date date = new java.util.Date();
//输出当前时间
out.print("当前时间为:" + date.toLocaleString());
%>
<%
if (java.util.Calendar.getInstance().get(java.util.Calendar.AM_PM) == java.util.Calendar.AM) {
%>
上午好!
<%
} else {
out.print("下午好");
}
%>
</body>
</html>
运行
创建multiplicationTable.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
%>
<%=(i + "*" + j + "=" + (i * j))%>
<%
}
%>
<br />
<%
}
%>
</body>
</html>
运行
7.JSP 声明
JSP 中的声明用于声明一个或多个变量和方法,并不输出任何的文本到输出流。在声明元素中声明的变量和方法将在 JSP 页面初始化时进行初始化。
语法:<%! ! JSP 声明 %>
示例:声明变量和方法
<%! ! int i=0;%>
<%! ! public String f(){
return "test";
} }
%>
<%i++; %>
创建visitCount.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- 脚本注释 --%>
<!-- 页面标签注释 -->
<%!int count = 0;
void setCount() {
count++;
}%>
<%
String date = new Date().toLocaleString();
%>
<%
setCount();
out.print("您是第" + count + "次访问页面");
out.print("访问时间是:" + date);
%>
</body>
</html>
运行
JSP 声明变量与普通脚本变量的区别:
- 声明变量将做为 JSP 翻译生成的 Servlet 的属性,所有对该 JSP 的请求将共享此变量;
- 普通脚本变量将做为 JSP 翻译生成的Servlet 的 _jspService () 方法中的局部变量 。
8.JSP 注释
一般注释可分为两种:一种是在客户端显示的注释;另外一种就是客户端看不到,只给程序员专用的注释。
- 客户端可以看到的注释:
<!--可以看到的注释-->
- 程序员专用,看不到的注释:
<%--看不到的注释--%>
JSP 不会对 <%-- 和 --%> 之间的语句进行编译,它不会显示在客户端的浏览器上,也无法从源文件中看到。
9.指令元素
- JSP 指令用于提供整个 JSP 页面的相关信息,如网页的编码方式和脚本语言等。
- 指令并不向客户端产生任何输出,所有的指令都只在当前页面中有效。
- JSP 指令元素包括三种 : page 指令、include 指令、taglib指令
(1)page指令
- page 指令描述了和页面相关的信息,如:导入所需类包、指明输出内容类型、控制 Session 等
- page 指令一般位于 JSP 页面的开头部分,在一个 JSP 页面中, page 指令可以出现多次,但是在每个 page 指令中,每一种属性却只能出现一次,重复的属性设置将覆盖掉先前的设置。
- 语法:
<%@page 属性列表 %>
- 示例:page 指令
<%@page language="java" contentType ="text/html; charset =UTF-8"%>
- page指令的属性:
属性名 | 说明 |
---|---|
language | 设定JSP页面使用的脚本语言,默认为Java,目前只可使用Java语言 |
import | 指定导入的Java软件包或类名列表,若有多个类,中间用逗号隔开 |
contentType | 指定MIME类型和JSP页面响应时的编码方式,默认为“text/html;charset=ISO8859-1” |
pageEncoding | 指定JSP文件本身的编码方式,例如pageEncoding=“UTF-8” |
session | 指定JSP页面中是否使用session对象,值为“true |
errorPage | 设定JSP页面发生异常时重新指向的页面URL,指向的页面文件要把isErrorPage设成true |
isErrorPage | 指定此JSP页面是否为处理异常错误的网页,值为“true |
isELIgnored | 指定JSP页面是否忽略EL表达式,值为“true |
buffer | 指定输出流是否需要缓冲,默认值是8kb,与autoFlush一起使用,确定是否自动刷新输出缓冲,如果设成true,则当输出缓冲区满的时候,刷新缓冲区而不是抛出一个异常 |
autoFlush | 如果页面缓冲区满时要自动刷新输出,则设置为true;否则,当页面缓冲区满时要抛出一个异常,则设置为false |
import属性:
- import 属性用来指定当前 JSP 页面中导入的 Java 软件包或类名。
- 如果需要导入多个类或包,可以在中间使用逗号隔开或使用多个 page指令
- 使用 import 属性,可以使 JSP 脚本代码中类的使用更加方便 。
contentType 属性:
- contentType 即内容类型,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,比如: html 页面, word文档等。
- 默认值为: contentType=“text/html; charset=ISO-8859-1”。
- 通过设置 contentType 属性的 MIME 类型,可以改变 JSP 输出内容的处理方式,从而实现一些特殊的功能。
(2)include指令
- include 指令的作用是在页面翻译期间引入另一个文件,被包含的文件可以是 JSP 、 HTML 或文本文件。
- 语法:
<%@include file=" 文件
- 示例:include 指令引入一个 JSP
<%@include file="header.jsp"%>
演示:
创建head.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>欢迎您!
</body>
</html>
创建tail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<pre>
版权所有
免责申明:本网站内容的解释权归本站所有
</pre>
</body>
</html>
创建includeDirective.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@include file="head.jsp"%>
<p>CSDN是全球知名中文IT技术交流平台,创建于1999年,包含原创博客、精品问答、职业培训、技术论坛、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区.</p>
<%@include file="tail.jsp"%>
</body>
</html>
运行
(3)taglib 指令
- taglib 指令用于指定 JSP 页面所使用的标签库,通过该指令可以在 JSP 页面中使用标签库中的 标签 。
- 语法
<%@ taglib prefix=" 标签前缀 " uri =" 标签库 URI" %>
其中:
• prefix指定使用标签库中标签的前缀。
• uri指定描述这个标签库位置的URI,可以是相对路径或绝对路径
10.动作元素
- 在 JSP 中可以使用 XML 语法格式的一些特殊标记来控制行为,称为 JSP标准动作( Standard Action )
- 利用 JSP 动作可以实现很多功能 , 例如: 动态 地插入文件、调用JavaBean 组件、重定向页面、为 Java 插件生成 HTML 代码等。
- JSP 规范定义了一系列标准动作,常用有下列几种:
•<jsp:include>
动作:用于在页面被请求时引入一个文件;
•<jsp:useBean>
动作:用于查找或实例化一个 JavaBean ;
•<jsp:setProperty>
动作:用于设置 JavaBean 的属性;
•<jsp:getProperty>
动作:用于输出某个 JavaBean;
•<jsp:forward>
动作:用于把请求转发到另一个页面。
11.总结
- JSP 是一种用于开发包含动态内容的 Web 页面的技术,与 Servlet 一样,也是一种基于Java的服务器端技术,主要用来产生动态网页内容。
- JSP 本质上就是 Servlet , JSP 是首先被翻译成 Servlet 后才编译运行的,所以 JSP 能够实现 Servlet能实现的所有功能。
- JSP 的执行过程经过 “ 请求- 翻译- 编译- 执行- 响应 ”五个过程。
- JSP 有三种类型的元素:脚本元素( scripting element )、指令元素( directive element )和动作元素( action element )。
- JSP 脚本元素包括:脚本、表达式、声明和注释。
- JSP 指令元素包括三种: page 指令、 include 指令和 taglib 指令。
- JSP 动作元素包括:
<jsp:include> 、 <jsp:forward> 、 <jsp:useBean> 、<jsp:setProperty> 、 <jsp:getProperty>
。