目录
Jsp注释
1.显式注释
2.隐式注释
Scriptlet脚本小程序
1.Java脚本段,可以写Java代码、定义局部变量、编写语句等
2.声明,声明全局变量、方法、类等
3.输出表达式,可以输出变量或字面量
include包含
include静态包含
include动态包含
JSP的四大域对象
1.page域对象
2.request域对象
3.session域对象
4.application域对象
JSP跳转方式
1.服务端跳转
2.客户端跳转
EL表达式
获取List
获取Map
获取JavaBean
empty
JSP中一共有两种类型的注释
能够在客户端查看的注释
继承HTML风格的注释
<!-- HTML注释 -->
不能在客户端查看的注释
1.JSP自己的注释
<%--JSP自己的注释--%>
2.继承Java风格的注释(Java脚本段中)
//单行注释
/* 多行注释 */
JSP中一共有三种Scriptlet脚本小程序:
<%
//这里可以写Java代码
%>
生成的代码在servlet的service方法体中
<%!
//声明全局变量
%>
生成的代码在servlet的类体中
<%=数值%>
生成的代码在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>
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 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>
格式:
<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>
在当前页面有效,跳转后无效
在一次请求中有效,服务端跳转有效,客户端跳转无效
在一次会话中有效,服务端客户端跳转都有效
在整个应用中有效
<%@ 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:forward page="跳转的页面地址"></jsp:forward>
超链接
<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>
作用:
简化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的size:${限域变量名.size()}
获取List的指定下标的值:${限域变量名[下标]}
获取Map指定key的value值:${限域变量名.key}或${限域变量名["key"]}
获取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>
判断域对象是否为空
为空,返回true;
不为空,返回false;
如果域对象中是字符串:
不存在的域对象:true
空字符串:true
null:true
如果域对象中是List:
null:true
没有长度(size):true
如果域对象中是Map:
null:true
空Map对象:true
如果域对象中是Map:
null:true
空对象:false