JavaWeb开发(三) | JSP技术详解

JSP简介

JSP介绍

JSP(全称Java Server Pages)Java服务端页面技术,是JavaEE平台下的技术规范。它允许使用特定的标签在HTML网页中插入Java代码,实现动态页面处理,所以JSP就是HTML与Java代码的复合体。JSP技术可以快速的实现一个页面的开发,相比在Servlet中实现页面开发将变得更加容易。

JSP运行原理

在这里插入图片描述

JSP技术特点

JSP和Servlet是本质相同的技术。当一个JSP文件第一次被请求时,JSP引擎会将该JSP编译成一个Servlet,并执行这个Servlet。如果JSP文件被修改了,那么JSP引擎会重新编译这个JSP。

JSP引擎对JSP编译时会生成两个文件分别是.java的源文件以及编译后的.class文件,并放到Tomcat的work目录的Catalina对应的虚拟主机目录中的org\apache\jsp目录中。两个文件的名称会使用JSP的名称加”_jsp”表示。如:index_jsp.java、index_jsp.class

JSP与Servlet区别

  • JSP以源文件形式部署到容器中。而Servlet需要编译成class文件后部署到容器中。
  • JSP部署到web项目的根目录下或根目录下的其他子目录和静态同资源位于相同位置。而Servlet需要部署到WEB-INF/classes目录中。
  • JSP中的HTML代码会被JSP引擎放入到Servlet的out.write()方法中。而在Servlet中我们需要自己通过对字符流输出流的操作生成响应的页面。
  • JSP更擅长表现于页面显示,Servlet更擅长于逻辑控制。

JSP标签的使用

在这里插入图片描述

JSP的三种原始标签

JSP的原始标签在JSP的任何版本中都可以使用。

<%! %> 声明标签

声明标签用于在JSP中定义成员变量与方法的定义。标签中的内容会出现在JSP被编译后的Servlet的class的{}中。

<% %>脚本标签

脚本标签用于在JSP中编写业务逻辑。标签中的内容会出现在JSP被编译后的Servlet的_jspService方法体中。

<%= %>赋值标签

赋值标签用于在JSP中做内容输出。标签中的内容会出现在_jspService方法的out.print()方法的参数中。注意我们在使用赋值
标签时不需要在代码中添加 ”;”。

JSP的指令标签

JSP指令标签的作用是声明JSP页面的一些属性和动作。
<%@指令名称 属性=“值” 属性=“值1,值2…”%>

JSP指令标签分类

在这里插入图片描述

Page指令标签

contentType
设置响应类型和编码。

pageEncoding
设置页面的编码。

import
导入所需要的包。

language
当前JSP页面里面可以嵌套的语言。

session
设置JSP页面是否获取session内置对象。

buffer
设置JSP页面的流的缓冲区的大小。

autoFlush
是否自动刷新。

extends
声明当前JSP的页面继承于那个类.必须继承的是httpservlet 及其子类。

isELIgnored
是否忽略el表达式。

errorPage
当前JSP页面出现异常的时候要跳转到的JSP页面。

isErrorPage
当前JSP页面是否是一个错误页面。若值为true,可以使用JSP页面的一个内置对象 exception。

Include指令标签

静态包含,可以将其他页面内容包含进来,一起进行编译运行.生成一个java文件.
<%@include file=“被包含JSP的相对路径” %>

Taglib指令标签

导入标签库。
<%@taglib prefix=“前缀名” uri=“名称空间” %>

JSP的内置对象

JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、
page、exception。

request对象

request 对象是 HttpServletRequest类型的对象。

response对象

response 对象是 HttpServletResponse类型的对象。

session对象

session 对象是HttpSession类型的对象。只有在包含session=“true” 的页面中才可以被使用。

application对象

application 对象是ServletContext类型的对象。

out 对象

out 对象是JspWriter类型的对象。

config 对象

config 对象是ServletConfig类型的对象。

pageContext 对象

pageContext 对象是PageContext类型的对象。作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

page 对象

page 对象代表JSP本身。

exception 对象

exception 对象的作用是显示异常信息,只有在包含isErrorPage=“true” 的页面中才可以被使用。

请求转发

什么是请求转发

请求转发是服务端的一种请求方式,相当于在服务端中直接请求某个资源。

