https://github.com/Lannister-never-pay/JavaWebLearning/tree/main/java1108
因为懒,还是用的1108的module
JSP
-
指令
-
作用:用于配置JSP页面,导入资源文件
-
格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 %> 多个键值对用空格隔开
-
分类:
-
page :配置JSP页面
- contype:等同于response.setContype()
- 设置响应体的mime类型已经字符集
- 设置jsp当前页面的编码,高级开发工具可以自动读取contentType里面的编码,低级开发工具用pageEncoding
- language:目前只有java
- import:导入包,一个包一行比较好
- errorPage:报错后所需要跳转的错误页面
- isErrorPage:标识符,是否是错误页面
- True: 可以使用内置对象exception
- false:默认值,不可以使用内置对象
- contype:等同于response.setContype()
-
include (基本用不到):页面包含的,导入页面的资源。(页面重复的内容可以直接引入页面)
-
<%@include file="top.jsp"%>
-
-
Tagline:导入资源(导包)
-
-
-
注释(有两种)
- html注释:<!-- --> 只能注释html代码段
- jsp注释: <%-- --%>
-
内置对象:jsp页面中不需要创建就可以直接用的对象,9个
-
对象名称 真实类型 作用 pageContext:(域对象) PageContext 当前页面共享数据,还可以获取其他八个对象 request:(域对象) HttpServletRequest 一次请求访问的多个资源(转发) session:(域对象) HttpSession 一次会话的多个请求间 application:(域对象) ServletContext 所有用户间共享数据 response: HttpServletResponse 响应对象 page: Object 当前页面(servlet)的对象 out: JspWriter 输出对象,数据输出到页面上 config: ServletConfig Servlet的配置对象 exception: Throwable 异常对象
-
MVC开发模式
- jsp演变历史
- 早期只有servlet,只能使用response输出标签数据,非常麻烦
- 后来有了jsp,简化了servlet的开发,导致人们大量使用,很难维护,可读性非常差
- MVC:降低了耦合度
- M:model,模型 JavaBean
- 完成具体的业务操作,如数据查询,封装对象
- V:view,视图 Servlet
- 展示数据
- C:Controller,控制器 JSP
- 获取用户的输出(请求参数)
- 调用模型
- 将数据交给视图层展示
- 优缺点:
- 优点:
- 耦合性低,方便维护,利于分工协作
- 重用性高,可以同时展示给多个视图层
- 缺点:
- 使得项目架构变得复杂,对开发要求较高。
- 优点:
- M:model,模型 JavaBean
EL表达式
-
概念:Expression Language 表达式语言
-
作用:替换和简化jsp页面中java代码的编写
-
语法:${表达式}
-
注意:jsp默认支持el表达式
- 如何忽略表达式,原样展示:
- 在指令标签里面:isELIgnored = true
- 或者前面加个反斜杠 \
- 如何忽略表达式,原样展示:
-
使用情景:
-
运算:
- 运算符:
- 算术运算符 : + - * /(div) %(mod)
- 比较运算符:>、 <、 >=、 <=、 !=
- 逻辑运算符:&&(and) ||(or) !(not)
- 空运算符:empty
- 用于判断字符串、集合、数组对象是否为null并且长度是否为0
- ${empty list} 如果想让这个表达式返回值为true则:list要么为null要么长度为0
- 运算符:
-
获取值:
-
el表达式只能从域对象(4个)中获取值
-
语法:
-
${域名称.键名称}:从指定域中获取指定键的值
- 域名称:有哪些?
- pageScope: --> pageContext
- requestScope: --> request
- sessionScope: --> session
- applicationScope: --> application(ServletContext)
- 举例:在reuqest域存储了name=章北海
- 获取:${requestScope.name}
- 注:如果是空字符串也不会输出none
- 域名称:有哪些?
-
${键名}:依次从最小的域中查找是否存在该键值对应的值,直到找到为止。
- page < request < session < application
-
获取对象、List集合、Map集合的值
-
直接打印的话,默认是打印该对象的toString方法,如果没有就输出其引用地址
-
对象:通过的是对象的属性来获取,属性就是get和set方法后面的部分小写的部分,不一定是成员变量名.
-
List集合:${域名称.键名[索引]}
- 内部优化:如果数组越界,只会给出空字符串
-
Map集合: ${域名.键名.key名称} 或者 ${域名.键名[“key名称”]}
-
-
-
-
空运算符empty
- ${empty list}:如果想让这个表达式返回值为true则:list要么为null要么长度为0
- ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度 > 0
-
隐式对象:
- el表达式中不要创建直接拿来用的对象,有11个
- pageContext:
- 获取jsp其他八个内置对象
-
JSTL标签
- 概念:JavaServer pages Tag Library JSP标准标签库
- 是有Apache组织提供的开源的免费的jsp标签 <标签>
- 作用:用于简化和替换jsp页面上的java代码
- 使用步骤:
- 导入jar包:
- 引入标签库:taglib指令:
看了半天,跟着敲了半天感觉太枯燥了,jsp相关的东西实在是没啥用,爷不学了
三层架构
软件设计架构:
- 界面层(表示层):用户看到的界面。用户可以通过界面上的组件和服务器进行交互。
- 业务逻辑层:处理业务逻辑的。
- 数据访问层(持久化层):操作数据存储文件