学习jsp、EL表达式、JSTL标签
虽然它们,现在几乎看见了,但是还是值得学习的
一、JSP三大指令
标准指令: 设定JSP网页的整体配置信息
特点:
并不向客户端产生任何输出,
指令在JSP整个文件范围内有效
为翻译阶段提供了全局信息
指令的语法格式:
<%@ 指令名称 属性名=“属性值” 属性名=“属性值” …%>
1.page指令
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
page指令: 表示JSP页面相关的配置信息
常用属性:
language: 表示在JSP中编写的脚本的语言.(只能是java)
contentType: 表示JSP输出的MIME类型和编码.等价于 response.setContentType(“text/html;charset=utf-8”);
pageEncoding: 表示JSP输出的编码;等价于response.setCharacterEncoding(“utf-8”);
import: 用于导入JSP脚本中使用到的类,等价于Java代码中的: import 类的全限定名;
注意:一个import属性可以导入多个包,用逗号分隔。
errorPage: 指示当前页面出错后转向(转发)的页面。目标页面如果以"/"(当前应用)就是绝对路径。
iserrorpage:是否把这个页面作为错误页面,标志完,该页面就可以用exception这个内置对象,exception.getMessage()
2.include(包含)指令
静态包含: 使用JSP的include指令
<% @include file=“被包含的页面文件” %>
特点:在翻译阶段就已经把多个JSP,合并在一起,最终翻译得到一个java文件
动态包含: 使用JSP的动作指令
<jsp: include page=“被包含的页面文件” />特点:把每一个JSP都翻译成Servlet类,在运行时期,动态的合并在一起,最终得到多个java文件
动态包含和静态包含的选择:
如果在包含的时候,需要传递数据,此时只能使用动态包含.(
如果被包含的页面如果是静态页面,那么使用静态包含
如果被包含的如果是动态页面,那么使用动态包含
注意:在实际开始中通常将被包含的jsp页面的后缀名设置为jspf.
3.taglib(标签库)指令
- 作用:引入外部的标签
- 语法:<%@taglib uri=“标签名称空间” prefix=“前缀”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
二、九大内置对象
名称 | 类型 | 描述 |
---|---|---|
request | HttpServletRequest | 请求对象 |
response | HttpServletResponse | 响应对象 |
session | HttpSession | 会话对象(page指令:session=“true”) |
application | ServletContext | 当前web应用对象 |
pageContext | PageContext | 当前的JSP作用域对象,可以获取其他八个内置对象 |
exception | Throwable | 异常对象(page指令:isErrorPage=“true”) |
config | ServletConfig | 当前JSP的配置对象 |
out | JspWriter | 字符输出流输出流对象 |
page | Object | 当前Servlet对象 |
三、MVC开发模式
1.jsp演变历史
1).早期只有servlet,只能使用response输出标签数据,非常麻烦
2).后来有了jsp,简化了servlet的开发,但如果过度使用Jsp,在jsp中写入大量java代码,造成难以维护,难于分工
3).再后来,java的web开发借鉴了MVC开发模式,使程序的设计更加合理性
2.MVC
1).M: Model, 数据模型对象(JavaBean)
- 业务逻辑操作
2).V: View, 视图界面(JSP, UIView, Window)
- 展示数据
3).C: Controller, 控制器(Servlet)
- 获取客户端输入
- 调用模型,进行业务操作
- 将数据交给视图展示
3.优缺点
- 耦合性低,方便维护,可以利于分工维护
- 重用性高
- 使得项目架构变得复杂,对开发人员要求较高
四、EL表达式
1.概念
表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中输 出脚本的编写
2.EL表达式的格式和作用
EL表达式的格式:
${EL表达式内容}
相当于 ${} 替代 <%%>
EL表达式的作用:
1).从域对象中查找指定的数据。
EL中提供 域对象对应的对象
域对象 | EL中对应的对象 |
---|---|
pageContext | pageScope |
request | requestScope |
session | sessionScope |
application | applicationScope |
<!--
${xxxScope.keyName}
${xxxScope["keyName"]}
简化格式: ${keyName}
-->
<body>
<%
request.setAttribute("name1","HQ");
session.setAttribute("name2","WNB");
%>
${requestScope.name}<br>
${sessionScope.name1}<br>
${name1}<br>
${name2}<br>
</body>
2).EL获取List集合中的数据
<%
ArrayList arrayList = new ArrayList();
arrayList.add("hq");
arrayList.add("wnb");
request.setAttribute("list",arrayList);
%>
${requestScope.list}<br>
${requestScope.list[0]}<br>
${requestScope.list[1]}<br>
${list[0]}<br>
${list[1]}<br>
3).EL获取Map集合中的数据
<%
HashMap hashMap = new HashMap();
hashMap.put("name1","HQ");
hashMap.put("name2","WNB");
request.setAttribute("map",hashMap);
%>
${requestScope.map.name1}<br>
${requestScope.map.name2}<br>
${map.name1}<br>
${map.name2}<br>
${map["name1"]}<br>
${map["name2"]}<br>
4).EL获取对象中的数据
<%
Student student = new Student();
student.setId(1);
student.setName("HQ");
request.setAttribute("student",student);
%>
${requestScope.student}<br>
${requestScope.student.name}<br>
${student.name}<br>
${student.birthday}<br>
5).内置对象使用
requestScope,sessionScope类似于内置对象,但不是
这里可以用pageContext来获取其他八大内置对象
${pageContext.request}
${pageContext.request.contextPath}
6).执行运算符
比较简单这里只讲空运算符empty
用于判断字符串、数组、集合是否为NULL或者长度是否为0
如果为空或者长度为0,那么就是true
${empty list}
${not empty list}
五、JSTL
1.概念
JSTL标签库 全称是指 JSP Standard Tag Library JSP标准标签库。是一个不断完善的开放源代码的JSP标签库。
EL表达式主要是为了替换jsp中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个jsp页面变得更佳简洁。
2.使用
1.导入jstl相关jar包
2.引入标签库:taglib指令引入:<%@ taglib %>
3.使用标签
1).if
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
test 传一个boolean类型的表达式
如果为true就显示标签体内容
如果为false就不显示标签体内容
没有else情况,需要的话再if
--%>
<c:if test=""></c:if>
</body>
2).foreach
<c:forEach items="${list}" var="name" varStatus="s">
${name} ${s.index} ${s.count}<br>
</c:forEach>
六、三层架构
1.表示层:又称为 web层,用户用上面的组件进行数据交互的。
2.业务逻辑层:又称为service层,相当于对dao层的增强,专门用于处理业务数据的。
3.数据访问层:又称为dao层,与数据库进行数据交换的。最简单的CURD,将数据库的一条记录与JavaBean进行对应。