EL&JSTL学习笔记

1.EL_概述
EL是什么?
expression language:表达式语言
EL的作用?
简化jsp中java代码书写
EL的语法?
${表达式}
使用EL表达式:
1.做运算;
2.从域中获取数据;

2.EL_运算符
空运算符 empty的作用?
${empty 集合/数组/字符串}

	判断 集合/数组/字符串 是否为null或者其长度是否为0;

3.EL_获取域中存储的值
四种域?
pageScope--------------->pageContext
requestScope------------>request
sessionScope------------>session
applicationScope-------->ServletContext
从域中获取值的两种方式?
${域名.键}:从指定域中获取指定键的值
${键}:从最小的域开始,查找,依次往最大的域中查找,查找到就结束;

如果域中没有获取到指定键对应的值,在页面中会显示什么?
	空字符串!!!
servlet页面

// 设置响应和获取数据的编码合适
request.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=utf-8”);

// 设置request域共享数据
request.setAttribute(“name”,“张三”);

// 设置session域共享数据
request.getSession().setAttribute(“age”,18);

// 设置servletContext共享数据
request.getServletContext().setAttribute(“gender”,“男”);

// 将当前页面转发到el1.jsp页面,因为是服务器内部的资源调整,所以用转发,所以路径不需要写虚拟目录
request.getRequestDispatcher("/el/el1.jsp").forward(request,response);

jsp页面

<%-- 设置pageContext当前页面共享数据 --%>
<%-- el标签代替了<%= 表达式%> 类型的java代码的书写 --%>
<% pageContext.setAttribute(“address”,“北京”);%>
<%–获取数据–%>
${pageScope.address}

${address}


  ${requestScope.name}<br>
  ${name}<br><hr>

  ${sessionScope.age}<br>
  ${age}<br><hr>

  ${applicationScope.gender}<br>
  ${gender}<br><hr>

  <%--从域中获取值的两种方式?

${域名.键}:从指定域中获取指定键的值
${键}:从最小的域开始,查找,依次往最大的域中查找,查找到就结束;–%>
<% pageContext.setAttribute(“name”,“lisi”);%>
${name}

结果
北京
北京
张三
张三
18
18


lisi

12_EL_获取域中存储的值_对象值
如果域中存储的是一个对象,那么怎么获取该对象的属性值?
${域名.javaBean对象对应的键名.属性名}

************************************
	其实得到对象后,获取属性的值,底层通过反射调用的是getter方法;
	
	
	el表达式底层其实是会被一些java代码解析的。

servlet
// 创建user对象
User user = new User(“张三”,18);
// 将user对象存入request共享域
request.setAttribute(“user”,user);
// 转发页面el2.jsp
request.getRequestDispatcher("/el/el2.jsp").forward(request,response);

jsp
<%–获取user对象–%>
<%–如果域中存储的是一个对象,那么怎么获取该对象的属性值?
${域名.javaBean对象对应的键名.属性名}–%>
${requestScope.user}

${user}



<%–获取user对象的属性值–%>
${user.name}

${user.age}

  ${requestScope.user.name}<br>
  ${requestScope.user.age}<br><hr>

4.EL_获取域中存储的值_List集合&Map集合值
如何获取List集合中指定索引处的内容?
${域名.list集合对应的键名[索引]}
如果传入的索引大于List集合的最大索引,会不会报错?
不会,显示空字符串
如何获取Map集合中指定键对应的值?
${域名.map集合对应的键名.key名}
${域名.map集合对应的键名[“key名”]}

<%–注意!!!!
map集合在el中一般情况下键均为String 。因为在el表达式调用的时候不能直接点数字,
所以在el表达式中int类型不能作为他的键
–%>
list集合
// 创建user对象
User user = new User(“张三”,18);
// 创建list集合,将User 作为泛型传入
List list = new ArrayList<>();
list.add(user);

// 将list集合存入request共享域
request.setAttribute(“list”,list);
// 转发页面el3.jsp
request.getRequestDispatcher("/el/el3.jsp").forward(request,response);

map集合
// 创建user对象
User user = new User(“张三”,18);
// 创建map集合,将User 作为泛型传入
Map<String,User> map = new HashMap<>();
map.put(“user”,user);

// 将map集合存入request共享域
request.setAttribute(“map”,map);
// 转发页面el4.jsp
request.getRequestDispatcher("/el/el4.jsp").forward(request,response);

jsp
<%–如何获取List集合中指定索引处的内容?
${域名.list集合对应的键名[索引]}–%>
<%–获取request域中的list集合对象–%>
${list}

${requestScope.list}


  <%--获取list集合中的user对象--%>
  ${list[0]}<br>
  ${requestScope.list[0]}<br><hr>

  <%--获取list集合中user对象的属性值--%>
  ${list[0].name}<br>
  ${list[0].age}<br><hr>

  ${requestScope.list[0].name}<br>
  ${requestScope.list[0].age}<br><hr>

  <%--如果传入的索引大于List集合的最大索引,会不会报错?

不会,显示空字符串–%>
<%–获取list集合中的user对象–%>
${list[2]}

${requestScope.list[2]}


    <%--注意!!!!
          map集合在el中一般情况下键均为String 。因为在el表达式调用的时候不能直接点数字,
          所以在el表达式中int类型不能作为他的键
  --%>
  <%--如何获取Map集合中指定索引处的内容?--%>
  <%--${域名.map集合对应的键名.key名}

