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好处:

  1. 可以编写Java代码,编写业务逻辑
  2. 编写HTML+js+css+jquery
  3. 可以使用jsp标签

jsp的本质

  • 执行流程

  • jsp的运行流程:

    • 在浏览器地址中输入“*.jsp/或者 *.jspx”的请求
    • 服务器收到请求之后将这次请求交给 jsp servlet去处理
    • 实际上真正运行的是这个class文件(是一个servlet)

Jsp生成的servlet文件的查找:

Tomcat文件夹中找到work-》Catalina->localhost->自己编译的项目-》org->apache->jsp 就找到编译的源文件和字节码文件 。

jsp的语法

  1. 编译器指令标识类型

    1. jsp有三种指令标签

      1. <%@ 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"%>
      2. <%@ include...%> 包含其他文件,file属性就是所要包含的文件路径,一般用在能够重复利用的地方

        <!-- 包含另外一个页面 -->
        <%@ include file="show.jsp" %>
      3. <%@ taglib...%> 引入标签库的定义,可以是指定义标签

        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. 脚本语法类型

    1. 语法格式如下

      <%! 声明;[声明;]...%>
      <!-- 定义java代码的写法 -->
      <%! int num = 100; %>
    2. <% java代码 %>
      <% String name = "很爱很爱你"; %>
    3. 表达式:输出信息

      1. <%= expression %> 或 <%= 表达式%>
  3. 动作语法类型

    <!-- 动作指令,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四大域对象

  1. page作用域
  2. request作用域
  3. session作用域
  4. 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

  1. 参数隐藏对象

    术语 定义
    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() -- 函数返回一个指定的字符串的开始和结束索引的一个子集

例如:

posted @   站着说话不腰疼  阅读(164)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
点击右上角即可分享
微信分享提示