jsp简介
Jsp(Java Server Page)是由Sun Microsystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成HTML、XML或其他格式文档的Web网页的技术标准。
JSP技术是以Java语言作为脚本语言的,JSP网页为整个服务器端的Java库单元提供了一个接口来服务于HTTP的应用程序。
JSP文件后缀名为(*.jsp)。
JSP开发的WEB应用可以跨平台使用,既可以运行在Linux上也能运行在Window上。
简单来说jsp就是Java代码与前端的结合体
jsp的生命周期
编译阶段:
Servelet容器编译Servelet源文件,生成servelet类
初始化阶段:
加载与JSP对应的Servelet类,创建其实例,并调用它的初始化方法
执行阶段:
调用与JSP对应的Servelet实例的服务方法
销毁阶段:
调用与JSP对应的Servelet实例的销毁方法,然后销毁Servelet实例
编译过程中,当第一次访问jsp页面时,会向servlet容器(tomcat)发送请求,servlet容器先将index.jsp转换成index_jsp.java文件,即一个servlet,再编译成index_jsp.class文件进行调用。第二次访问时,即可跳过转换和编译过程直接调用。
可进入CATALINA_BASE
C:\Users\Administrator.IntelliJIdea2019.1\system\tomcat\Tomcat_9_0_24_webProject(项目名)
的
\work\Catalina\localhost\webProject_war_exploded\org\apache\jsp
查看.java与.class文件
所以某种意义上jsp就是servlet
jsp语法
代码片段
<% %>存放Java代码片段,等价于XML语句
<jsp:scriptlet></jsp:scriptlet>
jsp表达式
<%= %>存放Java表达式,等价于XML语句
<jsp:expression></jsp:expression>
jsp声明
<%! %>存放声明
<jsp:declaration></jsp:declaration>
jsp注释
语法 | 描述 |
---|---|
<%-- 代码 --%> | JSP注释,注释内容不会被发送至浏览器甚至不会被编译 |
<! – --> | HTML注释,通过浏览器查看网页源代码时可以看见注释内容 |
// | 注释单行Java代码 |
/* */ | Java代码多行注释 |
jsp指令
指令 | 描述 |
---|---|
<%@ page … %> | 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include … %> | 包含其他文件 |
<%@ taglib … %> | 引入标签库的定义 |
page指令:
Page指令的语法格式:
<%@ page attribute=“value” %>
等价于XML语句
<jsp:directive.page attribute=“value” />
属性 | 描述 |
---|---|
buffer | 指定out对象使用缓冲区的大小 |
autoFlush | 控制out对象的 缓存区 |
contentType | 指定当前JSP页面的MIME类型和字符编码 |
errorPage | 指定当JSP页面发生异常时需要转向的错误处理页面 |
isErrorPage | 指定当前页面是否可以作为另一个JSP页面的错误处理页面 |
extends | 指定servlet从哪一个类继承 |
import | 导入要使用的Java类 |
info | 定义JSP页面的描述信息 |
isThreadSafe | 指定对JSP页面的访问是否为线程安全 |
language | 定义JSP页面所用的脚本语言,默认是Java |
session | 指定JSP页面是否使用session |
isELIgnored | 指定是否执行EL表达式 |
isScriptingEnabled | 确定脚本元素能否被使用 |
include指令
指定包含页面与当前页面同时编译
语法格式:
<%@ include file=“relative url” >
Include指令中的文件名实际上是一个相对的URL。如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。
等价的XML语法:
<jsp:directive.include file=“relative url” />
Taglib指令
JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
Taglib指令的语法:
<%@ taglib uri=“uri” prefix=“c” >
uri属性确定标签库的位置,prefix属性指定标签库的前缀。
等价的XML语法:
<jsp:directive.taglib uri=“uri” prefix=“c” />
jsp动作元素
使用XML语法编写
即:<jsp:include page=“index.jsp”></jsp:include>
语法 | 描述 |
---|---|
jsp:include | 在页面被请求的时候引入一个文件 |
jsp:useBean | 寻找或者实例化一个JavaBean |
jsp:setProperty | 设置JavaBean的属性 |
jsp:getProperty | 输出某个JavaBean的属性 |
jsp:forward | 把请求转到一个新的页面 |
jsp:plugin | 根据浏览器类型为Java插件生成OBJECT或EMBED标记 |
jsp:element | 定义动态XML元素 |
jsp:attribute | 设置动态定义的XML元素属性 |
jsp:body | 设置动态定义的XML元素内容 |
jsp:text | 在JSP页面和文档中使用写入文本的模板 |
常用属性:
jsp:include
page:指定包含在当前页面的url
jsp:useBean
class:bean的完整包名
id/beanName:指定的bean的名字
scope:规定作用域
jsp:setProperty(写在<jsp:useBean ></jsp:usebean>内)
name:要设置的bean的名字
property:要设置的属性
value:要设置的属性的值
jsp:getProperty
name:要获取的bean的名字
property:要获取的属性
jsp:forward
page:指定要跳转页面的url
jsp九大内置对象
JSP隐含对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐含对象也被称为预定义变量。
JSP所支持的九大隐含对象:
对象 | 描述 |
---|---|
request | HttpServletRequest类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。 |
response | HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。 |
out | PrintWriter类的实例,用于把结果输出至网页上。 |
session | HttpSession类的实例。和Java Servlets中的session对象有一样的行为。session对象用来跟踪在各个客户端请求间的会话。 |
application | application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。通过向application中添加属性,则所有组成web应用的JSP文件都能访问到这些属性。 |
config | config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。(不常用) |
pageContext | PageContext类的实例。这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。 |
page | 它可以被看做是整个JSP页面的代表,类似于Java类中的this关键字 |
Exception | Exception类的对象,代表发生错误的JSP页面中对应的异常对象 |
EL表达式
它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
语法
所有EL表达式的格式都是以“${}”表示。例如,${userinfo}代表获取变量userinfo的值。当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在request、session、application范围查找。也可以用范围作为前缀表示属于哪个范围的变量,例如:${ pageScope. userinfo}表示访问page范围中的userinfo变量。
JSTL标准标签库
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
核心标签
格式化标签
SQL 标签
XML 标签
JSTL 函数
使用JSTL标签库之前,首先需要下载并导入standard.jar和jstl.jar两个jar包
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
标签 | 描述 |
---|---|
<c:out> | 用于在JSP中显示数据,就像<%= … > |
<c:set> | 用于保存数据 |
<c:remove> | 用于删除数据 |
<c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> | 与我们在一般程序中用的if一样 |
<c:choose> | 本身只当做<c:when>和<c:otherwise>的父标签 |
<c:when> | <c:choose>的子标签,用来判断条件是否成立 |
<c:otherwise> | <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 |
<c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach> | 基础迭代标签,接受多种集合类型 |
<c:forTokens> | 根据指定的分隔符来分隔内容并迭代输出 |
<c:param> | 用来给包含或重定向的页面传递参数 |
<c:redirect> | 重定向至一个新的URL |
<c:url> | 使用可选的查询参数来创造一个URL |
可使用以下代码在当前页面实现百度搜索value内的内容:
<c:url value=“http://baidu.com/s” var=“u”>
<c:param name=“wd” value=“123”></c:param>
</c:url>