本文最后更新于: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文件中的实现方式)
所以,这就是为什么在输出脚本中,不能加分号的原因。因为加了分号之后就变成了这样:
这样就肯定会报错。
示例:
<body> now:<%= new java.util.Date() %> <br> <%! int a=777 ; public int age () { return a; } %> <%=age()%><br> <!--调用函数--> <%="今天星期一" %><br><!--输出字符串--> <%=7777777 %><br><!--输出数--> </body>
2.注释 有两种方式,一种是JSP注释形式、一种是HTML注释形式。
JSP注释,注释的内容不会被发送至浏览器、甚至不会被编译。在网页中查看源码是看不见的,甚至在java文件中也没有。
HTML注释,通过浏览器查看网页源码是可以看见的。在java文件中也是有的。
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=”前缀” %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>