分享一波Java语言-el & jstl & mvc的核心知识点
小标 2018-12-04 来源 : 阅读 1177 评论 0

摘要:本文主要向大家介绍了分享一波Java语言-el & jstl & mvc的核心知识点,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了分享一波Java语言-el & jstl & mvc的核心知识点,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


 

01_EL表达式的概述


全称是Expression Language


主要作用


获取域对象中的数据并输出


执行运算并将结果输出


获取WEB开发中的常用对象


格式


${}


02_EL表达式获取并输出其他类型的对象 ---javabean对象 数组 集合 map


   el表达式作用: 替代jsp页面中的<% 主要是用来展示数据的


   1,从4个域对象中根据键的名字获取值


User u = new User("zhangsan",23);


pageContext.setAttribute("aaa", u);


    获取:${aaa }


   2,获取对象中的属性和集合中的元素


    数组/集合:使用数组/集合名[索引] 来获得元素


int[] arr = {1,2,3,4,5};


pageContext.setAttribute("bbb", arr);


获取:${bbb[1] }


对象/map集合:使用对象名或者map名["属性名"] 来获取对应的属性值(标准写法)


User u = new User("zhangsan",23);


pageContext.setAttribute("ccc", u);


获取:${ccc["username"] }


对象/map集合:使用对象名或者map名.属性名 来获取对应的属性值(简化写法)


User u = new User("zhangsan",23);


pageContext.setAttribute("ccc", u);


获取:${ccc.age}


有一种例外,map集合有一个键值对,键是"a b c",值是"zzz"


Map<String,String> map = new HashMap();


map.put("abc","www");


map.put("a b c","zzz");


pageContext.setAttribute("fff", map);


获取:${fff["a b c"] } 只能用标准写法


03_使用EL表达式进行运算并输出结果


注意点:


1,pageContext.setAttribute("username", ""); 或者 pageContext.setAttribute("username", null);


  表明没有设置 用${ empty username }获取的就是true


2,数组里面没有元素 用${empty list }获得的是true


3,el表达式不能嵌套


04_EL表达式内置对象的概述    *****一个对象和10个map集合*****


pageContext  是JSP页面的上下文对象,代表了JSP页面


pageScope 封装了pageContext域对象的数据


requestScope 封装了request域对象的数据


sessionScope 封装了session域对象的数据


applicationScope 封装了application域对象的数据


param 封装了表单提交的数据,Map的value类型是String


paramValues 封装了表单提交的数据,Map的value类型是String[]


header 封装了请求头,Map的value类型是String


headerValues  封装了请求头,Map的value类型是String[]


cookie 封装了客户端带来的cookie 


initParam 封装了WEB应用的初始化参数


requestScope 和 request对象区别


request对象,除了那3个方法(setAttribute,getAttribute,removeAttribute),还可以获取分发器,进行转发和包含,还可以得到请求行,请求头


但是requestScope没有这些方法,他只是一个作为域对象存储数据的map集合,他只能获取数据,对于其他功能是没有的,是阉割版的4大域对象


作用:如果出现重名的属性,我们就可以使用EL表达式中跟域对象相关的对象来获取 


requestScope里面有一个username属性


sessionScope里面也有一个username属性


如果直接用${username} 获取的就是requestScope里面的username属性


如果就是要获取sessionScope里面的username属性 ${sessionScope.username}


05_测试EL表达式的内置对象


注意点:


获取web应用的根路径;${pageContext.request.contextPath}


直接写cookie,得到是浏览器携带过来的cookie的map集合.键是cookie的名字,值是cookie对象


pageContext 页面上下文对象(完整的对象)


比如:${pageContext.request.contextPath} 相当于 pageContext.getRequest().getContextPath()


pageScope requestScope sessionScope applicationScope 是4个域对象存储数据的map集合,如果出现了同名的属性,就可以使用这4个来获取


比如:${sessionScope.username} 相当于 pageContext.getAttribute("username",SESSION_SCOPE);


param paramValues 就是表单提交过来的数据的map集合


比如:${param.password} 相当于 request.getParamter("password")


header headerValues 就是请求头中数据的map集合


比如:${header["User-Agent"]} 相当于 request.getHeader("User-Agent")


cookie 就是浏览器携带过来的所有的cookie的map集合 键是cookie的名字,值是cookie对象


    map.put("username",new Cookie("username","zhangsan")) 类似这样把cookie对象放到map集合里面


比如:${cookie.username} 得到的是一个cookie对象 ${cookie.username.value} 得到的是cookie对象里面的值


