1.Scriptlet
在jsp中最重要的部分就是Scriptlet,所有嵌入在html代码中的java程序,在jsp中一共有三种格式:
- <% %>:java脚本段,可以定义局部变量,编写语句
- <%! %>:声明,可以定义全局变量,方法,类
- <%= %>:表达式,数据一个变量或具体内容
2. include
2.1 include静态包含
语法格式:
<%@include file="相对路径"%>
2.2 include动态包含
语法格式:
<jsp:include page="相对路径"></jsp:inculde>
2.2.1 include动态包含传参
当动态包含不需要传递参数时,include双标签之间不要有任何内容,包括换行和空格
传递参数:
<jsp:include page="相对路径">
<jsp:param name="参数名" value="参数值">
</jsp:inculde>
获取参数:
request.getParameter(参数名)
通过指定参数名获取参数值
例子如下:
这是index.jsp
<%--
Created by IntelliJ IDEA.
User: kobayashi
Date: 2021/4/4
Time: 19:07
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>
//这里设置了个局部变量
<%
String str="hello world";
%>
然后导入top.jsp并且将局部变量进行传参
<jsp:include page="top.jsp">
<jsp:param name="hello" value="<%=str%>"/>
</jsp:include>
</body>
</html>
这是top.jsp文件
<%--
Created by IntelliJ IDEA.
User: kobayashi
Date: 2021/4/5
Time: 15:09
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>
<h2>顶部内容</h2>
<%
String str=request.getParameter("hello");
out.print(str);
%>
</body>
</html>
3. JSP的四大域对象
在JSP中提供了四种属性的保存访问,所谓的属性保存范围,指的就是一个设置的对象,可以再多少个页面中保存并可以继续使用
- page范围
pageContext:直再一个页面中保存属性,跳转之后无效
- request范围
request:只会一次请求中保存,服务器跳转后依然有效,但是客户端跳转将会无效
- session范围
在一次会话范围中,无论何种跳转都可以继续使用
- application范围
在整个服务器上保存
3.1 设置域对象
A服务器端(index.jsp)
<%--
Created by IntelliJ IDEA.
User: kobayashi
Date: 2021/4/6
Time: 20:46
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>
<%
pageContext.setAttribute("name1",1);
request.setAttribute("name2",2);
session.setAttribute("name3",3);
application.setAttribute("name4",4);
%>
<jsp:forward page="index_2.jsp"></jsp:forward>
</body>
</html>
B服务器端(index_2.jsp)
<%--
Created by IntelliJ IDEA.
User: kobayashi
Date: 2021/4/6
Time: 21: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>
<%
Object a1=pageContext.getAttribute("name1");
Object a2=request.getAttribute("name2");
Object a3=session.getAttribute("name3");
Object a4=application.getAttribute("name4");
out.print(a1+" "+a2+" "+a3+" "+a4);
%>
</body>
</html>
显示效果如下:
4.JSP指令
JSP指令的作用是为当前页面做一些基本的属性设置,为当前的页面的运行提供基本环境,根据功能的不同,JSP中包含了三类指令:page指令,即网页指令,include指令,即包含指令;及taglib指令,即标签库指令,无论哪种指令,其语法格式均为如下形式:
<%@ 指令名称 属性名=属性值 属性名=属性值 ....%>
4.1 page 指令
page指令用于设置当前JSP页面的相关信息,一个JSP文件中可以包含多个page指令,常用的page指令的属性意义以及用法如下:
4.1.1 pageEncoding属性(更改字符编码)
pageEncoding属性用于设置当前JSP页面所使用的字符编码格式
语法:
<% page pageEncoding="UTF-8"@%>
4.1.2 contentType属性(指定文件更改字符编码)
和pageEncoding属性差不多,只不过它能指定哪个文件
语法:
<%@ page contentType="文件名/后缀名;charset=编码"%>
4.1.3 import属性
就是java的import,导包,但是这个属性是要放在page指令里写的
<% page import="java,util.Date"%>
类似这样就能打开Date包
4.1.4 errorPage属性(错误跳转)
当你的页面报错时,如果文件中有设置errorPage属性,则会跳转到对应的文件中
<% page errorPage="文件.后缀名"%>
4.15
4. 服务器跳转和客户跳转
//这是服务器跳转
<jsp:forward page="跳转网页的文件路径" ></jsp:forward>
//这是客户跳转(简单点就是超链接)
<a> </a>
5. EL表达式
EL只能获取数据,不能设置数据,是一种在JSP页面中获取数据的简单方式,在JSP页面的任何静态部分均可通过${expression}的形式获取到指定表达式的值
5.1 获取数据
5.1.1 从四大域获取数据
优先从最小范围获取数据
5.1.2 查找指定域的值
若想要查找指定域的属性值,就可以
<%
变量=${applicationScope.属性名}
%>
5.1.3 访问Bean的属性
EL可以通过 ${key.属性}的方式获取到指定对象的指定属性值,其底层实际调用的是该对象的相应属性的get方法
例子如下:
首先我们创建一个Student类(需要注意的是该类不可以在默认包下,因为JSP文件无法Import它)
package student;
public class Student {
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;
}
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "student.Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
接着创建JSP文件
<%--
Created by IntelliJ IDEA.
User: kobayashi
Date: 2021/4/18
Time: 15:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="student.Student" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
Student stu=new Student("kobayashi",18);
pageContext.setAttribute("student",stu);
%>
学生名:${student.name}
年龄:${student.age};
</body>
</html>
显示效果如下
5.1.4 访问数组中的元素
例子如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" import="student.Student" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
String[] names={"1","2","3"};
pageContext.setAttribute("names",names);
%>
数字是${names[1]}
</body>
</html>
显示效果如下
5.1.4 获取List中的元素
例子如下:
<%--
Created by IntelliJ IDEA.
User: kobayashi
Date: 2021/4/18
Time: 15:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="student.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
Student stu1=new Student("kobayashi",18);
Student stu2=new Student("sakura",19);
Student stu3=new Student("satokazuma",20);
ArrayList<Student> list=new ArrayList<Student>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
pageContext.setAttribute("list",list);
%>
学生名:${list.get(1).name}
年龄:${list.get(1).age}
</body>
</html>
5.1.5 获取Map中的元素
例子如下:
<%--
Created by IntelliJ IDEA.
User: kobayashi
Date: 2021/4/18
Time: 15:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="student.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
Map<String,Integer> map=new HashMap<>();
map.put("kobayashi",18);
map.put("satokazuma",19);
map.put("sakura",20);
pageContext.setAttribute("map",map);
%>
年龄:${map.get("kobayashi")}
</body>
</html>