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.*" %> 

1page:

作用:用于定义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" %>

2include:

静态包含:把其它资源包含到当前页面中。

<%@ include file="/include/header.jsp" %>

动态包含:

<jsp:include page="/include/header.jsp"></jsp:include>

两者的区别:翻译的时间段不同

前者:在翻译时就把两个文件合并

后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。

原则:能用静的就不用动的。

3taglib

作用:在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>

 

 jsp6个动作

 

 使用标签的形式来表示一段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 表达式语言,要简化jspjava代码开发。它不是一种开发语言,是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

JSTLJavaServerPages Standard Tag LibraryJSP标准标签库

2JSTL的作用

使用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>

 

 

 

 

 

posted on 2018-11-08 15:54  唐小夏  阅读(226)  评论(0编辑  收藏  举报