文章说明:黑色字体-已知,蓝色字体-所见即所得,红色字体-还需要再找资料弄明白的,黄色背景-提炼关键信息
参考资料:很多参考资料,段落下有原文链接到原作者
声明:JSP简介和JSP发展史写的太过复杂,都是废话,JSP就是一个可以写HTTP标签和JAVA代码的JSP文件,运行时被tomcat转换成一个继承HttpServlet的类,看JSP之前看下sevlet,然后看JSP动作&指令&内置对象,内置对象结合HTML协议看。EL和JSTL是为了简化JSP的JAVA代码。
JSP体系结构图:https://blog.csdn.net/qq_41933149/article/details/99666675
JSP简介
-
HTTP:静态页面。
固定不变的页面。(直接从服务器发送给用户写好的页面。)
用来描述网页,是标记语言,而非编程语言。
直接运行。可直接打开。 -
JSP(Java Server Pages):动态页面。与ASP(微软的动态页面技术)类似。
显示内容因人而异。(通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。)
是网页编程语言。
运行时转换成servlet。需要发布到服务器。需要JDK编译。
表头<%@ page language=”java” import=”java.util.*” pageEncoding=”gbk”%>在表头中有编码格式和倒入包等。 -
JSP使用
servlet也是动态页面实现技术,JSP解决了servlet的缺陷(需要配置,向网页输出HTML页面内容困难),本质也是一个servlet。
在标签<%和%>之间插入java代码。
JSP在后台通过服务器解析为相应的html,然后在供浏览器识别显示。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
JSP发展史
- JSP的出现为了解决Servlet在响应时不适合向外输出页面的问题
Servlet适合处理逻辑,处理的结果太适合由Servlet向外输出(不适合输出完整的html页面)。
Html展示数据。本质是一个文档(静态资源),无法展示动态的数据。
jsp适合编写html代码、作为响应页面向外输出,同时可以写java代码、展示动态的数据。
jsp在第一次访问时,被翻译成Servlet,访问jsp后看到的页面,是翻译后的Servlet在向外输出。 - JSP的第1代开发技术:纯JSP技术
- JSP的第2代开发技术:JSP+EJB
- JSP的第3.1代开发技术(MVC):JSP+servlet+EJB(Model1)
- JSP的第3.2代开发技术(MVC):JSP+servlet+JavaBean+service(Model2)
- 各版本详细实现代码:https://blog.csdn.net/qq_34928644/article/details/82556284
JSP应用
JSP生命周期
1、由JspServlet(JSP引擎)翻译成java源文件
2、由容器编译成class文件
3、创建对象
4、jspInit()方法初始化
5、jspService()方法提供服务
6、jspDestroy()方法销毁
7、卸载
JSP脚本元素
会被编译到JSP生成java的类中,其他的会放到_jspService方法中。
- JSP声明语句:声明变量和方法,内容转换成Servlet类中的成员变量,在整个JSP页面有效。<%! 变量或方法定义 %>
- JSP表达式:表达式必须能够求值,且计算结果会以字符串形式显示在客户端。
<%= 表达式 %> - JSP Scriptlets:变量、方法、表达式等内容。<% java代码 %>
JSP注释
<!-- -->:注释HTML代码片段。页面显示。
<%-- --%>:注释所有代码片段。页面不显示。
JSP指令
作用:用于配置JSP页面,导入资源文件。
格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 … %>
page:用于定义JSP文件的全局属性。在一个JSP页面中Page指令可以出现多次,但每个属性只能出现一次,重复的属性会覆盖先前的设置。
- contenType:等同于response.setContentType()。
设置响应体的mime类型以及字符集
设置当前JSP页面的编码(高级IDE,如果是低级编译器,需要设置 pageEncoding 属性来设置字符集)
<%@ page contentType="MIME类型"; charset=字符编码%>
//一般情况下使用为:
<%@ page contentType="test/html"; charset=gb2312%>
- import:导包。
<%@ page import = "包名.类名" %>
<%@ page import = "包名.* " %>
<%@ page import = "包名.类名,包名2.类名" %>
- pageEnCoding:属性设定字符集。
语法:<%@ page pageEncoding = “编码类型”%>
示例:<%@ page pageEncoding = “GBK”%> - errorPage:当前页面发生异常后,会自动跳转到指定的错误提示页面。
isErrorPage:标识当前页面是否为错误页面。
true:是,可以使用内置对象 exception
false:否,默认值,不可以使用内置对象 exception
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="pageTest2_error.jsp" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
include:在JSP编译时插入一些包含文件(JSP、HTML、文本、Java程序),包含的过程为静态的。包含的文件会被解析为JSP文本,因此包含的文件必须符合JSP语法。
语法:<%@ include file=“文件名”%>
include指令只有唯一的一个file属性,它是指被包含的文件,文件使用相对路径,
相对路径以斜杠/开头,是相对于Web应用程序文档根目录的路径,假如不用斜杠/开头,则相对于当前JSP文件的路径。
注意:
当外部引入的页面与本页面有相同的变量时,由于include等价于代码复制,所以会报错
被包含的页面与主页面共享所有的隐含变量 所以它们可以相互访问数据。
被包含页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include测试页面</title>
</head>
<body>
<hr>
<center>
公司电话:010-89574895,欢迎来电!
</center>
</body>
</html>
包含的页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>include包含其他页面进来</title>
</head>
<body>
<%
out.print("欢迎来到本系统!");
%>
<br>
<%@ include file="info.jsp"%>
</body>
</html>
转换单元
在JSP页面使用<%@ include file=“info.jsp”%>指令将另外的页面的内容包含到本页面时,容器会将被包含的页面的内容插入到产生的页面实现类中,这些被转换成单个页面实现类 的页面集合称为转换单元。
注意:
page指令影响整个转换单元
在一个转换单元中一个变量不能多次声明
taglib:JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
语法:<%@ taglib uri=“uri” prefix=“prefixOfTag” %>
uri属性确定标签库的位置,prefix属性指定自定义标签的前缀。
JSP动作元素
在请求处理阶段起作用,由XML语法写成。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
动作元素只有一种语法,它符合XML标准:<jsp:动作 属性=“value” />
JSP基本动作包括:
1、<jsp:include>:在页面请求时引入一个文件
<jsp:include page=”relative URL” flush=”true|false”/>
Page属性:被包含文件地址
Flush属性:缓冲区满时是否清空,默认false.
2、<jsp:forward>:把请求转到一个新的页面。
<jsp:forward page=”转向页面的URL地址”/>
3、<jsp:param>
<jsp:param name=”参数名字” value=”指定给param的参数值”/>
4、<jsp:plugin>:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
可将服务器端的JavaBean或Applet下载到客户端执行
5、<jsp:useBean>:寻找或者实例化一个JavaBean。
<jsp:useBean id=”beanInstanceName”class=”classsname” scope=”page|request|session|application”/>
Id:指定JavaBean的实例名;
Class: 指定JavaBean的全限定类名;
Scope:
Page:实例在当前页面有效;
Request:实例在本次请求有效;
Session:实例在本次session内有效;
Application:实例在本应用内一直有效
该动作元素中常包含有<jsp:setProperty>动作元素,用来设置Bean属性值
6、<jsp:setProperty>:设置JavaBean的属性。
<jsp:setPropertyname=”beanInstanceName” property=”propertyName” value=”value” />
Name:JavaBean实例名
Property:实例中属性名
Value:为属性设置的值
7、<jsp:getProperty>:输出某个JavaBean的属性。
<jsp:getProperty name=”beanInstanceName” property=”propertyName”/>
Name:JavaBean实例名
Property:实例中属性名
EL表达式
定义:Expression Language(表达式语言),主要替换和简化JSP页面中的java代码。
语法:${表达式}
忽略JSP中所有EL表达式的指令:isElignored=“true”
忽略当前的EL表达式:\${表达式}
EL使用:
1、运算符
- 算数运算符:+ - * /(div) %(mod)
- 比较运算符:> < >= <= == !=
- 逻辑运算符:&&(and)||(or)!(not)
- 空运算符:empty
${empty str}:判断字符串,集合数组对象是否为null或者长度是否为 0
${not empty str}:判断字符串、集合、数组对象是否不为null且长度大于 0
2、获取值
- EL 表达式只能从域对象中获取值。
- 格式:
${域名称.键名}<!--从指定的域中获取指定的键值。-->
域——对应的域名称
pageContext——pageScope
request——requestScope
session——sessionScope
application——applicationScope
${键名}<!--表示依次从最小的域中查找是否有该键对应的值-->
- 获取对象:${域名称.键名.属性名}
本质上是调用Javabean中的getter方法 - 获取 List 集合:${域名称.键名[索引]}
获取 Map 集合
${域名称.键名.key名称}
${域名称.键名[“key名称”]}
3、隐式对想
EL表达式中有11个隐式对象,主要说pageContext。
pageContext主要功能有:
获取 JSP 其他八个内置对象
JSTL标签
JSTL 标签(JavaServer Pages Tag Library),即JSP标准标签库,是由 Apache 组织提供的开源免费的JSP标签,主要是用来简化和替换JSP页面上的Java代码,具体使用步骤如下:
导入jstl相关jar包
引入标签库:taglib指令引入:<%@ taglib %>
使用标签
1、if 标签
属性:test 属性,为必须属性,接受 boolean 表达式
一般情况下,test属性值会结合 EL 表达式一起使用
if 标签没有else情况,如果想要else效果,可以定义多个 if 标签
2、choose 标签
choose 标签就相当于switch 语句,switch 需要配合 case、default 来使用,而choose则需要配合when、otherwise 来使用
使用choose标签声明:相当于 switch 声明
使用 when 标签做判断:相当于 case
使用 otherwise 标签做其他情况的声明:相当于default
3、 foreach 标签
【1】完成重复操作
属性
begin:开始值
end:结束值
var:临时变量
step:步长
varStatus:循环状态对象
index:容器中元素的索引,从 0 开始
count:循环次数,从 1 开始
【2】遍历容器
属性
items:容器对象
var:容器中元素的临时变量
varStatus:循环状态对象
index:容器中元素的索引,从 0 开始、
count:循环次数,从 1 开始
原文链接:https://blog.csdn.net/yangdan1025/article/details/82153426
原文链接:https://blog.csdn.net/weixin_41704733/article/details/79980487
原文链接:https://blog.csdn.net/One_L_Star/article/details/100520438
原文链接:https://blog.csdn.net/super_longyu/article/details/48844937
原文链接:https://blog.csdn.net/j174zhp/article/details/103604271
原文链接:https://blog.csdn.net/weixin_42452726/article/details/101033694
原文链接:https://blog.csdn.net/qq_39588003/article/details/103682384