JSP总结

来源:互联网 发布:天天向上网络 编辑:程序博客网 时间:2024/06/08 15:12
Jsp标签:1.<jsp:include>标签的作用是用来包含其它JSP页面的.include指令是在编译级别完成的包含,即把当前JSP和被包含的JSP合并成一个JSP,然后再编译成一个Servlet。include动作标签是在运行级别完成的包含,即当前JSP和被包含的JSP都会各自生成Servlet,然后在执行当前JSP的Servlet时完成包含另一个JSP的Servlet。它与RequestDispatcher的include()方法是相同的!   其实<jsp:include>在“真身”中不过是一句方法调用,即调用另一个Servlet而已。2.<jsp:forward>标签的作用是请求转发!forward标签的作用与RequestDispatcher#forward()方法相同。3.<jsp:param>它是用来传递参数的,<jsp:param    value=” ”  name=” ”>core标签库常用标签4.1 outset out<c:out value=”aaa”/>    输出aaa字符串常量<c:out value=”${aaa}”/>与${aaa}相同<c:out value=”${aaa}” default=”xxx”/>当${aaa}不存在时,输出xxx字符串<%request.setAttribute("a","<script>alert('hello');</script>");%><c:out value="${a }" default="xxx" escapeXml="false" />    当escapeXml为false,不会转换“<”、“>”。这可能会受到JavaScript攻击。set<c:set var=”a” value=”hello”/>  在pageContext中添加name为a,value为hello的数据。<c:set var=”a” value=”hello” scope=”session”/>  在session中添加name为a,value为hello的数据。4.2 remove    <%        pageContext.setAttribute("a", "pageContext");        request.setAttribute("a", "session");        session.setAttribute("a", "session");        application.setAttribute("a", "application");    %>    <c:remove var="a"/>    <c:out value="${a }" default="none"/>  删除所有域中name为a的数据!<c:remove var="a" scope=”page”/>    删除pageContext中name为a的数据!4.3 url  url标签会在需要URL重写时添加sessionId。<c:url value="/"/>  输出上下文路径:/day08_01/<c:url value="/" var="a" scope="request"/>  把本该输出的结果赋给变量a。范围为request<c:url value="/AServlet"/>  输出:/day08_01/AServlet<c:url value="/AServlet"><c:param name="username" value="abc"/><c:param name="password" value="123"/></c:url>    输出:/day08_01/AServlet?username=abc&password=123如果参数中包含中文,那么会自动使用URL编码!4.4 if   if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行。<c:set var="a" value="hello"/>[在page域中创建名为a的变量]<c:if test="${not empty a[判断a变量不为null,没有指定域,表示全域] }">    <c:out value="${a }"/></c:if>4.5 choosechoose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。当所有when标签的test都为false时,才会执行otherwise标签的内容。<c:set var="score" value="${param.score }"/><c:choose>    <c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>[if]    <c:when test="${score >= 90 }">A级</c:when>[else if]    <c:when test="${score >= 80 }">B级</c:when>    <c:when test="${score >= 70 }">C级</c:when>    <c:when test="${score >= 60 }">D级</c:when>    <c:otherwise>E级</c:otherwise>[else]</c:choose>4.6 forEachforEach当前就是循环标签了,forEach标签有多种两种使用方式:使用循环变量,指定开始和结束值,类似for(int i = 1; i <= 10; i++) {};循环遍历集合,类似for(Object o : 集合);循环变量方式:<c:set var="sum" value="0" />[创建page域属性sum为0]<c:forEach var="i" begin="1" end="10">[设置循环变量i,初始值为1,遍历到10。]    <c:set var="sum" value="${sum + i}" />[设置sum的值为sum + i]</c:forEach><c:out value="sum = ${sum }"/><c:set var="sum" value="0" /><c:forEach var="i" begin="1" end="10" step[步长为2,默认步长为1。相当于i+=2的意思!而默认为i++。]="2">    <c:set var="sum" value="${sum + i}" /></c:forEach><c:out value="sum = ${sum }"/>遍历集合或数组方式:<%String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};pageContext.setAttribute("ns", names);%><c:forEach var="item[把ns是中每一项赋给item。]" items="${ns }[ns是被遍历的数组。]">    <c:out value="name: ${item }[打印每一项]"/><br/></c:forEach>遍历List<%    List<String> names = new ArrayList<String>();    names.add("zhangSan");    names.add("liSi");    names.add("wangWu");    names.add("zhaoLiu");    pageContext.setAttribute("ns", names);%><c:forEach var="item" items="${ns }">[与遍历数组没有区别!for(String s : ns) {   …}]    <c:out value="name: ${item }"/><br/></c:forEach>遍历Map<%    Map<String,String> stu = new LinkedHashMap<String,String>();    stu.put("number", "N_1001");    stu.put("name", "zhangSan");    stu.put("age", "23");    stu.put("sex", "male");    pageContext.setAttribute("stu", stu);%><c:forEach var="item[因为遍历的是Map,所以每一项是Entry类型]" items="${stu }">    <c:out value="${item.key }: ${item.value }[获取Entry的key和value]"/><br/></c:forEach>forEach标签还有一个属性:varStatus,这个属性用来指定接收“循环状态”的变量名,例如:<forEach varStatus=”vs” …/>,这时就可以使用vs这个变量来获取循环的状态了。count:int类型,当前以遍历元素的个数;index:int类型,当前元素的下标;first:boolean类型,是否为第一个元素;last:boolean类型,是否为最后一个元素;current:Object类型,表示当前项目。<c:forEach var="item" items="${ns }" varStatus="vs"[把循环状态赋给vs]>    <c:if test="${vs.first }[如果是第一行,那么${vs.first}为true]">第一行:</c:if>    <c:if test="${vs.last }[如果是最后一行,那么${vs.last}为true]">最后一行:</c:if>    <c:out value="第${vs.count }[返回行数,从1开始]行: "/>    <c:out value="[${vs.index }[返回行数,从0开始]]: "/>    <c:out value="name: ${vs.current }[当前项,与${item}相同]"/><br/></c:forEach>EL表达式:操作List和数组:${list[0]}、${arr[0]};操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法;操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)。EL一共11个内置对象pageScoperequestScopesessionScopeapplicationScopeparam;paramValues;header;headerValues;initParam;cookie;pageContext;pageScope:${pageScope.name}等同与pageContext.getAttribute(“name”);requestScope:${requestScope.name}等同与request.getAttribute(“name”);sessionScoep: ${sessionScope.name}等同与session.getAttribute(“name”);applicationScope:${applicationScope.name}等同与application.getAttribute(“name”);param和paramValues这两个内置对象是用来获取请求参数的。注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。paramValues:paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它。header和headerValues是与请求头相关的内置对象.initParamcookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest(),可以${pageContext.request}。也就是读取JavaBean属性!!!
0 0
原创粉丝点击