1、 JSP简介
1. 1 JSP介绍
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612140747265.png)
1.2 常见的视图层技术
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612141011937.png)
1.3 前后端分离式开发式
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612141059526.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdV90b19saXU=,size_16,color_FFFFFF,t_70)
2、JSP运行原理
2.1 JSP技术特点
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612141305493.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdV90b19saXU=,size_16,color_FFFFFF,t_70)
2.2 JSP与Servlet区别
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612141640214.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdV90b19saXU=,size_16,color_FFFFFF,t_70)
3、JSP的使用
3.1 JSP的三种原始标签
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612142032816.png)
3.1.1 <%! %> 声明标签
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612142103882.png)
3.1.2 <% %>脚本标签
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612142130826.png)
3.1.3 <%= %>赋值标签
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612142201693.png)
3.1.4 JSP 原始标签的使用
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612150406499.png)
<%@ page import="java.util.Random" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
int flag = new Random().nextInt(100);
if (flag <= 20) {
%>
中奖了 <%= flag%>
<% } else { %>
再试试吧 <%= flag%>
<% } %>
</body>
</html>
3.2 JSP 的指令标签
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021061215054775.png)
3.2.1 JSP 指令标签分类:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021061215064129.png)
3.2.1.1 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。
3.2.1.2 Include 指令标签
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612151013200.png)
3.2.1.3 Taglib 指令标签
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612151622875.png)
3.3 JSP 的内置对象
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612151749244.png)
- 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” 的页面中才可以被使用。
3.4 请求转发
![### 3.4.1](https://img-blog.csdnimg.cn/2021061215245352.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdV90b19saXU=,size_16,color_FFFFFF,t_70)
3.4.1 请求转发与重定向的区别
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612152719220.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdV90b19saXU=,size_16,color_FFFFFF,t_70)
3.4.2 请求转发案例
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612153154818.png)
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/language.do")
public class LanguageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String header = req.getHeader("Accept-language");
req.setAttribute("key", header);
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
String value = (String)request.getAttribute("key");
%>
当前支持的语言为:<%= value%>
</body>
</html>
3.5 JSP 中的四大作用域对象
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021061215484178.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdV90b19saXU=,size_16,color_FFFFFF,t_70)
4、JSTL 标签库
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612155250719.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdV90b19saXU=,size_16,color_FFFFFF,t_70)
4.1 JSTL 标签分类
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612155413914.png)
4.1.1 核心标签
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612155500974.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdV90b19saXU=,size_16,color_FFFFFF,t_70)
4.1.2 格式化标签