频道栏目
首页 > 资讯 > Java > 正文

分享一波JAVA-el & jstl & mvc的核心知识点

18-05-18        来源:[db:作者]  
收藏   我要投稿

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

相关TAG标签
上一篇:Python开发Spark的案例教程
下一篇: java有什么用
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站