JSP
1.什么是JSP
java Server Pages : java服务器端页面,和Servlet相同,用于动态Web技术!
特点:与HTML相似 写JSP就像是写HTML
区别:
- HTML只给用户提供静态的数据
- JSP页面中可以嵌入JAVA代码 ,为用户提供动态数据!
原理图
2.JSP原理解析
思路:JSP到底怎么执行的!
- 服务器内部工作原理
Tomcat有一个work目录
IDEA使用Tomcat也会产生这个work目录
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP最终也会被转换成一个JAVA类
打开这个类的源码看看
会发现这个JAVA类继承了一个HttpJspBase接口
我们发现HttpJspBasek继承了HttpServlet类
JSP本质上就是一个Servlet!
1.判断请求
2.内置一些对象
3.输出页面前增加的代码
上面的这些对象可以在JSP中直接使用
可以理解为JSP是封装好一些方法对象的Servlet类
新建一个hello.jsp文件
打开服务器
打开这个hello.jsp文件
我们可以理解成当我们通过WEB服务器访问JSP页面时,JSP文件会自动转换为java文件 然后经过编译成为class文件(也就是Servlet)
3.JSP基本语法
JSP有自己的语法,作为JAVA技术的一种应用 支持JAVA语法!
3.1 JSP表达式
<%--JSP表达式
作用:把程序的输出输出到客户端
格式:<%=变量或者表达式%>
--%>
<%=new java.util.Date()%>
![](https://img-blog.csdnimg.cn/20200705202109865.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Jzbm1k,size_16,color_FFFFFF,t_70
3.2 JSP脚本片段
<%--JSP脚本片段--%>
格式 <% %>
<%
int sum=0;
for (int i = 0; i < 100; i++) {
sum+=i;
}
out.write(sum);
%>
3.3 JSP声明
<%--JSP声明--%>
格式 <%! %>
<%!
static {
System.out.println("正在加载 Servlet");
}
private int ml=0;
public void mll(){
System.out.println("进入了mll方法");
}
%>
JSP声明:会被编译到JSP生成的JAVA类中!
脚本片段和表达式会被生成到 jspservice方法中
3.4 JSP注释
<%--JSP的注释--%>
<%--我是JSP的注释--%>
值得注意的是JSP的注释不会在网页上显示
3.5 JSP指令
如上图所示 :JSP 总共有三个指令
page指令 :用来设置一些页面信息
2个重点
- 设置错误页面
启动测试
我们也可以在web.xml里面定制错误页面
接下来我们访问一个没有资源的的网页 会出现404 错误 自动跳转到我们定制好的错误页面
include指令
作用:将多个网页的内容合成到一个网页上面。
哔哩哔哩的多个分网站下端的内容都是一样的,这就是利用include拼接网页实现的
可以发现 B站每个网页下端有相同的内容 这些相同的网页内容是由单独网页拼接的 是共享的 直接拼接而成的!
3.6 9大内置对象
- PageContext :存东西
作用域:只在一个页面中有效
- Request :存东西
作用域:一次请求或者请求转发
- Response
- Session :存东西
作用域:一次会话
- Application(ServletContext) :存东西
作用域:服务器
- config(ServletConfig)
- out
- page
- excpetion
pageContext.setAttribute("name1","若邪"); //保存的数据只在一个页面中有效
session.setAttribute("name2","若邪2"); //保存的数据在一次会话中有效
request.setAttribute("name3","若邪3"); //保存的数据只在一个请求或者请求转发中有效
application.setAttribute("name4","若邪4"); //保存的数据在服务器中有效
request: 客户端向服务器发送请求,产生的数据 用户看完没用了。
session: 客户端向服务器发送请求,产生的数据,用户用完一会还有用: 购物车
application: 客户端向服务器发送请求,产生的数据 :;聊天记录
1.先通过这四个对象存储数据
2.在另一个页面中取出这四个数据
3.经过对比可以看出作用域
我们发现通过session和application对象存的数据 在另一个页面可以取出
通过request和page存的数据在新的页面不能取出来
经过对比发现他们的作用域为
page:当前页面
request:一次请求或者请求转发
session:一次浏览器会话
application:
3.7 JSP标签、JSTL标签 、EL表达式
需要导包:
</dependency>
<!-- jstl表达式的依赖 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard标签库-->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<!-- standard标签库 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
3.7.1EL表达式 😒{}
- 获取数据
- 执行运算
- 获取web开发的常用对象
3.7.2 JSP标签
%--转发--%>
<jsp:forward page="/index.jsp">
</jsp:forward>
<%--拼接网页--%>
<jsp:include page="index.jsp"></jsp:include>
3.7.3 JSTL表达式
JSTL标签库的使用就是为了你弥补HTML标签的不足,它自定义了很多标签 标签的功能和java代码一样
包含:
格式化标签
SQL标签
XML标签
核心标签
JSTL标签库使用步骤
- 引入对应的taglib
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %
- 使用其中的标签方法
- 在Tomcat中也需要引入JSTL的包