- JSP:
- 指令
- 注释
- 内置对象
- MVC开发模式
- EL表达式
- JSTL标签
- 三层架构
JSP
- 指令
- y作用:用于配置JSP页面,导入资源文件;
- 格式:<% 指令名称 属性名 = 属性值 %>
- page:配置jsp页面的
- contentType:等同于response.setContentType
- 设置响应体的mime类型以及字符集
- 设置当前jsp页面编码,(只能是高级的IDE才能生效)如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集
- langage="java" buffer="16kb"设置语言,设置缓冲区大小;
- import="java.util.List"导包的
- errorPage:当前页面发生异常后会自动跳转到指定的页面;
- isErrorPage:标识当前页面是否是错误页面;标注true可以使用exception对象来获得报错信息,标注false:否,默认值不可以使用内置对象exception对象
- contentType:等同于response.setContentType
- include:页面包含的。导入页面资源文件
<%@include file="logo.jsp"%>
- taglib:导入资源 prefix前缀,uri指定标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
前缀:prefix
uri 资源地址
- 注释:
- html注释``````
- jsp注释(推荐)
<%-- --%>
(两个注释的区别:jsp注释后页面客户端页面上不会有注释信息,而html会有)
- 内置对象
- pageContext 当前页面共享数据,获取其他9个内置对象
- request 一次访问的多个资源(转发)
- session 一次会话的多个请求间
- application 所有用户间共享数据
- response 响应对象
- page 当前页面的对象
- out 输出对象,数据输出到页面上
- config Servlet的配置对象
- exception 异常对象
MVC:开发模式
- jsp演变历史
- 早期只有servlet,只能使用response输出标签数据,非常麻烦
- 后来有jsp,简化Servlet的开发,如果过度使用jsp,在jsp中写大量的java代码,html白哦,Javascript代码,难以维护;
- 再后来java的web开发,借鉴MVC开发模式,使得程序的设计更加合理性;
- MVC:
- M:Model,模型:完成具体的业务操作,如:查询数据库,封装对象,javabean
- V:view,视图:展示数据 jsp
- C:Controller ,控制器:获取用户输入,调用模型,将数据交给视图进行展示;servlet
- 优缺点
- 有点:耦合性低,重用性高,方便维护,利于分工协作;
- 缺点:使得项目架构变得负责,对于开发人员要求高;
EL表达式
概念:Expression Language表达式语言
作用:替换和简化jsp页面中java代码的编写
语法:{表达式}```
使用:
- 运算:运算符:
- 算数运算符
+-*/(div) %(mod)
- 比较运算符:
<> >= <= == !=
- 逻辑运算符
||(or) &&(and) & | !(not)
- 空运算符:empty:功能用于判断字符串,集合数组对象是否为null并且长度为0,
{not empty list}
- 算数运算符
- 获取值
- el表达式只能从域对象中获取值
- 语法:${域名称.键名称}从指定域中,获取指定的键的值
域名称:1.pageScope-->pageContext
- requestScope->request
3.sessionScope-->session - applicationScope-->application(ServletContext)
举例:在request域中存储了name=张三
获取${requestScope.name},特点如果获取不到则不会打印任何内容- 语法2:${键名}:标识依次从最小的域中查找是否有该键对应的值,直到找到位置。
- 获取对象:list集合,map集合
- 对象获取 ${域名称.键名.属性名},本质上会去调用对象的getter方法
- list集合:${域名称.键名[索引]}
- Map集合:
{域名称.键名.["key名称"]}
隐式对象
el表达式中有11个隐式对象
pageContext:
获取jsp其他八个内置对象
${pageContext.request.contextPath}:动态获取虚拟目录;
JSTL
概念:javaServer Pages Tag Library JSP标准标签库,是由Apache组织提供的开源的免费的jsp标签
作用:用于简化和替换jsp页面上的java代码
使用步骤:
-
导入jstl相关jar包
-
引入标签库:taglib指令:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jst1/core" %>
-
使用标签
-
常用的JSTL标签
- if :相当于java代码的if语句,
- 属性:test 必须属性,截至boolean表达式
- 如果表达式为true则展示白哦前提内容,如果为false则不展示标签体内容
- 一般情况下,test属性会结合el表达式一起使用
- 注意注意他没有else如果想要则需要在定义c:if标签
- choose:相当于java的switch的语句
- choose相当于switch声明
- 使用when标签做出判断,相当于case
- otherwise标签做其他情况的声明,相当于default
- foreach:相当于java的foreach循环的语句
- 完成重复的操纵
for(int i=0;i<10;i++){ } 属性: begin:开始值 end:结束值 var:临时变量 step:步长 varStatus:循环状态对象 index:容器中元素的索引从0开始 cont:循环次数从1开始
定义成JSTL
<c:forEach begin="1" end="10" var="i" step="1"> ${i}<br> </c:forEach>
-
遍历容器
List<User> list; for(User user:list){ } 属性: items:容器对象 var容器中元素的临时变量 varStatus循环状态对象 index容器中元素的索引,从0开始 count循环次数,从1开始
定义成JSTL
<c:forEach items="${list}" var="str" varStatus="s"> ${s.index}${s.count}${str}<br> </c:forEach>
- if :相当于java代码的if语句,
-
练习
- 需求:在request域中有一个存有User对象的LIST集合。需要使用jstl+el价格呢list集合数据展示到jsp页面的表格table中
<%@ page import ="java.util.Date"%>
<%@ page import ="java.util.ArrayList"%>
<%@ page import ="java.util.List"%>
<%@ page import ="dao.User"%>
<%@ page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8" errorPage="500.jsp"%> <!-- 声明出错处理的文件为error.jsp -->
<%@ include file="logo.jsp"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
List list=new ArrayList();
list.add(new User("张三",23,new Date()));
list.add(new User("李四",11,new Date()));
list.add(new User("王五",22,new Date()));
request.setAttribute("list",list);
%>
<h1>el获取值</h1>
<table border="1" width="500" align="center">
<tr><th>编号</th><th>姓名</th><th>年龄</th><th>生日</th></tr>
<c:forEach items="${requestScope.list}" var="user" varStatus="s">
<c:if test="${s.count % 2 != 0}">
<tr bgcolor="red">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
<c:if test="${s.count % 2 == 0}">
<tr bgcolor="green">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>
网友评论