${域名.map集合对应的键名[“key名”]}–%>
<%–获取map集合–%>
${requestScope.map}

${map}


  <%--获取map集合中指定键的值--%>
  ${requestScope.map.user}<br>
  ${map.user}<br><hr>
  ${map["user"]}<br><hr>

  <%--获取map集合中指定键的值的属性--%>
  ${requestScope.map["user"].name}<br>
  ${requestScope.map.user.age}<br><hr>

  ${map["user"].name}<br>
  ${map["user"].age}<br><hr>

5.EL_empty运算符&隐式对象pageContext
empty的使用格式?
${empty 集合/数组/字符串}
${pageContext.request.contextPath}有什么用?
动态获取项目的虚拟目录;

**********************************
	el表达式中有11个隐式对象(不需要创建,直接可以使用的对象);
		pageScope
		requestScope
		sessionScope
		applicationScope
		pageContext
		
		
为什么要学习EL表达式?
	替换了 jsp中的  <%= 表达式%> 脚本;
	
	最重要的功能:
		1.${域名.键名}从域中取数据
		2.${pageContext.request.contextPath}获取虚拟目录;

<%-- empty的使用格式?
${empty 集合/数组/字符串}
${pageContext.request.contextPath}有什么用?–%>
<%–
${empty 集合/数组/字符串} 用来判断集合/数组/字符串是不是 null 或者长度是不是=0
如果为null 或者 长度=0 ze 返回false
否则返回 ture

  ${not empty集合/数组/字符串 } 判断是不是 不为null且长度 = 0;
 --%>
  ${empty "zhangsan"}<br>
  ${empty ""}<br>
  ${not empty ""}<br>	
  
  <%--用来动态的获取虚拟目录--%>

${pageContext.request.contextPath}

6.JSTL_概述
jstl是什么?Java server tag library
jsp的标准标签库;

jstl的作用?
	通过jstl提供的标签,来替换jsp页面中的java代码(流程控制语句,<%%>)
	
jstl的使用步骤?
	1.导入jstl的jar包;
	2.在jsp页面中,引入jstl标签;
	3.使用;

7.JSTL_常用标签_if
c:if标签 的必须属性test的属性值是什么?
是一个el表达式,该表达式的结果必须是boolean类型的;
<c:if test="${布尔表达式}">
里面的内容是否显示
</c:if>

***************************
	1.引入标签库时:需要引入的是jsp底下的core:
		<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
		
	2.jstl的标签需要被引入的jstl相关的jar包中的代码解析!!!

8.JSTL_常用标签_choose(了解)
对比着java中的switch来学习,总共涉及到几个标签?
c:choose

	c:when
	
	c:otherwise
	
	
switch(值){
	case 值:
		代码;
		break;
	。。。。
	
	default:
		代码;
		break;
}

9.JSTL_常用标签_foreach
1.做多次重复操作

	<c:forEach begin="开始值" end="结束值" var="临时变量名" step="变化的步长" varStatus="循环状态的对象">
		

	</c:forEach>
	
2.遍历容器
	<c:forEach items="指定遍历哪个容器" var="临时变量名"  varStatus="循环状态的对象">
		

	</c:forEach>
	
	varStatus:
		index:
			本次循环的循环变量的值   循环变量的索引值
			
		count:
			本次循环是第几次循环


***********************************
	<table border="1px">

        <tr>
            <td>循环变量i的值</td>
            <td>varstatus中的index的值</td>
            <td>varstatus中的count的值</td>
        </tr>
        <c:forEach begin="3" end="20" var="i" step="4" varStatus="s">
            <tr>
                <td>${i}</td>
                <td>${s.index}</td>
                <td>${s.count}</td>
            </tr>
        </c:forEach>
    </table>

jsp
<%–jJSTL_常用标签_foreach–%>
<%–
begin 开始值
end 结束值
step 步长 每次循环增加的值
var 变量名

varStatus 状态
index : 当前循环的值
count:当前是第几次循环

–%>
<c:forEach begin=“1” end=“10” step=“1” var=“i”>
${i}
</c:forEach>


${user.name} -- ${user.age} -- ${s.index} -- ${s.count}

<c:forEach items="${ints}" var=“num” varStatus=“s”>
${num} – ${s.index} – ${s.count} – ${s}

</c:forEach>

servlet
// 创建user对象
User user1 = new User(“张三”,19);
User user2 = new User(“李四”,20);

List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
int[] ints = {10,12,14};
request.setAttribute("list",list);
request.setAttribute("ints",ints);
// 转发页面jstl2.jsp
request.getRequestDispatcher("/jstl/jstl2.jsp").forward(request,response);

}

JSTL_练习
table中有多少行数据是怎么确定的?

20_三层架构
每一层需要做的事情?
web层:
1.接收请求,获取请求参数;
2.调用service层,完成业务逻辑处理;
3.把数据交给视图展示;
service层:
组合到层的基本方法,形成一个复杂的业务。
dao层:
提供操作数据库的最基本的方法

界面层包含了哪两个部分?
	servlet  jsp

10.案例_需求分析&设计
做一个小项目的流程?

11.案例_环境搭建
基础环境搭建,需要做哪些事情?

12.案例_列表查询_分析
1.在index.htm中点击"查询所有用户信息"需要跳转到UserListServlt中
然后在UserListServlet中转发到jsp中返回给浏览器?
思考:
service层和dao层,为什么要设计一个接口,然后再写一个实现类实现该接口?

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值