4、JSP
jsp
jsp是什么?
jsp(全称 JavaServer Pages) 是一个动态的网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,可以根据内容动态的生成HTML、XML或其他格式的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其他Java程序共同处理复杂的业务需求。
jsp本质就是一个servlet的类,在运行jsp文件的时,会被编译成一个servlet的类,所以也能在jsp里面嵌入Java代码。
jsp的组成:html+js+css+java脚本(Java代码片段)+jsp的标签。
jsp好处:
- 可以编写Java代码,编写业务逻辑
- 编写HTML+js+css+jquery
- 可以使用jsp标签
jsp的本质
-
执行流程
-
jsp的运行流程:
- 在浏览器地址中输入“*.jsp/或者 *.jspx”的请求
- 服务器收到请求之后将这次请求交给 jsp servlet去处理
- 实际上真正运行的是这个class文件(是一个servlet)
Jsp生成的servlet文件的查找:
Tomcat文件夹中找到work-》Catalina->localhost->自己编译的项目-》org->apache->jsp 就找到编译的源文件和字节码文件 。
jsp的语法
-
编译器指令标识类型
-
jsp有三种指令标签
-
<%@ page...%> 定义页面的依赖属性,比如脚本语言,error页面,缓存需求能
<%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@page import="com.po.Student"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -
<%@ include...%> 包含其他文件,file属性就是所要包含的文件路径,一般用在能够重复利用的地方
<!-- 包含另外一个页面 --> <%@ include file="show.jsp" %> -
<%@ taglib...%> 引入标签库的定义,可以是指定义标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-
-
脚本语法类型
-
语法格式如下
<%! 声明;[声明;]...%> <!-- 定义java代码的写法 --> <%! int num = 100; %> -
<% java代码 %> <% String name = "很爱很爱你"; %> -
表达式:输出信息
-
<%= expression %> 或 <%= 表达式%>
-
-
-
动作语法类型
<!-- 动作指令,jsp:forword 请求转发 --> <%--<jsp:forward page="show.jsp"></jsp:forward>--%> <!-- 动作指令:jsp:include 动态包含--> <%-- <jsp:include page="show.jsp"></jsp:include> --%>
注释
jsp注释语法有两种:
格式一: 快捷键:ctrl+shift+/
这种注释发送到客户端,但不直接显示,可以在源代码中查看。
格式二:<%-- 注释 --%>
不发送到客户端。
jsp隐藏(内置,隐含)对象
隐藏对象就是在jsp页面中无需创建就可以直接使用的变量。
在jsp中一共有9个这样的对象!分别是:
隐式对象 | 说明 |
---|---|
request | 转译后对应HttpServletRequest/ServletRequest对象 |
response | 转译后对应HttpServletResponse/ServletResponse对象 |
session | 转译后对应HttpSession对象 |
application | 转译后对应ServletContext对象 |
out | 转译后对应JspWriter对象,其内部关联PrintWriter |
page | 转译后对应this |
config | 转译后对应ServletConfig对象 |
exception | 转译后对应Throwable对象 |
pageContext | 转译后对应PageContext队象,它提供了jsp页面资源的封装,并设置页面范围属性 |
2.2****隐藏对象概述
1、out 来源于Java.io.Writer类,它用于输出流到客户端。(了解)
2、request 来源于javax.servlet.http.HttpServletRequest接口。它被关联到每一个HTTP请求。
3、response 来源于javax.servlet.http.HttpServletResponse。response对象用于把取得的数据返回到客户端。(了解)
4、pageContext 提供访问JSP页面的命名空间。它也提供用来访问其他的JSP隐含对象。
5、session 来源于javax.servlet.http.HttpSession。它用于存储客户端请求的信息,因此它是有状态交互式的。
6、application 来源于javax.servlet.ServletContext。
7、config 来源于ServletConfig,它包含了当前JSP/Servlet所在的WEB应用的配置信息。(了解)
8、page 来源于当前被访问JSP页面的实例化。它实际使用的是JSP转换成的Servlet。(了解)
9、exception 用于捕获JSP抛出的异常。它只有在JSP页面属性isErrorPage=true时才可用。(了解)
jsp四大域对象
- page作用域
- request作用域
- session作用域
- application作用域
PageContext类中包含四个int类型的常量标识四个范围:
PageContext.setAttribute(String name,String value, int scope);
PAGE_SCOPE:pageContext范围;
REQUEST_SCOPE:request范围;
SESSION_SCOPE:session范围;
APPLICATION_SCOPE:application范围;
EL表达式
什么是EL表达式?
E L (Expression Language) 为使Jsp使用起来更加简便。简化类表达式的方法。它是一种简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。
语法
${表达式 }
<!-- EL两种格式 --> <!-- 第一种 通过 .属性 --> ${list[1].name } <!-- 第二种通过 ["属性"] 一般用在特殊符号 --> ${list[1]["password"] } <% Student stu = new Student("旺财","18"); Student stu2 = new Student("旺财2","182"); List list = new ArrayList(); list.add(stu); list.add(stu2); pageContext.setAttribute("list", list); %>
EL隐藏对象
在EL表达式中,无需创建就可以使用的对象称之为EL隐藏(隐含、内置)对象。在EL中一共有11个隐藏对象,它们都与Map相似。其中10是Map,一个是 PageContext
-
参数隐藏对象
术语 定义 param 将请求参数名称映射到单个字符串参数值(通过调用ServletRequest.getParameter (String name) 获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 ${param . name}相当于request.getParameter (name)。如:1.jsp页面form表单设置name值,2.jsp页面获取; paramValues 将请求参数名称映射到一个数值数组(通过调用ServletRequest.getParameter (String name) 获得)。它与param隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name} 相当于request.getParamterValues(name)。 header 将请求头名称映射到单个字符串头值(通过调用ServletRequest.getHeader(String name) 获得)。表达式 ${header. name} 相当于request.getHeader(name)。 headerValues 将请求头名称映射到一个数值数组(通过调用ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于request.getHeaderValues(name)。 cookie 将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cookie. name .value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用${headerValues. name} 表达式。 initParam 将上下文初始化参数名称映射到单个值(通过调用ServletContext.getInitparameter(String name) 获得)。 4.3.2域隐藏对象
术语 定义 pageScope 将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象,还可以使用 ${pageScope.objectName. attributeName} 访问对象的属性。 requestScope 将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 ${requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScope. objectName. attributeName} 访问对象的属性。 sessionScope 将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如:$ applicationScope 将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。 .3.3页面上下文隐藏对象
pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest,可以${pageContext.request}。
4.4EL运算符
运算符 说明 范例 结果 + 加 $ 22 - 减 $ 12 * 乘 $ 85 /或div 除 或 3 %或mod 取余 Extra open brace or missing close brace 2 ==或eq 等于 或 true !=或ne 不等于 或 false <或lt 小于 或 true >或gt 大于 或 false <=或le 小于等于 或 true >=或ge 大于等于 或 false &&或and 并且 Misplaced & false !或not 非 或 false ||或or 或者 或 true 4.5禁用EL表达式
注意<%@ page isELIgnored="true" %>表示是否禁用EL语言,TRUE表示禁止,FALSE表示不禁止。
JSP2.0中默认的启用EL语言。
JSTL概述
什么是jstl?
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。主要提供给Java Web开发人员一个标准通用的标签函数库。
既然是第三方的东西,那么就需要导包。
导入标签库
导入标签库需要使用taglib指令
引入核心类库
<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core" %>(重点)
引入格式化标签库
<%@taglibprefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
引入EL函数标签库
<%@taglibprefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
用法:
<body> <% pageContext.setAttribute("username", "1123"); %> <!-- jstl核心标签 --> <!-- out 输出 --> <c:out value="${username }"></c:out> <!-- set 设置一个变量 --> <c:set var="name" value="旺财"></c:set> <c:out value="${name }"></c:out><br/> <!-- remove 移除一个变量 --> <c:remove var="name"/> --------<c:out value="${name }"></c:out><br/> <!-- url 获取上下文路径(项目名)--> <c:url value="/jsp"></c:url> <br/> <!-- if choose --> <c:set var="names" value="aa"></c:set> <!-- if test里面是boolean值 --> <c:if test="${names eq 'aa' }"> haha </c:if><br> <!-- choose --> <c:choose > <c:when test="${5>6 }">bu</c:when> <c:when test="${5>7 }">77</c:when> <c:otherwise>您都不成立</c:otherwise> </c:choose> <p></p> <!-- foreach --> <% List list = new ArrayList(); list.add("大黄"); list.add("旺财"); list.add("西安"); pageContext.setAttribute("list", list); %> <c:forEach var="namess" items="${list }"> ${namess }<br> </c:forEach> </body>
5.4 EL函数库
5.4.****1什么EL函数库
EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是由JSTL添加的。EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!相关函数:
fn:contains() -- 函数判断输入的字符串是否包含指定的子串
fn:startsWith() -- 函数判断输入的字符串是否为指定的子串开始
fn:endsWith() -- 函数判断输入的字符串是否与指定的后缀结束
fn:toLowerCase() -- 函数将所有字符转换为小写的字符串
fn:toUpperCase() -- 函数将所有字符转换转换为大写
fn:trim() -- 函数把字符串两端空白空格删除等
fn:replace() -- 函数替换所有出现的字符串与另一个字符串
fn:substring() -- 函数返回一个指定的字符串的开始和结束索引的一个子集
例如:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!