Jsp的el&jstl&mvc

EL

01_EL表达式的概述

全称是Expression Language

主要作用
获取域对象中的数据并输出
执行运算并将结果输出
获取WEB开发中的常用对象

格式
${}

02_EL表达式获取并输出其他类型的对象

   el表达式作用: 替代jsp页面中的<% 主要是用来展示数据的
   
   1,从4个域对象中根据键的名字获取值
User u = new User("zhangsan",13);
pageContext.setAttribute("aaa", u);
${aaa }  //pageContext.findAttribute("aaa")
2,可以获取对象中的属性或者集合中的元素
数组/集合:使用数组/集合名[索引] 来获得元素
int[] arr ={1,2,3,4,5};
pageContext.setAttribute("bbb", arr);
获取:${bbb[1] }
    对象/map集合:使用对象名或者map名["属性名"]来获取对应的属性(标准写法)
User u = new User("zhangsan",13);
pageContext.setAttribute("aaa", u);
获取:${aaa["username"] }
对于对象/map集合还有一种简化写法,可以通过对象名/map集合名.属性名来获取对应的属性(简化写法)
User u = new User("zhangsan",13);
pageContext.setAttribute("aaa", u);
获取:${aaa.username }
有一种例外,map集合中有一个键值对,键是"a b c",值是"zzz"
Map<String,String> map = new HashMap();
map.put("abc", "www");
map.put("a b c", "zzz");
pageContext.setAttribute("ccc", map);
获取: ${ccc["a b c"]}

注意:el表示式获取对象里面成员变量,调用的是成员变量的get方法
el表达式里面不能写菱形泛型

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

     数组里面没有元素 用${empty list }获得的是true
el表达式不能嵌套

04_EL表达式内置对象的概述

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应用的初始化参数
 
request对象作为域对象,除了3种方法(setAttribute(),getAttribute(),removeAttribute()) 还可以获得转发对象,进行转发,
还可以得到请求的请求头,请求行,但是requestScope没有这些方法,他只是作为域对象存储数据的map集合,他只能获取数据,
而对于其他的功能,他是没有的,他其实是一个阉割版的域对象
作用:如果出现重名的属性,我们就可以用El表达式里面跟域对象相关的对象 来获取,如果没有重名的,直接${属性}就可以
  requestScope 有一个username属性
  sessionScope 有一个username属性
  直接用${username} 获取的是requestScope里面的username
  如果要获取sessionScope的username 那么${sessionScope.username} 

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

获取web应用的根路径:${pageContext.request.contextPath}
注意:直接写cookie,得到的是一个Cookie对象
可以调用1个内置对象和10个map集合,从中获取数据
pageContext 页面上下文对象(完整的对象)
  比如:${pageContext.request.contextPath} 相当于 pageContext.getRequest().getContextPath()

pageScope requestScope sessionScope applicationScope 就是4个域对象存储数据的map集合,如果出现重名的属性,可以使用这4个来获取
  比如:${sessionScope.username}  相当于 pageContext.getAttribute("username",REQUEST_SCOPE);
 
param paramValues 就是表单提交过来的数据的map集合
  比如:${param.password} 相当于 request.getParamter("password")
  
header headerValues 获取请求消息头中的数据
  比如:${header["user-agent"]} 相当于 request.getHeader("ser-agent")
  
cookie 就是浏览器携带过来的所有cookie的map集合 键是cookie的名字 值是cookie对象
  map.put("username", new Cookie("username","zhangsan")) 类似这样把cookie对象放到map集合里面
  比如: ${cookie.username} 得到的是一个Cookie对象,  ${cookie.username.value} 得到的是Cookie对象里面的值
  
initParam 就是获得初始化参数,获取是应用的初始化参数<content-param>标签里面的值
  比如${ initParam.username} 相当于 ServletContext.getInitParam("usename") 

JSTL

01_JSTL的概述

全称是JSP Standard Tag Library,JSP标准标签库,
JSTL由开源组织Apache所提供和维护,
JSTL主要作用是移除JSP页面中的Java代码,
JSTL提供了一系列的标签库,主要使用JSTL的核心标签库。
使用步骤
将JSTL的相关jar包导入到WEB-INF/lib
在JSP页面中使用taglib指令导入标签库
在JSP页面中使用标签库里的标签

02_IF标签

jsp标准标签库     //xml库 jdbc库 国际化库 
设置数据标签
   var: 声明一个变量
   value:给这个变量赋值
   Scope:放在什么位置
   
   <c:set var="num" value="5" scope="page"></c:set>
   
if标签
test:接El表达式,如果结果为true执行标签体里面的东西

<c:if test="${num > 3}">
<h1>黑马程序员</h1>
</c:if>

if标签里面没有else功能
练习
判断session域对象中username的值是否等于itheima,如果是则显示欢迎登陆,否则显示用户名错误!

03_choose标签

更类似switch,可以有多个
choose标签按照顺序判断内部的when标签里面的test条件是否成立,如果有一个成立,结束choose标签.当choose里面所有的
when标签都不成立时候,则会执行otherwise里面的语句
  choose类似switch关键字 when类似case otherwise类似default 
<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循环
item:等待遍历的集合或者是数组对象 var:遍历的临时变量
<%
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
%>

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

MVC

01_开发模式

模式一
JSP + JavaBean
JSP 获取数据,封装数据,显示数据,控制流程跳转,处理业务逻辑
JavaBean 增删改查
模式二(MVC)
JSP + Servlet + JavaBean
v JSP 显示数据
C Servlet 获取数据,封装数据,传输数据(域对象),控制流程跳转,处理业务逻辑
M JavaBean 增删改查

    设计模式一共23种  大话设计模式 
MVC 做图形界面开发 经典模式  javaweb也是有用户界面的
开发3个阶段:1,只有Servlet 没有jsp 痛苦
2,抛弃Servlet,只用jsp 在jsp里面 操作数据库 操作xml 还要处理国际化 可读性非常的差
3,MVC+三层架构 各司其职 jsp擅长页面的输出 Servlet擅长逻辑判断 程序清晰

现实生活: 工商局 开一个公司    前台 填资料 后台 审核--负责整个流程 ---控制层    资料 ---模型model
模式二    MVC 和当年的javaweb的分层结合在一起   MVC+三层架构 java独有的
注意:  MVC 和 三层架构 不是同一个技术 

02_MVC三层架构


表示层
客户端(浏览器)
Servlet:获取数据,封装数据
jsp: 显示数据

业务逻辑层
service:处理业务逻辑

数据访问层
dao:增删改查
db:数据库

1,可以分工合作
每一个层依赖性比较低,可以实现解耦,分工明确,实现团队协作开发 
2,代码的重用性很高
    3,Struts Hibernate Spring 3大框架  其实对应着这3层
      Struts 表示层框架 也就是web层技术(处理乱码,封装数据,处理业务逻辑,实现页面跳转)
Hibernate 数据持久化 对应着我们的dao 以前jdbc自己写 完全面向对象 
Spring 业务逻辑层 核心技术 IOC(依赖注入) AOP(面向切面编程) 核心思想 解耦 通过配置文件 在运行的时候把对象注入进去
sun公司定义 
开发 首先创建javaBean对象 把数据封装到javaBean对象里面 web传输传输的是javaBean对象 

03_案例环境搭建

展示所有的学生信息
搭建环境
创建新的项目
导入相关的jar包
导入相关的工具类
导入相关的配置文件
准备数据库,表结构
模拟数据
开发
domain
servlet
service
dao
jsp
测试

04_案例环境实现



















猜你喜欢

转载自blog.csdn.net/qq_34118993/article/details/79773217