EL表达式和JSP

在这里插入图片描述

EL表达式:获取值,JSTL可用作判断、循环

在JSP页面中,可以用在“ ” 里取值并展示,不要当成字符串拼接了。

英文expression language表达式语言。
是直接在jsp页面取值展现用(四大作用域:pageContext-request-session-application(servletContext),${key名}
用于替换域对象.getattribute().方法

JSTL:java server pages standard tag library jsp标签集合 结合EL表达式进行逻辑操作,展示数据

## EL表达式11大内置对象
pageScope:获取pageContext域属性

requestScope:获取request域属性,

sessionScope:获取session域属性,

applicationScope:获取application域属性

param: 可获取url拼接的参数

paramValues: 获得url所有的拼接参数集合

header:

headerValues:

initParam:获取web.xml中内的参数

cookie:用于获取cookie,Map<String,Cookie>,其中key是cookie的name,value是cookie对象,例如${cookie.JSESSIONID.value }就是获取sessionId

pageContext:可以获取JSP九大内置对象request、reponse、session、application ,out等

PS:
如果指定了取值范围,却没有取到值就不显示。
没有指定取值范围,会从最小范围pageContext依次遍历找,直到找到值为止,遍历完四大作用域都没有的话,就不显示。
获取值 时可以用 . 也可以用下标[***]
el表达式取出的值如果为:"“null不存在 这三种情况,不显示,不报错
${door.length} 能这样用的前提是:length属性有get方法。
el表达式取出的值,会自动类型转换
el表达式可以直接用运算符,其中+这个符号只能作算术运算。
判断变量是否为:不存在”"null --------> ${empty k3} ${!empty k4}

${pageScope.k1}  //指定范围
${k1}	//范围从四大作用域里最小的开始
${requestScope.k2}
${sessionScope.k3}
${applicationScope.k4}
${1+10-3>6&&1+1>3}<br>
${empty k1}
${empty yes}  //k1 yes是空?    返回true false
${cookie.JSESSIONID} //地址javax.servlet.http.Cookie@25ba77d
${cookie.JSESSIONID.value}//2D0663184275176B4CC53567D8CDDD24

获取数组或者集合中的元素:

<%
    int[] array = new int[]{1,2,3,4,5};
    request.setAttribute("array",array);

	List<Emp> emps = new ArrayList<>();
    emps.add(new Emp(1,"gavin",2000,19));
    emps.add(new Emp(2,"marry",3000,29));
    emps.add(new Emp(3,"jack",4000,39));
    request.setAttribute("emps",emps);

	Map<String,String> maps = new HashMap<>();
    maps.put("CN","中国");
    maps.put("FK","法国");
    maps.put("US","美国");
	request.setAttribute("maps",maps);
%>
${requestScope.array[0]}

${emps[0].name} <%-- 也可以用 ${emps.get(0)}  --%>

${maps.CN} <%-- 也可以用 ${maps["US"]} -->

empty

 <%
    String s1="";
    pageContext.setAttribute("s1", s1);
    String s2=null;
    pageContext.setAttribute("s2", s2);
    String s3="122222";
    pageContext.setAttribute("s3", s3);
    List list1 =new ArrayList();
    pageContext.setAttribute("list1", list1);
  %>
  <!-- empty关键只要内容是空true -->
  ${empty s1}<br>
  ${empty s2}<br>
  ${empty  s3}<br>
  ${empty  list1}<br>
        Cookie cookie = new Cookie("username","fage");
        cookie.setMaxAge(60*60);
        response.addCookie(cookie); //新增cookie,记得要add到response

JSTL:

	<h3>条件标签:if</h3>
	<c:if test="${8>2 }">
    	8大于2是成立的
     </c:if>
	<c:if test="${8<2 }">
   	 	8小于2是成立的
    </c:if>
<c:set var="score" value="80"></c:set>
<c:choose>
	<c:when test="${score>=90 }">优秀</c:when>
	<c:when test="${score>=80 }">良好</c:when>
	<c:when test="${score>=70 }">中等</c:when>
	<c:when test="${score>=60 }">及格</c:when>
	<c:otherwise>不及格</c:otherwise>
</c:choose>
userStatus:每个元素对应的相关状态属性
          <c:forEach var="stu" items="${students}" varStatus="userStatus">
              <tr>
                  <td>${stu.id}</td>
                  <td>${stu.name}</td>
                  <td>${stu.score}</td>
                  <td>${stu.classes}</td>
                  <td>${vs.first}</td>
                  <td>${vs.last}</td>
                  <td>${vs.count}</td>
                  <td>${vs.index}</td>
              </tr>
          </c:forEach>
${userStatus.index} 此项的索引,从0开始 
${userStatus.count} 此项的计数序号,从1开始 
${userStatus.first} 此项是否是第一项,布尔值 
${userStatus.last} 此项是否是最后一项,布尔值 
${userStatus.begin} 此次迭代的起始索引,对应<c:foreach>中begin属性值 
${userStatus.end} 此次迭代的终止索引,对应<c:foreach>中end属性值 
${userStatus.step} 此次迭代的跳跃步伐,对应<c:foreach>中step属性值  

禁用COOKIE时,会带上sessionid

以下两种方式都会自动判断有没有禁用cookie而带不带sessionid

1.response.encodeRedirectURL(request.getContextPath() + "/e1.jsp");
禁用COOKIE
2.
<c:url context='${pageContext.request.contextPath}' value='/xxxController' /> 
上面这句,返回--->/myshop/ttttttttt.jsp;jsessionid=626912669EC070B88139E9E9D48DBF56
//在form表单的action中嵌套动态路径 双引号里包单引号。
<form action="<c:url context='${pageContext.request.contextPath}' value='/xxxController' />">    
</form>

JSP:
九大内置对象:

pageContext:可get其它八个对象
在这里插入图片描述

RequestDispatcher rd = request.getRequestDispatcher("/a.jsp");//“/”绝对路径
        rd.forward(request,response);//转发
  
        response.sendRedirect("a.jsp"); //重定向
        pageContext.forward("a.jsp");  //转发
        pageContext.include("a.jsp"); //包含

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JSP

服务端页面,HTML+JAVA代码,动态生成网页。
JSP脚本,注释,

指令–3个:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
静态包含,物理上多个页面合在一个,注意下面三个网页中定义变量容易有重复的,
这样容易报错
<%@ include file="header.jsp"%>   
...
<%@ include file="footer.jsp" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

JSP动作标签

动态包含: 可以防止各个页面内变量重名。

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

实例化对象:

<jsp:useBean id="user" class="com.qf.entity.User"/>
<jsp:useBean id="user" class="com.qf.entity.User" />
<jsp:setProperty name="user" property="name" value="gavin" />

赋值与取值显示:

<jsp:useBean id="user" class="com.qf.entity.User" />
<jsp:setProperty name="user" property="name" value="gavin" />
<jsp:getProperty name="user" property="name" />

<jsp:forward page="index.jsp" />

转发+传参数

<jsp:forward page="index.jsp">
         <!-- http请求参数传递-->
         <jsp:param name="sex" value="nan" />
</jsp:forward>

JSP四大域对象:可以存值的。

<%
pageContext.setAttribute("name",value);//当前页面作用域有效
%>

pageContext操作其他作用域存、取值

<%
	//操作其他作用域存储
	pageContext.setAttribute("name",value);//当前页面有效
	pageContext.setAttribute("name",value,PageContext.REQUEST_SCOPE);//request作用域
	pageContext.setAttribute("name",value,PageContext.SESSION_SCOPE);//session作用域
	pageContext.setAttribute("name",value,PageContext.APPLICATION_SCOPE);//application作用域

%>
<%
	//操作其他作用域获取
    pageContext.getAttribute("name");//当前页面作用域
    pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);//request作用域
    pageContext.getAttribute("name",PageContext.SESSION_SCOPE);//session作用域
    pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);//application作用域
    pageContext.findAttribute("name");//从pageContext,request ,session ,application依次查找
%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值