initParam 就是得到初始化参数的map集合 获得的是应用的初始化参数<context-param> 标签里面的值


比如:${initParam.username} 相当于 ServletContext.getInitParam("username")


01_JSTL的概述


全称是JSP Standard Tag Library,JSP标准标签库, core核心库 //xml库 jdbc库 国际化库


JSTL由开源组织Apache所提供和维护,


JSTL主要作用是移除JSP页面中的Java代码,


JSTL提供了一系列的标签库,主要使用JSTL的核心标签库。


使用步骤


将JSTL的相关jar包导入到WEB-INF/lib


在JSP页面中使用taglib指令导入标签库


在JSP页面中使用标签库里的标签


02_IF标签


设置数据的标签


var 声明一个变量


value 设置这个变量的值


scope 放在什么位置


<c:set var="username" value="itcast" scope="session"></c:set>


if标签


test:可以接EL表达式如果结果为true,则会执行if标签体里面的语句


<c:if test="$ {num > 3}">


<h1>黑马程序员</h1>


</c:if>


练习


判断session域对象中username的值是否等于itheima,如果是则显示欢迎登陆,否则显示用户名错误!


03_choose标签


choose是按照顺序判断内部的when标签里面的test是条件否成立,如果有一个成立,就会执行里面标签体,choose就结束了


当choose里面所有的when标签的条件都不成立的时候,就会执行otherwise的语句


类似java中的switch语句 choose相当于switch,when相当于case,otherwise相当于default


<c:set var="username" value="itcast" scope="session"></c:set>


<c:choose>


<c:when test="${username == 'itheima'}">


<h1>欢迎登陆!</h1>


</c:when>


<c:otherwise>


<h1>用户名错误!</h1>


</c:otherwise>


</c:choose>


根据交通信号灯做出不同的反应


04_forEach标签


主要作用是对数组对象或者集合对象进行遍历的操作,


通常和EL表达式组合使用,


forEach标签所遍历的通常是域对象中的数组对象或者集合对象。


第一种:类似 普通的for循环


begin:从几开始遍历


end:遍历到几


var:声明一个变量


额外的属性


step 步长


<c:forEach begin="1" end="100" var="i" step="2">


${i }<br />


</c:forEach>


第二种:类似增强for循环


items:等待遍历的集合或者数组对象


var:遍历的临时变量


<c:forEach items="${list }" var="i">


${i }<br>


</c:forEach>


额外的属性 


varStatus:用来声明一个用来记录遍历状态的变量


他有两个属性


count:统计当前遍历了多少次(做表格的时候可以生成前面的序号)


index:统计当前遍历元素的索引


<c:forEach items="${list }" var="i" varStatus="status">


${status.count}--list[${status.index}]--${i }<br>


</c:forEach> 


01_开发模式


模式一


JSP + JavaBean


JSP 获取数据,封装数据,显示数据,控制流程跳转,处理业务逻辑


JavaBean 增删改查


模式二(MVC)


JSP + Servlet + JavaBean


v JSP 显示数据


C Servlet 获取数据,封装数据,传输数据(域对象),控制流程跳转,处理业务逻辑


M JavaBean 增删改查


设计模式 23种  大话设计模式


   mvc设计模式 很多图形化界面都有 移动端   


三个阶段


1,只有Servlet,没有jsp,痛苦


2,抛弃Servlet,全部用jsp,操作数据库,操作xml,处理国际化 可读性非常差


3,MVC + 三层架构 各司其职 jsp擅长输出页面 Servlet处理业务逻辑 程序比较清晰


  MVC和三层架构不是一个概念 三层架构是java独有的 


  


02_MVC三层架构


表示层


客户端(浏览器)


Servlet:获取数据,封装数据


jsp: 显示数据


业务逻辑层


service:处理业务逻辑


数据访问层


dao:增删改查


db:数据库


好处 


1,可以分工合作


各层依赖性比较低,可以实现解耦,分工明确,实现团队的协作开发


2,代码的重用性比较高


3,Struts hibernate Spring 其实对应着我们这3层


Struts 表示层框架 也就是web层(处理乱码,封装数据,处理业务逻辑,实现页面的跳转)


hibernate 数据持久化框架 对应着dao 面向对象 


Spring 业务逻辑层 核心技术 IOC(依赖注入或者控制反转)


AOP(面向切面编程) 核心思想:解除耦合性,通过配置文件,在运行的时候把对象注入进来


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved