JSP总结

目录

JSP是什么:

JSP与Servlet的区别:

JSP运行原理

JSP标签:

原始标签:

<%! %>声明标签:

<% %>脚本标签

<%= %>赋值标签

指令标签:

page标签:

include标签

taglib标签

JSP内置对象

JSP四大作用域对象

请求转发:

JSTL标签库是什么

EL表达式

如何在idea使用JSTL标签库

标签的使用:

c标签:

if标签:

choose标签:

test属性:

forEach标签:

​编辑​编辑

forEach遍历List集合

forEach遍历Map集合

fmt标签

MVC模式:


JSP是什么:

JSP是JAVAEE平台下的技术规范,它允许使用特定的标签在HTML代码中插入JAVA代码, 实现动态页面处理,所以JSP就是HTML与JAVA的结合体。JSP技术可以快速的实现一个页面的开发,相比使用Servlet实现页面开发轻松多了        

JSP与Servlet的区别:

  • JSP以源文件的形式部署容器中,而Servlet是需要将字节码文件部署到容器中
  • JSP部署到web目录的根目录下或子目录下,而Servlet需要部署到WEB_INF/class目录中
  • JSP中的HTML代码会被JSP引擎放入到Servlet的out.print()中,而在Servlet中我们需要自己通过响应字符输出流生成响应的页面
  • JSP更擅长页面显示(HTML+JAVA),Servlet更擅长处理请求产生响应,也就是逻辑控制

JSP运行原理

JSP技术特点

JSP和Servlet是本质相同的技术。

当一个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标签:

JSP标签分为原始标签和指令标签

原始标签:

<%! %>声明标签:

声明标签用来定义成员变量或者方法,该标签被编译后会出现在对应Servlet类中的class{        }大括号中

例:

我们编写了一段JSP代码

在对应Servlet类中,就会出现我们编译的代码 

<% %>脚本标签

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

<%= %>赋值标签

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

指令标签:

page标签:

contentType

设置响应类型和编码。

 

pageEncoding

设置页面的编码。(页面显示)

 

import

导入所需要的包。

 

language

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

 

session

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

 

buffer

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

 

autoFlush

是否自动刷新。

 

exends

声明当前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" 的页面中才可以被使用。

JSP四大作用域对象

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

对象名称

作用范围

application

整个应用都有效

session

在当前会话中有效

request

在当前请求中有效

page

在当前页面有效

请求转发:

请求转发是有一些类似于Servlet中的重定向响应,但是不同的是重定向响应是两次请求两次响应,而请求转发是一次请求一次响应

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

RequestDispatcher dispatcher = request.getRequestDispatcher("/test.jsp");

dispatcher.forward(request,response);

简写方式:

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

我们可以通过一张图去理解这个请求转发内部是如何转发的:

案例:通过Servlet获取客户端浏览器正在使用的语言 

我们可以通过请求头中的"accept-language",获取现在浏览器正在使用的语言

 我们将请求转发给一个叫requestForward的jsp文件,后面一定要带forward,把浏览器的请求一起转发了,不然jsp文件怎么知道显示啥呢

 然后我们再创建一个requestForward.jsp文件,通过这个文件获取转发过来的请求中的属性,然后输出到页面上

JSTL标签库是什么

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

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

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

JSTL标签分类

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

 

核心标签

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

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

格式化标签

JSTL格式化标签用来格式化并输出文本、日期、时间、数字。

<%@taglibprefix="fmt"uri="http://java.sun.com/jsp/jstl/fmt"%>

SQL标签

JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。

<%@taglibprefix="sql"uri="http://java.sun.com/jsp/jstl/sql"%>

XML标签

JSTL XML标签库提供了创建和操作XML文档的标签。

<%@taglibprefix="x"uri="http://java.sun.com/jsp/jstl/xml"%>

JSTL函数

JSTL包含一系列标准函数,大部分是通用的字符串处理函数。

<%@taglibprefix="fn"uri="http://java.sun.com/jsp/jstl/functions"%>

EL表达式

JSTL标签本身是无法使用表达式或者对象的,我们需要使用EL表达式帮助JSTL标签使用表达式或者对象

语法结构

${表达式}

${对象.属性名}

EL表达式中的操作符

操作符

描述

( )

优先级

+

-

减或负

*

/ 或div

% 或 mod

取模

== 或 eq

测试是否相等

!= 或 ne

测试是否不等

< 或 lt

测试是否小于

> 或gt

测试是否大于

<= or le

测试是否小于等于

>= 或 ge

测试是否大于等于

&& 或 and

测试逻辑与

|| 或 or

测试逻辑或

! 或not

测试取反

empty

测试是否空值

EL表达式的隐含对象

隐含对象

描述

pageScope

page 作用域

requestScope

request 作用域

sessionScope

session 作用域

applicationScope

application 作用域

param

Request 对象的参数,字符串

paramValues

Request对象的参数,字符串集合

header

HTTP 信息头,字符串

headerValues

HTTP 信息头,字符串集合

initParam

上下文初始化参数

cookie

Cookie值

pageContext

当前页面的pageContext

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

${pageScope.name}

${requestScope.name}

${sessionScope.name}

${applicationScope.name}

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

${name}

如何在idea使用JSTL标签库

JSTL标签库的使用步骤

添加jstl.jar

在JSP页面中添加taglib指令标签。

 

首先在项目结构中导入jstl标签库

 

然后在artifacts目录下,将jstl目录添加到web-inf目录下的lib目录

 

添加好后就可以通过taglib使用jstl标签库了

例:

标签的使用:

c标签:

if标签:

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

< c:if >

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

 

标签中的属性test需要给定布尔值或者一个el表达式,el表达式的值是一个布尔值

choose标签:

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

< c:choose >标签与Java switch语句的功能一样,用于在众多选项中做出选择。

switch语句中有case,而< c:choose >标签中对应有< c:when >,

switch语句中有default,而< c:choose >标签中有< c:otherwise >。

 

when标签和otherwise标签后面都自动会有break语句

< c:when > = case: break;

< c:otherwise > = default: break;

 

注意:如果有多个when标签为true,那么匹配第一个为truewhen标签

test属性:

标签中的属性test需要给定布尔值或者一个返回布尔值的el表达式,

test代表的就是判断

forEach标签:

< c:forEach >

迭代器,用于迭代集合。

属性

描述

items

被迭代的集合

begin(>=)

迭代器的起始因子

end(<=)

迭代器的结束因子

step

迭代因子的增长数

var

代表当前迭代元素的变量名称

varStatus

代表循环状态的变量名称

varStatus 属性:

current: 当前这次迭代的(集合中的)项

index: 当前这次迭代从 0 开始的迭代索引

count: 当前这次迭代从 1 开始的迭代计数

first: 用来表明当前这轮迭代是否为第一次迭代的标志

last: 用来表明当前这轮迭代是否为最后一次迭代的标志

begin: 属性值

end: 属性值

step: 属性值

 

例子:

forEach遍历List集合

 

forEach遍历Map集合

 

fmt标签

JSTL格式化标签的使用

<%@ taglib prefix="fmt" uri=" Oracle Java Technologies | Oracle" %>

 

对日期的格式化处理

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

对数字格的式化处理

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

MVC模式:

MVC模式是一种软件的架构模式:Model、View、Controller即模型、视图、控制器。MVC要实现的目标是将软件的用户界面和业务逻辑分离,可提高代码可扩展性、可复用性、可维护性、以及灵活性。

View(视图):用户的操作界面。如:html、jsp。

Model(模型):具体的业务模型与数据模型。如:service、dao、pojo。

Controller(控制):处理从视图层发送的请求,并选取模型层的业务模型完成响应的业务实现,并产生响应。如:Servlet。

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

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

 

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值