先说一些数据库的知识,在进行表的操作时,若有一对多的关系,则在建外键时应选择多的一方。如user和group的对应关系,应在一个user属于多少个group,而不是一个group有多少用户,虽然这样也能实现,但就是比较麻烦而已。
1.el表达式操作的是作用域中的属性,即属性一定要放到作用域中才能被el表达式获取。必须以${xxx}来表示。其中作用于按范围由小到大有pageScope,requestScope,sessionScope,applicationScope
而属性包括param和paramValue,前者为单值,后者为数组。
2.el表达式中的变量,都必须用"setAttribute("a",A)"放到作用域内。可把a看做key,A看做value
3.
${param.a}//相当于:<%=request.getParameter("a") %>
${paramValue.b[0]}//相当于<%=request.getParameterValue("b[0]") %>
4.JSTL标签库,即JSP Standard Tag Library JSP标准标签库,只要掌握核心标签库http://java.sun.com/jsp/jstl/core即可,其它的用的时候再查就行。
而这里边最常用的是三种<c:if>,<c:foreach>,<c:choose>。标签库的作用就是增强代码可读性,平常在页面中用<% %>来插入java代码。如:
<%
request.setAttribute("a",3);
int a = (Integer)request.getAttribute("a");
if(a==3){
%>
<b>a==3<b/>
<%}else{ %>
<b>a!=3<b/>
<%
}
%>
这样可读性很差,如果使用标签库来实现,则可这样写(必须先引入标签库):
<%@ taglib url="http://java.sun.com/jsp/jstl/core" prefix="c">
<c:choose>
<c:when tst="${a==3}">
<b>a==3</b>
</c:when>
<c:otherwise>
<b>a!=3</b>
</c:otherwise>
</c:choose>
<c:if>的例子,
var用来存储test执行后的结果
<c:if test="${empty requestScope.s}" var="resultTest">
<h1>true才显示</h1>
</c:if>
结果为:
${resultTest}
5.el存取变量数据的方法很简单,例如:${username}意为取出某一范围中名称为username的变量,由于没有指定范围,所以会依次从
pageScope,requestScope,sessionScope,application中去寻找。如果找到username,就返回值。若没有找到,就返回空字符串"",而不是null,这个要注意。
例如:要取得session中储存的一个username的值,可用下列方法:
session.getAttribute("username");
在el表达式中,则可用
${sessionScope.username};
6.对于这些标签,只要掌握<c:if>,<c:choose>,<c:foreach>即可
①<c:if>相当于java中的if语句
有三个参数,test,var,scope
test:若返回true,则执行本体内容;否则不执行
var:用来存储test执行后的结果
scope:作用域,一般不写
<c:if test="${empty requestScope.s}" var="result">
<h1>true才显示</h1>
</c:if>
执行结果:${result}
②<c:choose>相当于java中的if-else语句
<c:choose>
<c:when test="${empty requestScope.s}">
<h1>空</h1>
<c:when>
<c:otherwise>
<h1>非空</h1>
</c:otherwise>
</c:choose>
注意:<c:when>必须在<c:otherwise>前边;
<c:choose>中除了<c:when>和<c:otherwise>外不能有其它元素
③<c:forEach>相当于java中的遍历操作
一般只用到items,var,varStatus属性
items:就是要遍历的数组或集合,数组或集合的name是什么,items就写什么
var:就是用来存放遍历的结果
varStatus:封装了当前遍历的状态,一般与index,count合用。可以实现一些与行数有关的功能,可以实现斑马线功能。
${status.index}输出行号,从0开始,为索引
${status.count}输出计数,从1开始,为计数
<c:forEach begin="1" end="5" step="2" items="${list}" var="result">//表示操作list集合中1-5条数据,不是逐条循环,而是按每2个取值。即操作集合中的第1,3,5条数据。
输出集合内容,若索引号为5的倍数,就换行。
<%
List list = new ArrayList();
for(int i=0;i<20;i++){
list.add("A"+i);
}
pageContext.setAttribute("li",list);
//把list内容添加到li中
%>
<c:forEach items="${li}" var="a" begin="5" end="13" step="3" varStatus="idx">
<b>${a}</b>
<c:if test="${(idx.index+1)%5==0}">
<br>
</c:if>
</c:forEach>
下面说下如何实现斑马线功能
<c:forEach var="varity" items="${sessionScope.myList}" varStatus="status">
<!--实现斑马线效果-->
<c:if test="${status.count%2==0}">
<tr bgcolor="lightyellow">
</c:if>
<c:if test="${status.count%2!==0}">
<tr>
</c:if>
</c:forEach>
输出1到9的平方
<c:forEach var="x" begin="1" end="9" step="1">
${x*x}
</c:forEach>