request.getRequestDispatcher("/test.jsp").forword(request,response);

在这里插入图片描述

请求转发与重定向的区别

  • 请求转发对于客户端浏览器而言是在一次请求与响应中完成,而重定向是在两次请求两次响应中完成。
  • 请求转发并不会改变客户端浏览器的地址栏中的内容。而重定向会改变客户端浏览器地址栏中的内容。
  • 请求转发可以使用request对象传递数据,而重定向不能使用request对象传递数据。
  • 如果是处理的DML操作,建议使用重定向方式为客户端浏览器产生响应,可以解决表单重复提交现象。

JSP中的四大作用域对象

作用域:“数据共享的范围”,也就是说数据能够在多大的范围内有效。

对象名称作用范围
application整个应用都有效
session在当前会话中有效
request在当前请求中有效
page在当前页面有效

JSTL标签库

什么是JSTL标签库

JSTL(Java server pages standard tag library,即JSP标准标签库)JSTL标签是基于JSP页面的。这些标签可以插入在JSP代码中,本质上JSTL也是提前定义好的一组标签,这些标签封装了不同的功能,在页面上调用标签时,就等于调用了封装起来的功能。JSTL的目标是使JSP页面的可读性更强、简化JSP页面的设计、实现了代码复用、提高效率。

在JSP2.0版本后开始支持JSTL标签库。在使用JSTL标签库时需要在JSP中添加对应的taglib指令标签。

JSTL标签分类

根据JSTL标签所提供的功能,可以将其分为5个类别。

核心标签

最常用、最重要,也是最基本的标签

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
```![在这里插入图片描述](https://img-blog.csdnimg.cn/b5cab56aa3904232986d203018664a8c.png)
## 格式化标签
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。
```jsp
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

在这里插入图片描述

EL表达式

什么是EL表达式

EL(Expression Language)是一种表达式语言。是为了使JSP写起来更加简单,减少java代码,可以使得获取存储在Java对象中的数据变得非常简单。在JSP2.0版本后开始支持EL表达式。

语法结构

${表达式}
${对象.属性名}

EL表达式中的操作符

在这里插入图片描述

EL表达式的隐含对象

在这里插入图片描述

使用EL表达式取出作用域中的值

${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}
获取作用域属性中的数据时,也可以只写属性名,EL表达式会按照pageScope、requestScope、sessionScope、applicationScope的顺序查找该属性的值。
${name}

JSTL标签库与EL表达式的使用

JSTL核心标签的使用

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

< c:if >

标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。

< c:choose >, < c:when >, < c:otherwise >

< c:choose >标签与Java switch语句的功能一样,用于在众多选项中做出选择。
switch语句中有case,而< c:choose >标签中对应有< c:when >,
switch语句中有default,而< c:choose >标签中有< c:otherwise>。

< c:forEach >

迭代器,用于迭代集合。
在这里插入图片描述
varStatus 属性
current: 当前这次迭代的(集合中的)项
index: 当前这次迭代从 0 开始的迭代索引
count: 当前这次迭代从 1 开始的迭代计数
first: 用来表明当前这轮迭代是否为第一次迭代的标志
last: 用来表明当前这轮迭代是否为最后一次迭代的标志
begin: 属性值
end: 属性值
step: 属性值

JSTL格式化标签的使用

<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt”%>

对日期的格式化处理

<fmt:formatDate value="${data}" pattern="yyyy-MM-dd"/>

对数字格的式化处理

<fmt:formatNumber value="${balance}" type="currency"/>

MVC模式

什么是MVC模式

MVC模式:Model、View、Controller即模型、视图、控制器。是软件的一种架构模式(Architecture pattern)。MVC要实现的目标是将软件的用户界面和业务逻辑分离,可提高代码可扩展性、可复用性、可维护性、以及灵活性。
View(视图):用户的操作界面。如:html、jsp。
Model(模型):具体的业务模型与数据模型。如:service、dao、pojo。
Controller(控制):处理从视图层发送的请求,并选取模型层的业务模型完成响应的业务实现,并产生响应。如:Servlet。
在这里插入图片描述

MVC模式与应用程序分层的区别

MVC模式是一种软件的架构方式,而应用程序分层这是一种代码的组织方式。MVC模式与应用程序分层的目标都是一致的:为了解耦和、提高代码复用性。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值