一、JSP 规范
1.概述
- 来自于JAVAEE 规范的一种
- JSP 规范制定了如何开发 JSP 文件代替响应对象将处理结果写入到响应体的开发流程
- JSP规范制定了 Http 服务器应该如何调用管理JSP文件
2.响应对象存在弊端
- 适合将数据量较少的处理结果写入到响应体
- 如果处理结果数量过多,使用响应对象增加开发难度
3.JSP文件优势
- JSP 文件在互联网通信过程中是响应对象的替代品
- 降低将处理结果写入到响应体的开发工作量降低处理结果维护难度
- 在JSP 文件开发时,可以直接将处理结果写入到JSP 文件不需要手写out.print命令,在Http 服务器调用 JSP 文件时,根据JSP 规范要求自动将JSP文件书写的所有内容通过输出流写入到响应体
4.HTML文件与JSP文件区别
-
作为资源文件的类型不同
(1) HTML文件属于静态资源文件,其相关命令需要在浏览器编译并执行的
(2) JSP文件属于动态资源文件,其相关命令需要在服务端编译并执行 -
调用形式不同
(1) 如果浏览器访问HTML文件,此时Http服务器直接通过一个输出流将HTML文件中所有内容写入到响应体
(2) 如果访问JSP文件,此时Http服务器根据JSP规范来操作JSP文件编译调用
5.两者之间的联系
混入了Java代码的网页,就是JSP。在JSP中,HTML和 JavaScript源代码客户端均可见,而Java内嵌代码客户端不可见
二、JSP命令书写规则
新建一个 Java Web 项目,我们发现在其web目录下,存在一个index.jsp文件。打开此文件,内容如下。
其中,在文件中有效代码的第一行即 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
作用是设置网页类型为 text/html ,设置网页编码方式为 UTF - 8,编程语言为 Java。其下方的为HTML代码,会直接写入到网页当中。
在HTML代码中的内容为 $ END $,我们之前在介绍欢迎资源文件中说过,其默认欢迎资源文件为index.html, index.htm,index.jsp,优先级从高到低
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
这就是我们在打开新建网站时通常情况下会出现 一行 $ END $的原因,我们在网站中没有写index.html 与 index.htm 文件,其默认欢迎资源文件只能为 index.jsp
基本语法
- JSP程序段
作用 : 插入Java代码
格式 :
<% Java代码 %>
- 标签
<% %>
中放置 Java 代码,HTML代码放在此标签之外 - 在JSP程序段中不能定义函数
- 凡是没有写入
<% %>
的代码,都被解释为HTML - JSP中程序段可以用很多段,但系统会认为是一大段,所以程序段中的大括号可以跨多个程序段,即无论在哪个
<% % >
中的Java代码,都会被解释成一个整体。
- JSP表达式
作用 : 将其里面内容所运算的结果输出到客户端
格式 :
<%= 变量/ 返回值/ 表达式 %>
- JSP 表达式中不能用分号" ; "结束
- 在 JSP 表达式中不能出现多条语句
- JSP表达式的内容一定是字符串类型,或者能通过 toString()函数转换成字符串的形式
- JSP指令
作用 :JSP 指令告诉 JSP 引擎对 JSP 页面如何编译,不包含控制逻辑,不会产生任何可见的输出。
格式 :
<%@ 指令类别 属性1="属性值1" ··· 属性n="属性值n" %>
例如<% @ page contentType="text/html;charset=UTF-8" language="java" %>
- JSP 包含三个指令:page、include 和 taglib。其中,使用最多的是 page 指令和 include 指令。
- 通常情况下,JSP程序都是以page指令开头的。page指令用来设定页面的属性和相关功能,可以导入需要的类、指明JSP输出内容的类型、指定处理异常的错误页面等操作。
- JSP声明
格式 :
<%! 代码 %>
- JSP声明中,可以定义网页中的全局变量,这些变量在JSP中的任何页面都能用
- JSP声明中定义的变量是网页级别的,系统会优先执行,所以可以在JSP的任何地方定义变量。
- JSP声明中只能作定义,不能实现逻辑控制
实例
新建学生类,在JSP文件中创建学生对象,并学生信息以表格的形式在网页中输出出来
学生类:
package Entity;
public class Student {
String name;
int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
test.jsp文件
<%@ page import="Entity.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
Created by IntelliJ IDEA.
User: 繁花fancy
Date: 2021/11/10
Time: 22:13
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
Student stu1 = new Student("Mike", 18);
Student stu2 = new Student("Heke", 20);
Student stu3 = new Student("Shell", 19);
List<Student> list = new ArrayList<>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
%>
<%
for (Student stu : list) {
%>
<table align="center" border="4">
<tr>
<td>姓名</td>
<td>年龄</td>
</tr>
<tr>
<td><%=stu.getName()%></td>
<td><%=stu.getAge()%></td>
</tr>
</table>
<% } %>
效果如图