JSP, MVC, El, JSTL, MAC

二刷 2024年12月1日 星期天

目录

[一: JSP](#一: JSP)

[1.1 基本概念](#1.1 基本概念)

[1.2 JSP的脚本](#1.2 JSP的脚本)

[1.3 JSP的内置对象](#1.3 JSP的内置对象)

[1.4 JSP指令](#1.4 JSP指令)

[1.5 JSP注释](#1.5 JSP注释)

[二: MVC 开发模式](#二: MVC 开发模式)

三:EL表达式

四:JSTL

[五:MAV 三层架构](#五:MAV 三层架构)


一: JSP

1.1 基本概念

  • JavaServer Pages:java服务器端页面

可以理解为:一个特殊的页面,其中既可以指定定义html标签,有可以定义java代码

  • 作用:用于简化书写

  • 如果我们要在页面正常显示中文,我们需要在 JSP 文件头部添加以下代码:

java 复制代码
  <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

1.2 JSP的脚本

------ JSP定义Java代码的方式

<% 代码 %>:定义的Java代码,在service1方法中。service方法中可以定义什么,该脚本就可以定义什么。
<%! 代码 %>:定义的Java代码,在jsp转换后的java类的成员位置(定义成员方法、成员变量...... )。
<%= 代码 %>:定义的Java代码,会输出在页面上,servlet类中输出语句可以定义什么,该脚本就可以定义什么。

1.3 JSP的内置对象

------ 在jsp页面中不需要获取和创建,可以直接使用的对象,一共有9个。

|-------------|---------------------|------------------------|
| 变量名 | 真实属性 | 作用 |
| pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
| request | HttpServletRequest | 一次请求访问的多个资源(转发) |
| session | HttpSession | 一次会话的多个请求间 |
| application | ServletContext | 所有用户间共享数据 |
| response | HttpServletResponse | 响应对象 |
| page | Object | 当前页面(Servlet)的对象 this |
| out | JspWriter | 输出对象,数据输出到页面上 |
| config | ServletConfig | Servlet的配置对象 |
| exception | Throwable | 异常对象 |

其中三个:

  1. request

  2. response

  3. out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似

response.getWriter()和out.writer()的区别:

在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据

response.getWriter()数据输出永远再out.writer()之前。

1.4 JSP指令

  1. 作用:用于配置JSP页面,导入资源文件

  2. 格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值3 ... %>

  3. 分类:

  • page : 配置JSP页面的

* 相关属性名:

  1. import: 导包

  2. contentType: 等同于response.setContentType(),

I. 设置响应体的mine类型以及字符集

II. 设置当前jsp页面的编码(只能是高级工具才有效,否则需要pageEncoding属性来设置当前页面的字符集)

  1. errorPage:当页面发生异常后,会自动跳转到指定的错误页面。

  2. isErrorPage:标识当前页面是否是错误页面,默认false,不可以使用内置对象exception

- include : 页面包含的。导入页面的资源文件

<%@include file="xxx.jsp"%>

- taglib : 导入资源

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

*prefix:前缀属性,属性值自定义

1.5 JSP注释

<%-- 注释内容--%>

(注:可以注释掉任何类型的内容)

二: MVC 开发模式

2.1. jsp演变历史:

  • 早期只有Servlet,只能使用response输出标签数据,非常麻烦

  • 后来有jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中将会写大量的代码,会造成难以维护,难于分工协作

  • 再后来,java的web开发,借鉴MAC开发模式,使得程序设计更加合理性

2.2. MAC:

-M: Model,模型,JavaBean类

完成具体的业务操作,如:查询数据库类,封装对象

  • V: View,视图, JSP页面

展示数据

  • C : Controller,控制器,Servlet类

获取用户的输入

调用模型

将数据交给视图进行展示

2.3. 优点:耦合性低,方便维护,有利于分工协作,重用性高

2.4. 缺点:使得项目架构变得复杂,对开发人员要求提高了

三:EL表达式

3.1. 概念:Expression Language 表达式语言

3.2. 作用:替换和简化jsp页面中java代码的编码

3.3. 语法:${表达式}

3.4. 注意:jsp默认支持EL表达式,但也可以进行设置成不支持

法一:设置jsp中page指令:**isELIgnored="true"**忽略当前jsp页面所有的EL表达式

法二:\${表达式}:忽略当前这个EL表达式

3.5. 使用:

  • 运算符:
  1. 算术运算符:+ - * /(div) %(mod)

  2. 比较运算符:> < >= <= == !=

  3. 逻辑运算符:&&(and) ||(or) !(not)

  4. 空运算符: empty

功能: 用于判断字符串、集合、数组对象是否为null,并且长度是否为0

${empty list} --> 不为空则为false

反向判断:${not empty list} --> 为空则为false

  • 获取普通键值:
  1. 语法1:${域名称.键名}

  2. 说明:从指定域中获取指定键的值

  3. 举例:在request域中存储了name=张三,即:${requestScope.name}

域名称:

pageScope --> pageContext

requestScope --> request

sessionScope --> session

applicationScope --> application(ServletContext)

  1. 语法2:${键名}:表示依次从最小的域中查找是否有对应的值,知道找到为止
  • 获取对象的值:`${域名称.键名.属性名} `

本质上会去调用对象的getter方法

setter或getter方法,去掉set或get,再将剩余部分色首字母改为小写

setAge --> Age --> age

  • 获取List集合里的值:`${域名称.键名[索引]}`

如果索引越界,在EL表达式中则会特别处理,不会报错,而是什么都不显示

  • 获取Map集合里的值:`{域名称.键名\["key名称"\]}**\` 或 \`**{域名称.键名.key名称} `

  • 隐式对象:EL表达式中有11个隐式表达式

pageContext: 用来获取jsp其它八个内置对象

${pageContext.request.contextPath} --> 动态获取虚拟路径

(剩下的自行了解)

四:JSTL

4.1. 概念:JavaScript Pages Tag Library JSP标准标签库

是由Apache组织提供的开源的免费的jsp标签

4.2. 作用:用于简化和替换jsp页面上的java代码

4.3. 使用步骤:

4.4. 常用的JSTL标签

  • if: 相当于java代码的if代码

test属性是必须属性,属性值为false,则不显示标签体内容,为true则显示

一般情况下,test属性结合EL表达式一起使用

注意:c:if标签没有else情况,想要else情况,则需另外再定义一个c:if标签

-choose: 相当于java代码的switch代码

  • foreach: 相当于java代码的for代码

  • 功能:完成重复的操作;或遍历容器

  • 属性:

  1. begin:开始值

  2. end:结束值

  3. var:临时变量

  4. step:步长

  5. items:容器对象

  6. varStatus:循环状态对象

  • index:容器中元素的索引,从0开始

  • count:循环次数,从1开始

4.5. JSTL案例

需求:在request域中有一个存有User对象的List集合,

需要用jstl+el技术将list集合里的数据展示到jsp页面的表格table中

五:MAV 三层架构

1.界面层(表示层):用户看的界面,用户可以通过界面上的组件和服务器进行交互

  1. 业务逻辑层:处理业务逻辑的

3.数据访问层:操作数据存储文件

相关推荐
黎雁·泠崖1 小时前
Java 数据结构与算法:时间空间复杂度 从入门到实战全解
java·开发语言
想不明白的过度思考者1 小时前
Spring Boot 实战:MyBatis 操作数据库(上)
java·数据库·spring boot·mysql·mybatis
kyle~1 小时前
Python---webbrowser库 跨平台打开浏览器的控制接口
开发语言·python·web
wuqingshun3141591 小时前
简述双亲委派机制以及其优点
java·开发语言·jvm
草莓熊Lotso2 小时前
Ext 系列文件系统核心:块、分区、inode 与块组结构详解
android·linux·c语言·开发语言·c++·人工智能·文件
七夜zippoe2 小时前
微服务链路追踪实战:SkyWalking vs Zipkin 架构深度解析与性能优化指南
java·开发语言·微服务·springcloud·sleuth·zipkin
米羊1212 小时前
shiro攻防利用
java·struts·安全
见叶之秋2 小时前
C语言--动态内存管理
c语言·开发语言
小楼v2 小时前
AI应用对话生成的安全性优化
java·后端·ai·护轨