JavaWEB-(二十九)JSP基础

本文最后更新于:December 3, 2021 pm

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

目录

1.脚本

用来在JSP中编写java语句、声明变量、方法或者表达式。

1.1 普通脚本(代码脚本)

<% java代码 %>

普通脚本可以使用所有java语法,但除了定义函数。而且脚本与脚本之间不能嵌套、脚本与HTML标签不能嵌套。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<%--
Created by IntelliJ IDEA.
User: DragonOne
Date: 2021/8/23
Time: 10:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
now:<%= new java.util.Date() %> <br>

<%
int a=713;
out.println(a); //打印在客户端页面
out.println("abcd");
System.out.println(a); //打印在控制台
System.out.println("abc");
%>
</body>
</html>

通过查看生成后的java文件,可以发现 普通脚本的代码在编译后的java文件中的位置是处于service方法中,所以定义的变量是局部变量

1.2 声明脚本

<%! 定义变量、函数 %>

声明脚本声明的变量是全局变量,因为在java文件中,它的位置是在service方法外面,在类的里面。并且声明脚本的内容必须在普通脚本中调用。如果声明脚本中的函数具有返回值,则使用输出脚本调用。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%--
Created by IntelliJ IDEA.
User: DragonOne
Date: 2021/8/23
Time: 10:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
now:<%= new java.util.Date() %> <br>

<%!
int b = 77777777;
public void show(){
System.out.println("show77777777");
}
public int age(){
return 777;
}
%>

<%
out.println(b);
show();

%>

<%=
age() //不能加分号!!!
%>

</body>
</html>

注意:out.println();不能在声明脚本中使用!!!

1.3 输出脚本

<%= java表达式 %>

不能调用无返回值的函数。不能加分号。

如:<%=age()%>其形式等价于:(这是在java文件中的实现方式)

1
out.println(age());

所以,这就是为什么在输出脚本中,不能加分号的原因。因为加了分号之后就变成了这样:

1
out.println(age(););

这样就肯定会报错。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<body>
now:<%= new java.util.Date() %> <br>

<%!
int a=777;
public int age(){
return a;
}
%>

<%=age()%><br> <!--调用函数-->
<%="今天星期一"%><br><!--输出字符串-->
<%=7777777%><br><!--输出数-->

</body>

2.注释

有两种方式,一种是JSP注释形式、一种是HTML注释形式。

  1. JSP注释,注释的内容不会被发送至浏览器、甚至不会被编译。在网页中查看源码是看不见的,甚至在java文件中也没有。
1
<%--注释内容--%>
  1. HTML注释,通过浏览器查看网页源码是可以看见的。在java文件中也是有的。
1
<!--注释内容-->

3.JSP指令

用来设置与整个JSP网页相关的属性。有三种指令。

指令 描述
<%@ page …%> 定义页面的依赖属性,如脚本语言、error页面、缓存需求等
<%@ include …%> 包含其他文件
<%@ taglib …%> 引入标签库的定义,可以是自定义标签

3.1 Page指令

<%@ page attribute1 = “value1” attribute2 = “value2” %>

Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个Page指令。

属性 描述
contentType 指定当前JSP页面的MIME类型和字符编码格式
errorPage 指定当JSP页面发生错误异常时需要跳转向的错误处理页面
isErrorPage 指定当前页面是否可以作为另外一个JSP页面的错误处理页面
import 导入要使用的java类
language 定义JSP页面所用的脚本语言,默认为java
session 指定JSP页面是否使用session。默认为true(立即创建),false(使用时创建)
pageEncoding 指定JSP页面的解码格式

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- contentType、language -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<!-- errorPage -->
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="url" %> <!--url是错误页面的路径,如error.jsp-->

<!-- isErrorPage -->
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>

<!-- import -->
<%@ page import="java.util.Date" %>

<!-- session -->
<%@ page session="false" %>

<!-- pageEncoding -->
<%@ page pageEncoding="UTF-8" %> <!-- 设置JSP页面的格式为UTF-8,类似与HTML中的 <meta charset="UTF-8">用来设置HTML的格式 -->

3.2 include指令

<%@ include file=”被包含的JSP路径” %>

用来包含其他文件。可以是:JSP文件、HTML文件或文本文件。被包含的文件就好像是当前JSP文件的一部分,会被同时编译执行(静态包含)。可能存在重名的冲突问题,不建议使用。

示例:

A.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%--
Created by IntelliJ IDEA.
User: DragonOne
Date: 2021/8/23
Time: 16:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="B.jsp"%>
<html>
<head>
<title>A</title>
</head>
<body>
<h1>A页面内容</h1>

</body>
</html>
<%@ include file="C.jsp"%>

B.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%--
Created by IntelliJ IDEA.
User: DragonOne
Date: 2021/8/23
Time: 16:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>B</title>
</head>
<body>
<h1>B页面内容</h1>

</body>
</html>

C.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%--
Created by IntelliJ IDEA.
User: DragonOne
Date: 2021/8/23
Time: 16:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>C</title>
</head>
<body>
<h1>C页面内容</h1>
</body>
</html>

然后再访问A.jsp进行查看效果。为什么说是静态包含的,是因为A.jsp生成的java文件中把B.jsp和C.jsp
的内容都写在了里面。全部都写在了A_jsp.java里面,可自行查看A.java文件。而也正是这个原因,所以可能会导致重名冲突问题。

重名冲突问题示例:

A.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%--
Created by IntelliJ IDEA.
User: DragonOne
Date: 2021/8/23
Time: 16:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="B.jsp"%>
<html>
<head>
<title>A</title>
</head>
<body>
<h1>A页面内容</h1>
<%
String name = "loong"; //报错
%>
<%=name%>

</body>
</html>
<%@ include file="C.jsp"%>

B.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%--
Created by IntelliJ IDEA.
User: DragonOne
Date: 2021/8/23
Time: 16:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>B</title>
</head>
<body>
<h1>B页面内容</h1>
<%
String name = "Lee";
%>
</body>
</html>

当在两个包含的文件中,都写过同一个变量名称时,就会出现重命名错误。

至于为什么,是因为A.jsp和B.jsp的内容都写在了同一个java类中,而且更重要的是,普通脚本声明的变量都是局部变量(都是在service方法中),所以,当两个JSP文件中出现相同名称时,在生成的Java类的service方法中就会重复定义两次相同名称的变量,所以就会出现错误。可自行查看A.java文件。

3.3 taglib指令

引入JSP的标准标签库。这个指令在后面的EL、JSTL会用到,这里只是简单介绍一下。

<%@ taglib uri=”外部标签库路径” prefix=”前缀” %>

1
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/984665836.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!