1.JSP:动态网页(就是在html中嵌套java代码)
动态网页:随着 时间、地点、用户操作的改变而改变,使用到服务端脚本语言(JSP)
2.JSP页面元素:HTML、java代码(脚本Scriptlet)、指令、注释
页面脚本
1.
<%
局部变量、java语句(编译后:service方法中)
%>
2.
<%!
全局变量、定义方法(编译后:Servlet成员变量位置)
%>
3.
<%= 输出表达式 %>
指令
1.page指令
<%@ page contentType="text/html;charset=UTF-8" language="JSP页面使用的脚本语言" import="导入类" %>
2、taglib指令
作用:导入标签库
语法:<%@taglib uri="文件的uri名称" prefix="前缀(简写)"%>
3、include指令
作用:在当前页面用于包含其他页面
语法: <%@include file="common/header.jsp%>
注释
html注释<!-- -->
java注释// /**/
jsp注释<%-- --%>
3.jsp执行流程:
jsp ->java(Servlet文件) ->class
4.JSP九大内置对象:
内置对象:在jsp中,不需要创建,可以直接使用的对象
5.JavaBean(Java类)
定义:(满足以下两点)
1.public修饰的类,含有public无参构造函数
2.所有属性都是private,并提供set/get。
作用:
1.减轻jsp的复杂度
2.提高代码的复用度
使用层面分为两大类:
1.封装业务逻辑的JavaBean(登录逻辑 LoginDao.java 等) 可以将jsp中的JDBC代码,封装起来。
2.封装数据的JavaBean(实体类,Student.java Person.java) 对应于数据库中的一张表。
6.通过MVC设计模式了解JavaBean
M: Model 模型 (负责各个功能) javaBean
V: View 视图 (负责页面的显示,以及与用户的交互) html/css/js/jsp
C: Controller 控制器 (接受请求,将请求跳转到模型进行处理,模型处理完毕后,再将处理的结果返回给请求处) Servlet/jsp
7.三层架构
与MVC设计模式的目标一致:都是为了解耦合、提高代码复用;
区别,二者对项目的理解的角度不同。
1.三层组成:
表示层(USL):视图层
- 前台:对应于MVC中的View,用于和用户交互、界面的显示(html/css/js/jsp)
- 后台:对应于MVC中的Controller,用于控制跳转、调用业务逻辑层(Servlet/SpringMVC/Struts2 位于servlet包)
业务逻辑层(BLL):service层
- 组装数据访问层,逻辑性的操作(增删改查 位于service包) eg:删:查+删
数据访问层(DAL):dao层
- 直接访问数据库的操作,原子性的操作(增删改查 位于dao包)
2.三层间的关系:
上层将请求传递给下层,下层处理后返回给上层。
上层依赖于下层(上层持有下层成员变量,有上层的前提必须有下层)
3.三层优化
- 加入接口
建议面向接口开发:先接口-再实现类
- service、dao加入接口
- 接口与实现类的 命名规范
接口:interface IXxxService、IXxxDao
实现类:implements XxxServiceImpl、 XxxDaoImpl
使用接口/实现类时。推荐写法
接口 x=new 实现类();
- DBUtil 通用的数据库帮助类,可以简化Dao层的代码量
8.EL: 表达式语言,可以替代JSP页面中的java代码
传统的 在JSP中用java显示数据的弊端:类型转换、需要处理null、代码参杂-->EL
- EL示例:
${requestScope.student.address.schoolAddress}<br>
${域对象.域对象中的属性.属性.级联属性}<br>
- EL操作符
点操作符 . -- 使用方便
中括号操作符 [""] -- 功能强大:可以包含特殊字符(. 、 -),获取变量值
获取map属性
Map<String,Object> map=new HashMap<>();
map.put("cn","中国");
map.put("us","美国");
request.setAttribute("map",map);
${requestScope.map.cn}
isEmpty运算符:判断一个值存在不存在。
- EL表达式的隐式对象(内置对象)
- 作用域访问对象
pageScope requestScope sessionScope sessionScope applicationScope
如果不指定域对象,则默认会根据从小到大的顺序,依次取值
- 参数访问对象:获取表单数据。
${param.xxx}
${paranValues.xxx[]}
- JSP隐式对象 : pageContext
${pageContext.xxx} 通过pageContext间接获取jsp的隐式对象。
9.JSTL:比EL更强大
1.引入两个jar包:jstl.jar standard.jar
2.引入taglib <%@ taglib uri="...core"> prefix="c" %>
。。。。。。。。。