JSP入门
文章目录
JSP简介
JSP全名:Java Server Pages,是一种动态网页开发技术,能够通过JSP标签在html代码里面插入Java代码。
JSP语法
- <% 代码片段 %>,使用这个标签就可以在里面写java代码了
- JSP的声明:<%! 声明%>,在JSP声明标签里可以创建类和全局变量
- JSP表达式:<%=表达式%>,表达式包括任何符合Java语言规范的表达式,比如<%=1+1%>,输出到页面就是2
- JSP的注释:<%-- 注释–%>
- JSP的指令:<%@ directive attribute=“value” %>,指令有三种:page,include,taglib。page定义页面的依赖属性,page代表当前的JSP,最常见的就是<%@page contentType=“text/html;charset=UTF-8” language = “java” pageEncoding = “utf-8”%>。include表示可以包含其他文件,<%@ include file=“文件相对 url 地址” %>,taglib表示标签库,可以引入标签库的定义,<%@ taglib uri=“uri” prefix=“prefixOfTag” %>
JSP的9大内置对象
9大内置对象分别为:request,response,page,pageContext,Exception,session,out,application,config,其中有四个可以设置共享域,分别是:page,request,session,application对应的scope(生命周期)依次增大
EL表达式
全称是:Expression Language表达式语言,为了简化jsp中java代码的开发,代替脚本表达式,格式:${EL表达式} 等价于pageContext.findAttribute(name),可以简写作用域取值,简化获取属性值,获取一个对象的属性值,直接通过name.属性名就能取到值。如果四个作用域重名,可以用指定作用域来取值: xxxScope.name,比如requestScope,sessionScope,applicationScope
// 例如我有一个User类,里面有username和password属性
User user = new User("zhangsan","123");
//设置共享域
request.setAttribute("users",user);
//使用EL表达式拿值
${users.username} //此时页面打印的就是zhangsan
${users.password} //此时页面打印的就是123
使用EL表达式在集合中取值
在List里面取值
<%
// 创建一个List
List<String> list = new ArrayList<String>();
//在集合中添加值
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
//设置作用域,这步不能忘记!
request.setAttribute("list",list);
%>
使用jsp表达式取值
<%=list.get(0)%> -->a
<%--使用EL表达式取值--%>
两种方法
${list[0]} -->a
${list.get(0)} -->a
在Map里面取值
<%
// 创建一个map
Map<String,String> map = new HashMap<String,String>();
map.put("CN","中国");
map.put("JP","日本");
map.put("US","美国");
map.put("UK","英国");
request.setAttribute("maps",map);
%>
三种方法取值
${maps.CN}
${maps.get("CN")}
${maps["CN"]}
使用EL表达式执行运算
EL表达式可以直接进行运算
算数运算:
${1+1}
${1-1}
${1*1}
${1/1}
${1%1}
关系运算,返回值为boolean值
${1==1} 简写:${1 eq 1}
${1>1} 简写:${1 gt 1}
${1<1} 简写:${1 lt 1}
${1!=1} 简写:${1 ne 1}
三元运算,三元运算符可嵌套
${score>60?"及格":"不及格"}
${flag==0?"没有激活":flag==1?"激活":"删除"}
逻辑运算
${true && false} 与之对应 ${true and false}
${true || false} 与之对应 ${true or false}
${!true} 与之对应 ${not true}
EL表达式里特有的empty,用来判断是否为空,无论是空值还是空引用,使用empty判断都为空
EL的11个隐式对象
1.pageContext:页面上下文,可以获取jsp中其他8个内置对象
2.pageScope page作用域对象
3.requestScope request作用域对象
4.sessionScope session作用域对象
5.applicationScope application作用域对象
6.param 表示request.getParameter(“name”)
7.paramvalues 表示request.getParameterValues(“name”)
8.header 表示request.getHeader(“accept”)
9.headerValues 表示request.getHeaderValues(“accept-encoding”)
10.cookie 表示request.getCookies()
11.initParam 表示ServletContext初始化参数
JSTL
JSTL:全称Java Server Pages Standard Tag Library,JSP标准标签库,代替jsp页面的脚本,实现逻辑控制。
使用之前必须在JSP页面添加taglib指令库,其中prefix表示标签前缀,一般用c
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
JSTL的常用标签
通用标签:set,out,remove
格式:<前缀:标签 操作/>
set 指令有var,value,property,scope,target
var用来声明变量,value用来给声明的变量赋值
property表示属性,scope表示作用域,target表示目标
这里默认的作用域是pageContext
<c:set var="a" value="a"/>
${a}
out表示输出,value值为多少就在在页面输出什么
<c:out value="a" />
remove表示移除变量
移除指定变量
<c:remove var="a"></c:remove>
给没有的变量赋默认值
<c:out value="${a}" default="默认值"></c:out>
条件标签:if,选择标签:choose配合when和otherwise使用,都需要配合test使用
test 里面写条件,通过EL表达式写条件
<c:if test="${条件}"></c:if>
选择标签
<c:set var="score" value="90"></c:set>
<c:choose>
<c:when test="${score>=90}">优秀</c:when>
<c:when test="${score>=80}">良好</c:when>
<c:when test="${score>=60}">及格</c:when>
<c:otherwise>不及格</c:otherwise>
</c:choose>
循环标签:forEach
普通循环:
表示临时变量为i,从1开始到100结束,步长为1
<c:forEach var="i" begin="1" end="100" step="1">
${i}
</c:forEach>
遍历集合
<%
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
pageContext.setAttribute("list",list);
%>
通过items来取集合,var声明了一个临时变量用来接收值
<c:forEach items="list" var="list">
${list}<br>
</c:forEach>
url标签
通过var声明一个变量,value给资源路径,然后通过EL表达式就能用了
<c:url var="loc" value="index.jsp"></c:url>
<a href="${loc}"></a>