目录
1.Java脚本段,可以写Java代码、定义局部变量、编写语句等
Jsp注释
JSP中一共有两种类型的注释
1.显式注释
能够在客户端查看的注释
继承HTML风格的注释
<!-- HTML注释 -->
2.隐式注释
不能在客户端查看的注释
1.JSP自己的注释
<%--JSP自己的注释--%>
2.继承Java风格的注释(Java脚本段中)
//单行注释
/* 多行注释 */
Scriptlet脚本小程序
JSP中一共有三种Scriptlet脚本小程序:
1.Java脚本段,可以写Java代码、定义局部变量、编写语句等
<%
//这里可以写Java代码
%>
生成的代码在servlet的service方法体中
2.声明,声明全局变量、方法、类等
<%!
//声明全局变量
%>
生成的代码在servlet的类体中
3.输出表达式,可以输出变量或字面量
<%=数值%>
生成的代码在servlet的service方法体中,相当于out.print()输出
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Scriptlet脚本小程序</title>
</head>
<body>
<%-- 1.Java脚本段,可以写Java代码、定义局部变量、编写语句等--%>
<%
//定义局部变量
String str="Hello JSP";
//输出内容到控制台
System.out.println(str);
//输出内容到浏览器
out.print(str);
out.write("---------");
//输出全局变量
out.write("全局变量:"+num);
out.write("---------");
%>
<%-- 2.声明,声明全局变量、方法、类等--%>
<%!
int num=10;
%>
<%-- 3.输出表达式,可以输出变量或字面量--%>
<%=str%>
</body>
</html>
include包含
header.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>头部</title>
</head>
<body>
<h2>头部内容</h2>
</body>
</html>
footer.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>底部</title>
</head>
<body>
<h2>底部内容</h2>
<%
//获取动态包含传递的参数
String uname=request.getParameter("uname");
String msg=request.getParameter("msg");
out.println("uname:"+uname+",msg:"+msg);
%>
</body>
</html>
include静态包含
格式:
<%@include file="要包含页面的地址"%>
特点:
1.将内容进行直接的替换
2.静态包含只会生成一个源码文件,最终内容全部在_jspservice方法体中(源码文件中)
3.不能出现同名变量
4.运行效率高一点点,耦合度较高,不够灵活。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include静态包含</title>
</head>
<body>
<%@include file="header.jsp"%>
<h2>主体内容</h2>
<%@include file="footer.jsp"%>
</body>
</html>
include动态包含
格式:
<jsp:include page="要包含的页面地址"></jsp:include>
注意:page属性支持表达式
特点:
1.动态包含相当于方法的调用
2.会生成多个源码文件
3.可以定义同名变量
4.效率高,耦合度低
注意:
当动态包含不需要传递参数时,include双标签之间不要有任何内容,包括换行和空格
使用动态包含传递参数
<jsp:include page="要包含的页面地址">
<jsp:param name="参数名" value="参数值"/>
</jsp:include>
注意:name属性不支持表达式,value属性支持表达式
获取参数:
request.getParameter(name);通过指定参数名获取参数值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include动态包含</title>
</head>
<body>
<jsp:include page="header.jsp"></jsp:include>
<h2>主体内容</h2>
<jsp:include page="footer.jsp"></jsp:include>
<%--使用动态包含传递参数--%>
<%
String str="Hello";
String url="footer.jsp";
%>
<jsp:include page="<%=url%>">
<jsp:param name="uname" value="admin"/>
<jsp:param name="msg" value="<%=str%>"/>
</jsp:include>
</body>
</html>
JSP的四大域对象
1.page域对象
在当前页面有效,跳转后无效
2.request域对象
在一次请求中有效,服务端跳转有效,客户端跳转无效
3.session域对象
在一次会话中有效,服务端客户端跳转都有效
4.application域对象
在整个应用中有效
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>设置域对象</title>
</head>
<body>
<%
//设置page范围的域对象
pageContext.setAttribute("name1","zhangsan");
//设置request范围的域对象
request.setAttribute("name2","lisi");
//设置session范围的域对象
session.setAttribute("name3","wangwu");
//设置application范围的域对象
application.setAttribute("name4","zhaoliu");
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>获取域对象的值</title>
</head>
<body>
<%
//获取域对象中的值
out.print("page范围"+pageContext.getAttribute("name1")+"<br/>");
out.print("request范围"+request.getAttribute("name2")+"<br/>");
out.print("session范围"+session.getAttribute("name3")+"<br/>");
out.print("application范围"+application.getAttribute("name4"));
%>
</body>
</html>
JSP跳转方式
1.服务端跳转
<jsp:forward page="跳转的页面地址"></jsp:forward>
2.客户端跳转
超链接
<a href=""></a>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP的跳转</title>
</head>
<body>
<%--JSP中服务端跳转--%>
<jsp:forward page="index.jsp"></jsp:forward>
<%--超链接跳转--%>
<a href="index.jsp">跳转</a>
</body>
</html>
EL表达式
作用:
简化JSP代码
格式:
${域对象的名称}
操作对象:
EL表达式一般操作的是域对象,不能操作局部变量
操作范围:
page范围
当前页面
request范围
一次请求
session范围
一次会话
application范围
整个应用程序
注:
1.如果EL表达式获取域对象的值为空,默认显示空字符串
2.EL表达式默认从小到大范围去找,找到即止,如果四个范围都未找到,则显示空字符串
查找数据时可以使用四个域对象对应的空间对象,分别是
pageScope
requestScope
sessionScope
applicationScope
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<%-- 设置数据 --%>
<%
//设置page范围的域对象
pageContext.setAttribute("uname","zhangsan");
//设置request范围的域对象
request.setAttribute("uname","lisi");
//设置session范围的域对象
session.setAttribute("uname","wangwu");
//设置application范围的域对象
application.setAttribute("uname","zhaoliu");
//设置局部变量
String str="Hello";
%>
<%--获取数据--%>
获取局部变量:${str}<br>
获取域对象:${uname}<br>
获取指定范围的域对象:<br>
page范围:${pageScope.uname}<br>
request范围:${requestScope.uname}<br>
session范围:${sessionScope.uname}<br>
application范围:${applicationScope.uname}<br>
</body>
</html>
获取List
获取List的size:${限域变量名.size()}
获取List的指定下标的值:${限域变量名[下标]}
获取Map
获取Map指定key的value值:${限域变量名.key}或${限域变量名["key"]}
获取JavaBean
获取JavaBean中的属性:${JavaBean对象.属性名}或${JavaBean对象.get属性名()}
注:JavaBean中属性字段必须提供get方法
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="com.xxx.po.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式的使用</title>
</head>
<body>
<%
//list
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
//Map
Map map = new HashMap<>();
map.put("aaa","1111");
map.put("bbb",222);
map.put("ccc",333);
request.setAttribute("map",map);
//JavaBean对象
User user=new User();
user.setUserId(1);
user.setUname("zhangsan");
user.setUpwd("123456");
request.setAttribute("user",user);
%>
<h4>获取List</h4>
获取List的size:${list.size()}<br>
获取List的指定下标的值:${list[1]}<br>
<h4>获取Map</h4>
获取Map指定key的value值:${map.aaa}--------${map["bbb"]}
<h4>获取JavaBean</h4>
${user}<br>
获取JavaBean中的属性:${user.uname}-----${user.getUpwd()}
</body>
</html>
empty
判断域对象是否为空
为空,返回true;
不为空,返回false;
如果域对象中是字符串:
不存在的域对象:true
空字符串:true
null:true
如果域对象中是List:
null:true
没有长度(size):true
如果域对象中是Map:
null:true
空Map对象:true
如果域对象中是Map:
null:true
空对象:false