JSP和MVC,EL表达式,JSTL标签,三层架构
JSP和MVC,EL表达式,JSTL标签,三层架构
1. JSP
1. 指令
1. 格式:<%@ 指令名称 属性名 = 属性值%>
2. 分类:
1. page:设置contentType;pageEncoding;language;buffer;import;errorPage;isErrorPage
2. include:页面中包含的资源页面,共有组件
3. taglib:包含的库文件;<%@ taglib prefix="c" uri="uri" %>
2. 注释
- html注释在html源码中会显示
- jsp注释<%-- --%>在html源码中不会显示
3. 内置对象
1. pageContext对应PageContext
2. request对应HttpServletRequest
3. session对应HttpSession
4. application对应ServletContext
5. response对应HttpServletResponse
6. page对应Object
7. out对应JspWriter
8. config对应ServletConfig
9. exception对应Throwable
2. MVC
-
jsp演变历史:
- 早期只有Servlet,只能使用response输出标签数据,比较麻烦
- 后来有了JSP,简化了Servlet开发方式,但是造成代码复杂,可读性、可维护性差
- JavaWeb开发借鉴MVC开发模式让,程序的设计更加合理
-
什么是MVC开发模式?
-
M odel:JavaBean
完成具体业务操作,例如查询,封装对象
-
V iew:JSP
展示数据
-
C ontroller:Servlet
- 获取用户输入
- 调用模型
- 将数据返回给视图展示
-
-
优缺点
- 优点:方便维护,利于分工协作,耦合性低(模块相互联系紧密程度)
- 缺点:使得项目架构复杂,不适合小型项目
3. EL表达式
- 概念:Expression Language 表达式语言
- 作用:替换和简化JSP页面中Java代码的编写
- 语法:$
- 注意:浏览器默认开启EL功能,关闭需要在头中使用isELIgnored属性,或者直接在元素前加\转义字符
- 具体:
- 运算
- 算术
- 比较
- 逻辑 and or not
- 空 empty 判断对象是否空,长度是否为0
- 获取值
- 注意事项:只能从域对象中获取值
- 语法:
- ${field.keyname} 在指定域中获取指定值
- pageScope--->pageContext
- requestScope--->request
- sessionScope--->session
- applicationScope--->application / ServletContext
- ${keyname} 依次从最小的域中查找,直到找到为止
- 如果keyname只是一个Object类型,直接用keyname.value,可以调用其get方法找到值
- List:listname[index]
- Map:mapname.name or mapname[name]
- empty和not empty:判断字符串,集合,数组是否空,长度是否为0
- 11个隐式对象
- pageContext 可以用来获取JSP其他的内置对象
- ${field.keyname} 在指定域中获取指定值
- 运算
4. JSTL标签
-
下载链接:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
-
概念:Java Server Pages Tag JSP标准标签库
-
作用:简化和替换JSP页面上的Java代码
-
使用方法:
- 导入jstl的jar包
- 引入标签库:taglib <% @ taglib %>
- 使用
-
常用的JSTL标签
-
if
<c:if test="true"> <p>我是c:if块</p> </c:if>true为表达式,if没有else配对,如果需要分别两种情况只能再写一个if
-
choose
<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>c:choose 可以和c:otherwise联合一起用
-
foreach
简单循环
<c:forEach begin="1" end="10" var="i" step="1"> ${i}<br> </c:forEach>begin初始值,end结束值,var临时变量,step步长,varStatus.index当前标,varStatus.count循环次数
遍历容器
<c:forEach items="${list}" var="str" varStatus="s"> ${s.index}---${s.count}---${str} <br> </c:forEach>items容器对象,var临时变量,varStatus.index,varStatus.count同上
-
-
练习
-
需求:在request中存在一个User对象的list集合,使用jstl和el展示到表格中
-
代码:
package com.fmpee.user; public class User { private int uid; private String name; private String gender; private String tel; public User(int uid, String name, String gender, String tel) { this.uid = uid; this.name = name; this.gender = gender; this.tel = tel; } public User() { } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } }<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> <%@ page import="com.fmpee.user.User" %><%-- Created by IntelliJ IDEA. User: lijie Date: 2020/4/29 Time: 12:31 --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>list</title> </head> <body> <% List list=new ArrayList(); list.add(new User(100,"lijie","m","12345678901")); list.add(new User(101,"lijie","m","12345678901")); list.add(new User(102,"lijie","m","12345678901")); list.add(new User(103,"lijie","m","12345678901")); list.add(new User(104,"lijie","m","12345678901")); request.setAttribute("list",list); %> <table border="1" width="500" align="center" style="text-align: center"> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>电话</th> </tr> <c:forEach items="${list}" var="user" varStatus="s"> <c:if test="${s.count mod 2 ==0}"> <tr bgcolor="#f0f8ff"> <td>${user.uid}</td> <td>${user.name}</td> <td>${user.gender}</td> <td>${user.tel}</td> </tr> </c:if> <c:if test="${s.count mod 2 ==1}"> <tr> <td>${user.uid}</td> <td>${user.name}</td> <td>${user.gender}</td> <td>${user.tel}</td> </tr> </c:if> </c:forEach> </table> </body> </html>
-
5. 三层架构
-
概念:一种软件设计架构
-
分层:
- 界面层:用户界面 web 框架:SpringMVC
- 业务逻辑层:处理业务逻辑 service 框架:Spring(集大成者)
- 数据访问层:操作数据存储文件 dao 框架:Mybatis
-
案例:用户信息列表查询展示
-
需求:用户信息的增删改查
-
设计:
-
技术选型:Servlet 、JSP、MySQL、JDBCTemplate、Duird、BeanUtils、Tomcat
-
数据库设计:
create database user; use user; create table user( id int primary key auto_increment, name varchar(20) not null, gender var(2), age int, address varchar(32), qqnum varchar(20), email varchar(30) ); -
开发:
- 环境搭建:
- 创建功能键数据库环境
- 创建项目,导入依赖
- 编码
- 环境搭建:
-
测试
-
部署运维
-
-
代码流程
- 首先创建数据库并导入数据
- 创建数据实体类,定义get和set方法
- 创建dao包,用来处理数据操作,首先定义接口,然后再去impl子路径实现接口方法
- 创建service包,处理业务逻辑
- 创建servlet包,设置页面数据
-
本人文章禁止转载,博客地址:https://www.cnblogs.com/lijiext

浙公网安备 33010602011771号