阅读量:0
JSP个人浅谈
技术的现状和诞生起源
- 当前使用情况
JSP早已不是主流,但各公司的有部分项目还在使用并维护,对于非前后端分离的项目来说,相比较而言framemarker和thymeleaf使用较多,其中thymeleaf的语法与JSP很相似,掌握JSP的基本使用也可以很快上手thymeleaf。 - 服务器模板引擎的优点
对于非前后端分离项目,使用JSP开发更加快捷,项目搭建快,而thymeleaf是被springboot是完全支持的。 - 为什么需要JSP
1. servlet 做界面非常不方便;
2. html页面无法通过原生的servlet获取动态的数据
- 引出 JSP 技术,JSP 公式
JSP=html+java 片段+标签+javascript+css
JSP基本介绍
- JSP 全称是 Java Server Pages,Java 的服务器页面;
- JSP 这门技术的最大的特点在于,写 JSP 就像在写 HTML。
● 相比 html 而言,html 只能为用户提供静态数据,而 JSP 技术允许在页面中嵌套 java 代码,
为用户提供动态数据
● 相比 Servlet 而言,Servlet 很难对数据进行排版,而 jsp 除了可以用 java 代码产 生动态
数据的同时,也很容易对数据进行排版。 - jsp 技术基于 Servlet, 你可以理解成 JSP 就是对 Servlet 的包装。
- 会使用 JSP 的程序员, 再使用 thymeleaf 是非常容易的事情, 几乎是无缝接轨.
JSP快速入门
首先要引入jasper.jar,注意jsp文件与html文件不同,是不能直接用浏览器打开的,需要用到tomcat
<%@ page import="com.alibaba.druid.support.json.JSONUtils" %><%-- Created by IntelliJ IDEA. User: Administrator Date: 2024/6/7 0007 Time: 9:47 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String str = "Hello World!"; System.out.println(str); %> </body> </html>
JSP 运行原理
- 第 1 次访问 jsp 页面的时候。Tomcat 服务器会把 jsp 页面解析成为一个 java 源文件。
并 且 对 它 进 行 编 译 成 为 .class 字 节 码 程 序 。 看 下 test.jsp 对 应 的 test.java 和
test.class 文件
test.java源码↓
page 指令(常用的)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- language 表示 jsp 翻译后是什么语言文件, 只支持 java
- contentType 表示 jsp 返回的数据类型,对应源码中 response.setContentType()参数值
- pageEncoding 属性 表示当前 jsp 页面文件本身的字符集
- import 属性 跟 java 源代码中一样。用于导包,导类
JSP 三种常用脚本
- 声明脚本基本语法
- 声明脚本的格式是: <%! 声明 java 代码 %>
- 作用:定义 jsp 的需要属性、方法、静态代码块和内部类等
- 应用实例
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>jsp 声明脚本应用实例</title> </head> <body> <%! //声明属性 private Integer id; private String name = "Leon"; private String job; private static String company; private Double sal; //静态代码块 static { company = "字节跳动"; } //声明方法 public String getName() { return name; } %> </body> </html>
- 表达式脚本基本语法
- 表达式脚本的格式是:<%=表达式%>
- 表达式脚本的作用是:在 jsp 页面上输出数据
- 表达式脚本中的表达式不能以分号结束。
<%=request.getContextPath()%>
- 代码脚本基本语法
- 代码脚本的语法是:<% java 代码%>
- 代码脚本的作用是:可以在 jsp 页面中,编写我们需要的功能(使用 java )
- 可以由多个代码脚本块组合完成一个完整的 java 语句。
- 代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据
<% List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); %>
JSP注释
JSP注释和java的注释一样,idea快捷键ctrl+/
JSP内置对象
- 基本介绍
- JSP 内置对象(已经创建好的对象, 直接使用 inbuild),是指 Tomcat 在翻译 jsp 页面成为
Servlet 后,内部提供的九大对象,叫内置对象 - 内置对象,可以直接使用,不需要手动定义
- JSP 九大内置对象
- out 向客户端输出数据,out.println(“”);
- request 客户端的 http 请求
- response 响应对象
- session 会话对象
- application 对应 ServletContext
- pageContext jsp 页面的上下文,是一个域对象,可以 setAttribue(),作用范围只是本页面
- exception 异常对象 , getMessage()
- page 代表 jsp 这个实例本身
- config 对应 ServletConfig
JSP 域对象
- JSP 四大域对象介绍[作用:存取数据]
- pageContext (域对象,存放的数据只能在当前页面使用)
2.request (域对象,存放的数据在一次 request 请求有效) - session(域对象,存放的数据在一次会话有效)
3. application(域对象,存放的数据在整个 web 应用运行期间有效, 范围更大)
- JSP 四大域对象注意事项和细节
- 域对象是可以像 Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数
据的存储范围 - 从存储范围(作用域范围看) pageContext < request < session < application
JSP 请求转发标签
<jsp:forward page="/bb.jsp"></jsp:forward>
延伸1——EL表达式
- EL 表达式介绍
- EL 表达式全称:Expression Language,是表达式语言
- EL 表达式主要是代替 jsp 页面的表达式脚本<%=request.getAttribute(“xx”)%>
- EL 表达式输出数据的时,比 jsp 的表达式脚本简洁
- EL 表达式基本语法: ${key1},就是一个语法糖
- EL 表达式快速入门
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> /* jsp表达式:*/ <%=request.setAttribute("test", "1")%> /* el表达式:*/${test} </body> </html>
- EL 表达式在输出 null 时,输出的是 “”
- jsp 表达式脚本输出 null 的时,输出的是 “null” 字符串
- EL 常用输出形式
- EL 表达式常用输出 Bean 的普通属性、 数组属性、List 集合属性和 map 集合属性
- EL 表达式实例
<%@ page import="java.util.HashMap" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %><%-- Created by IntelliJ IDEA. User: Administrator Date: 2024/6/7 0007 Time: 10:46 To change this template use File | Settings | File Templates. --%> <%@ page isELIgnored="false" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% Map<Integer, String> weekMap = new HashMap<>(); weekMap.put(1, "Monday"); weekMap.put(2, "Tuesday"); weekMap.put(3, "Wednesday"); weekMap.put(4, "Thursday"); weekMap.put(5, "Friday"); weekMap.put(6, "Saturday"); weekMap.put(7, "Sunday"); List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); String s = weekMap.get(1); %> <%=request.setAttribute("weekMap",weekMap)%> <%=request.setAttribute("list",list)%> <%--EL表达式--%> ${weekMap.get(1)} ${list[0]} </body> </html>
- EL 的 11 个隐含对象
- EL 的 11 个隐含对象,可以直接使用
- EL 获取四个特定域中的属性
- EL 四个特定域变量
延伸2——JSTL标签库
JSTL 标签库介绍
- JSTL 标签库 是指 JSP Standard Tag Library JSP 标准标签库
- EL 表达式是为了替换 jsp 中的表达式脚本,JSTL 是为了替换代码脚本。这样 jsp 页面
变得更佳简洁 - JSTL 由五个标签库组成
4. 使用 JSTL,需要导入相关的 jar 包
5. JSTL的几个标签
- <c:set />
- <c:if />
- <c:choose> <c:when> <c:otherwise> 多路判断。跟 switch … case … default 非常接近
- <c:forEach /> 用来遍历输出