jsp的基本语法
<%-- <% %>用于写java代码 --%> <% String msg=(String)request.getAttribute("msg"); if(msg!=null) out.write(msg); %> <%-- <%=msg %> 等价于 out.write(msg) --%> <%=msg %> <%-- <%!定义全局变量或静态块--%> <%! int i=10; %> <%-- <%定义局部变量 --%> <% int i=10; %> <%--这是jsp注释,特点:安全,不费流量 --%> <!-- 这是html注释 特点:不安全,费流量-->
jsp的基本语法
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP 2.0规范中共定义了三个指令:page指令、Include指令、taglib指令
语法:
<%@ 指令名称 属性1=“属性值1” 属性2=“属性值2”。。。%> 或者: <%@ 指令名称 属性1=“属性值1”%> <%@ 指令名称 属性2=“属性值2”%> 如:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page language="java" %> <%@ page import="java.util.*" %>
1、page:
作用:用于定义JSP页面的各种属性
属性:
1.1、 import 和java代码中的import是一样的 <%@ page import="java.util.Date,java.util.List"%> 或者: <%@ page import="java.util.Date"%> <%@ page import="java.util.List"%> JSP会自动导入以下的包: import java.lang.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; 1.2、 session: 是否会自动创建session对象。默认值是true; 1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb. 1.4 errorPage: 如果页面中有错误,则跳转到指定的资源。 errorPage="/uri" 如果写“/”则代表当前应用的目录下,绝对路径。 如果不写“/”则代表相对路径。 1.5、 isErrorPage: 是否创建throwable对象。默认是false; 1.6、 contextType: 等同于response.setContextType("text/html;charset=utf-8"); 1.7、 pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。 1.8、 isELIgnored: 是否支持EL表达式。 默认是false <%@ page pageEncoding="gbk" %>
2、include:
静态包含:把其它资源包含到当前页面中。
<%@ include file="/include/header.jsp" %>
动态包含:
<jsp:include page="/include/header.jsp"></jsp:include>
两者的区别:翻译的时间段不同
前者:在翻译时就把两个文件合并
后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
原则:能用静的就不用动的。
3、taglib
作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
实际使用中当使用“Alt+/”快捷键时,没有反应,显示如下,这样的话需要先导入jstl.jar包
导入jstl.jar
<c:if test="${5>3 }"> aaaaaa </c:if>
jsp的6个动作
使用标签的形式来表示一段java代码。 如: <jsp:include page="2.jsp"></jsp:include> <jsp:include > 动态包含 <jsp:forward> 请求转发 <jsp:param> 设置请求参数 <jsp:useBean> 创建一个对象 <jsp:setProperty> 给指定的对象属性赋值 <jsp:getProperty> 取出指定对象的属性值
四大域对象:实际开发
PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。
ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。
HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。
ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。
EL表达式
EL表达式:expression language 表达式语言,要简化jsp中java代码开发。它不是一种开发语言,是jsp中获取数据的一种规范
EL的具体功能
EL表达式只能获取存在4个作用域中的数据
EL获取对于null这样的数据,在页面中表现为空字符串 ${u.name} == u.getName()方法 点(.) 运算符相当于调了getter方法,点后页面跟的是属性名。
[]运算符:点能做的,它也能做; 它能做的,点不一定能做
<% List list=new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); request.setAttribute("list", list); Map map=new HashMap(); map.put("a", "a"); map.put("b", "b"); map.put("c", "c"); request.setAttribute("map", map); %> ${list[0] },${list }, ${map['b'] },${map.c }
运算empty判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true
<% String str=""; request.setAttribute("str",str); String str1=null; request.setAttribute("str1", str1); String str2="abc"; request.setAttribute("str2", str2); List list=new ArrayList(); list.add("5656"); request.setAttribute("list", list); Map map=new HashMap(); request.setAttribute("map", map); %> ${empty str },true</br> ${empty str1 },true</br> ${empty str2 },false</br> ${empty list },false</br> ${empty map },true</br>
三元运算符
<% int sex=1; request.setAttribute("s", sex); %> <input type="radio" name="sex" value="m" ${s==0?"checked='checked'":"" }>男 <input type="radio" name="sex" value="f" ${s==1?"checked='checked'":"" }>女
JSTL
1、什么是JSTL
JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
2、JSTL的作用
使用JSTL实现JSP页面中逻辑处理。如判断、循环等。
3、使用JSTL
1)在JSP页面添加taglib指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
2)使用JSTL标签
<%-- 申明一个变量num 值为 10 --%> <c:set var="num" value="15"></c:set> <%-- 将变量num输出 --%> <c:out value="${num }"></c:out> <%-- 移除变量num --%> <c:remove var="num" /> <%-- 再次输出变量num,如num无值,则默认aaa --%> <c:out value="${num }" default="aaa"></c:out> <%-- if判断语句,无else --%> <c:if test="${5>3 }"> 5>3 </c:if> <%-- 判断语句不满足走默认值 --%> <c:choose> <c:when test="${5<3 }"> 5>3 </c:when> <c:otherwise> 默认值 </c:otherwise> </c:choose>
出现以下错,是由于<c:if test="${5>3 }">,变量${}要使用双引号“”引起来。
foreach标签:
<% List list=new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); list.add("fff"); request.setAttribute("list", list); %> <table> <tr> <th>数据</th> <th>从0开始</th> <th>从1开始</th> <th>最后一个</th> <th>第一个</th> </tr> <%-- c:forEach中的varStatus属性。 指向一个字符串,该字符串引用一个对象。 map.put("vs",一个对象); 这个对象记录着当前遍历的元素的一些信息: getIndex():返回索引。从0开始 getCount():返回计数。从1开始 isLast():是否是最后一个元素 isFirst():是否是第一个元素 --%> <c:forEach items="${list }" var="l" varStatus="vs"> <tr ${vs.count%2==0?"style='background-color:red'":"style='background-color:blue'" }> <td>${l }</td> <td>${vs.index }</td> <td>${vs.count }</td> <td>${vs.first }</td> <td>${vs.last}</td> </tr> </c:forEach> <%-- var申明变量 begin初始化 end结束条件 step步长 --%> <c:forEach var="i" begin="0" step="2" end="10" > ${i } </c:forEach> </table>