MVC开发模式
1.jsp演变历史
1.只有servlet,只能通过response输出标签数据,非常麻烦
2.后来有了jsp,简化了servlet的开发,但是过度使用jsp导致jsp写了大量的java代码又写html标签,造成难于维护
3.后来,java的web开发,借鉴了mvc的开发模式,使得程序的设计更加合理性
2.MVC:
1.M:Model
2.V:View
3.C:Control
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LkEwJzzh-1582618879182)(…/web.assets/ac6eddc451da81cb26660e7e5066d01608243184.gif)]
最典型的MVC就是JSP + servlet + javabean的模式
优点:
耦合性低
重用性高
生命周期成本低
缺点:
不适合小型,中等规模的应用程序
花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
EL表达式
1.概念:Expression Language表达式语言
2.作用:替换和简化jsp页面中的java语句
3.语法:$(表达式)
4.注意:
* 忽略jsp中的EL可以page指令中设置iRLIgnore=“true”忽略当前的jsp页面中的所有sl表达式
* \ $(表达式) 忽略这个
5.算术
术语 | 定义 |
---|---|
算术型 | +、-(二元)、*、/、div、%、mod、-(一元) |
逻辑型 | and、&&、or、||、!、not |
关系型 | ==、eq、!=、ne、<、lt、>、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。 |
空 | empty 空操作符是前缀操作,可用于确定值是否为空。 |
条件型 | A ?B :C。根据 A 赋值的结果来赋值 B 或 C。 |
6.获取数据
术语 | 定义 |
---|---|
pageScope | 将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象,还可以使用 ${pageScope .objectName. attributeName} 访问对象的属性。 |
requestScope | 将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 ${requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScope. objectName. attributeName} 访问对象的属性。 |
sessionScope | 将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如:${sessionScope. name} |
applicationScope | 将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。 |
实例:
<%
request.setAttribute("name","zhangsan");
HttpSession session1 = request.getSession();
session1.setAttribute("number",7989);
%>
${requestScope.name}
${sessionScope.number}
获取值顺序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u6OlyIOi-1582618879185)(…/web.assets/image-20200212220956374.png)]
7.获取对象、集合、map
对象
<%
User user=new User();
request.setAttribute("u",user);
%>
${u.name} <!--就是调用u.getName()方法-->
${u.age}
${u.birthday}
本质上是在调用对象的getter方法
List集合&Map集合
省略了请求域
<%
User user=new User();
request.setAttribute("u",user);
%>
<%
List list=new ArrayList();
list.add("hello");
list.add(user);
Map map=new HashMap();
request.setAttribute("list",list);
map.put("name","张三");
map.put("age",78);
map.put("use",user);
request.setAttribute("map",map);
%>
对象<br>
${u.name}<br>
${u.age}<br>
${u.birthday}<br>
list<br>
list${list}<br>
list[0]${list[0]}<br>
list[1]${list[1]}<br>
list[10]${list[10]}<br>
list[1].name${list[1].name}<br>
<br>
map<br>
map.name${map.name}<br>
map.age${map.age}<br>
map.use.birthday${map.use.birthday}<br>
<%
String str1="String";
String str2=null;
String str3="";
request.setAttribute("str1",str1);
request.setAttribute("str2",str2);
request.setAttribute("str3",str3);
%>
empty<br>
${empty str1}<br>
${empty str2}<br>
${empty str3}<br>
str1为null或者为""时返回true
8.隐式对象
- el表达式中有11个隐式对象
- 和jsp中的内置对象使用相同,只是jsp通过方法返回参数值,el表达式通过属性调用对象的getter方法
- pageContext获取jsp其他8个内置对象
<script>
window.onload=function(){
var img= document.getElementById("checkCode");
img.onclick=function(){
var date =new Date().getTime();
img.src="${pageContext.request.contextPath}/checkCodeImagServlet?"+date;//***
}
}
</script>
JSPL
Java server pages standarded tag library,即JSP标准标签库
作用:
EL 的出现就是为了简化js中的java代码,简化的方面主要是取值得阶段,相关逻辑功能,el是不能实现的。
jspl送js标准标签库,可以在jsp页面中使用标签的形式完成业务逻辑的功能。
jspl出现的目的主要是想代替jsp页面中的脚本代码,他有五个库,其中最核心的是core库,简化是c。
使用步骤:
- 导入jstl相关的jar包
- 引入标签库:taglib指令
- 使用标签
常用的JSTL标签
if :相当于java的if语句
choose :相当于java中的switch语句
foreach :相当于for语句
JSTL 库安装
Apache Tomcat安装JSTL 库步骤如下:
从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。
官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
本站下载地址:jakarta-taglibs-standard-1.1.2.zip
下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。
JSTL的使用:
< c:if > 标签
<c:if test="true">
没有问题
</c:if>
choose标签
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
<c:when test="${number==1}">星期一</c:when>
<c:when test="${number==2}">星期二</c:when>
<c:when test="${number==3}">星期三</c:when>
<c:when test="${number==4}">星期四</c:when>
<c:when test="${number==5}">星期五</c:when>
<c:when test="${number==6}">星期六</c:when>
<c:when test="${number==7}">星期日</c:when>
<c:otherwise>输入错误</c:otherwise>
</c:choose>
foreach
<c:forEach var="str" begin="5" end="673" step="75" varStatus="s">
<br>${str},${s.index},${s.count}<br>
</c:forEach>
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
items | 要被循环的信息 | 否 | 无 |
begin | 开始的元素(0=第一个元素,1=第二个元素) | 否 | 0 |
end | 最后一个元素(0=第一个元素,1=第二个元素) | 否 | Last element |
step | 每一次迭代的步长 | 否 | 1 |
var | 代表当前条目的变量名称 | 否 | 无 |
varStatus | 代表循环状态的变量名称 | 否 | 无 |
实例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="com.el.User" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
List list = new ArrayList();
list.add(new User("张三",34,new Date()));
list.add(new User("李四",44,new Date()));
list.add(new User("lili",54,new Date()));
list.add(new User("哈哈",87,new Date()));
request.setAttribute("list",list);
%>
<table border="1" width="500" align="center">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>生日</th>
</tr>
<c:forEach items="${list}" var="var" varStatus="v">
<tr>
<th>${v.count}</th>
<th>${var.name}</th>
<th>${var.age}</th>
<th>${var.birthday}</th>
</tr>
</c:forEach>
</table>
实例:
<%
List list = new ArrayList();
list.add(new User("张三",34,new Date()));
list.add(new User("李四",44,new Date()));
list.add(new User("lili",54,new Date()));
list.add(new User("哈哈",87,new Date()));
request.setAttribute("list",list);
%>
<table border="1" width="500" align="center">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>生日</th>
</tr>
<c:forEach items="${list}" var="var" varStatus="v">
<tr bgcolor="${(v.count mod 2)==0?"#8987":"blue"}">
<th>${v.count}</th>
<th>${var.name}</th>
<th>${var.age}</th>
<th>${var.birthday}</th>
</tr>
</c:forEach>
三层架构
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJwe8MJR-1582618879189)(…/web.assets/image-20200213223254759.png)]
- 需求
- 设计:
1.技术选型:
2.数据库的设计:
3.开发:-
环境搭建
1.创建数据库环境
2.创建项目,导入需要的jar包 -
编码
-
4.测试
5.部署运维
实例:用户数据查询
构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)
[外链图片转存中…(img-rJwe8MJR-1582618879189)]
- 需求
- 设计:
1.技术选型:
2.数据库的设计:
3.开发:-
环境搭建
1.创建数据库环境
2.创建项目,导入需要的jar包 -
编码
-
4.测试
5.部署运维
实例:用户数据查询
[外链图片转存中…(img-v5KKSFp4-1582618879190)]
javabean