当前位置: 首页 > news >正文

JSP

概念:Java Server Pages,Java服务端页面

一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容

JSP = HTML + Java

快速入门

注:Tomcat中已经有了JSP的jar包,因此我们需要设置JSP坐标中的<scope>标签为provided,即只在编译阶段生效

JSP原理

JSP本质上就是一个Servlet

JSP在被访问时,由JSP容器(Tomcat)将其转换为Java文件(Servlet),在由JSP容器将其编译,最终对外提供服务的其实就是这个字节码文件

其中脚本内的代码为Java代码,而脚本外的html的代码都会以out.write调用方法的形式拼接到Java代码中

JSP脚本

JSP脚本用于在JSP页面内定义Java代码

即Java代码需要放在脚本中

JSP的脚本有三种

1.<% ... %>

<% ... %>:内容会直接放到_jspService()方法之中

即该脚本内放置的为普通的java代码,在service()方法中,会在浏览器被访问的时候执行

2.<%= ... %>

<=% ... %>:内容会放到out.print()方法中,作为out.print()的参数

即该脚本的内容会被打印到页面中,且一些变量在这里也可以直接打印到页面中,可以动态的改变页面内容(如每个人页面上显示的用户名会随着账号的不同而不同)

3.<%! ... %>

<!% ... %>:内容会放到_jspService()方法之外,被类直接包含

即该脚本的内容会在方法之外,类之内,也就是可以放一些成员变量和成员方法

截断式编码

在脚本中,代码是可以被截断的

即在两个<% ... %>之间可以有html的代码

如一个for循环,一个脚本中有大部分内容,另一个脚本中只有一个右大括号,中间有html代码,这是成立的

如图,最终tomcat编译成的java文件

JSP缺点

由于在JSP中同时要写Java代码和heml,会导致书写及其麻烦,因此采用同时使用servlet和JSP的方式

EL表达式

Expression Language 表达式语言,用于简化JSP页面内的Java代码

主要功能:获取数据

语法:

${expression}

如:

${brands}:获取域中存储的key为brands的数据

JavaWeb中的四大域对象

1.page:当前页面有效

2.request:当前请求有效

3.session:当前会话有效

4.app:当前应用有效

el表达式获取数据,会依次从这4个域中寻找

注意事项

1

当前版本中,在JSP中 若要使用EL表达式,需要在JSP页面顶部设置page中的isELIgnored为false,如下

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>

2

在使用EL表达式得到一个对象的属性时,可以直接使用对象.属性的形式,JSP会自动将属性的首字母大写,并在前面加上“get”,依次来调用对应的get方法

如${brand.id},到时候会调用brand的getId()方法

JSTL标签

JSP标准标签库(Jsp Standarded Tag Library),使用标签取代JSP页面上的Java代码

JSTL使用步骤

1.导入坐标

<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency>
<dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version>
</dependency>

2.在JSP页面上引入JSTL标签库

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

注:上图中第一个为创建JSP页面时自带的,且手动设置了不忽略EL表达式

第二个为需要引入的JSTL标签库

3.使用

<c:if>

<c:if>:类似于Java中的if语法,但没有else的功能

语法

<c:if test="条件表达式">

对应要执行的编码

</c:if>

根据条件表达式是否为true,来判断是否执行响应编码

且该标签可以与EL表达式配合使用,如下

<c:if test="${status == 1}">true</c:if><c:if test="${status == 0}">false</c:if>

注:${}可以理解为Java中 if()中的(),其内部为条件表达式

<c:foreach>

<c:foreach>:相当于for循环

语法

该标签有两种使用方式,分别对应Java中的foreach和普通for循环

foreach

<c:forEach items="" var="" varStatus="">

编码

</c:forEach>

其中

items:被遍历的容器

var:遍历产生的临时变量

varStatus:遍历状态对象,一个会根据循环次数自动生成id的对象

其有两个值,一个是index,代表从0开始计数。一个是count,代表从1开始计数

如图,varStatus用“status”表示,并且使用status.index,则在第一次循环,其值为0,第二次循环,其值为1,以此类推,若为status.count,则第一次循环其值为1,依次类推

for

<c:forEach begin="" end="" step="" var="">

编码

</c:forEach>

其中

bagin:开始数,相当于i的初始值

end:结束数,相当于i的生效范围

step:步长,即i每次循环变化的值

var:遍历产生的临时变量

MVC模式和三层架构

MVC模式

MVC是一种分层开发的模式,其中:

M:Model,业务模型,处理业务

V:View,试图,界面展示

C:Controller,控制器,处理请求,调用模型和视图

MVC好处

职责单一,互不影响

有利于分工协作

有利于组件重用

JavaBean:即pojo包下的类

三层架构

MVC模式和三层架构

http://www.lryc.cn/news/332009.html

相关文章:

  • Mybatis--TypeHandler使用手册
  • 网络编程(TCP、UDP)
  • Python快速入门系列-7(Python Web开发与框架介绍)
  • 最长对称子串
  • 【大模型】大模型 CPU 推理之 llama.cpp
  • 异地组网怎么管理?
  • Kafka参数介绍
  • 如何利用待办事项清单提高工作效率?
  • 力扣经典150题第二题:移除元素
  • 55555555555555
  • 用Skimage学习数字图像处理(018):图像形态学处理(上)
  • MySQL中 in 和 exists 区别
  • Java基础 - 代码练习
  • 【Redis】redis集群模式
  • 基于opencv的猫脸识别模型
  • 基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用
  • 数据库重点知识(个人整理笔记)
  • [技术闲聊]checklist
  • 力扣刷题 二叉树的迭代遍历
  • 【二】Django小白三板斧
  • MyBatis的基本应用
  • Day80:服务攻防-中间件安全HW2023-WPS分析WeblogicJettyJenkinsCVE
  • 使用generator实现async函数
  • go并发请求url
  • 刷题之Leetcode704题(超级详细)
  • leetcode热题100.前k个高频元素
  • LangChain Demo | Agent X ReAct X wikipedia 询问《三体》的主要内容
  • Revit 2025新功能一览~
  • Head First Design Patterns -代理模式
  • 第十三题:天干地支