JSP基础知识

前言:开发需要,有一个老项目,使用的是前后端不分离的框架,前端使用的JSP开发,于是需要恶补JSP的基础知识和语法。以下是学习过程总结的一些有用的基础知识。

推荐学习:
JSP 语法 | 菜鸟教程

简介

Jsp是一个简化的Servlet设计,是在服务器端执行,实现了在Java中使用HTML标签。

JSTL - JSP标准标签库.

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

JSP的实质就是Servlet。JSP由两部分组成:

  • 静态部分:包含标准的HTML标签和静态页面,和HTML基本一致。
  • 动态部分:包含需要从数据库中读取或需要动态生成的内容,实际就是通过Java代码产生的数据内容。

Servlet

Servlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,是一个Java类。

JavaWeb中servlet主要功能是承载网络连接,业务逻辑处理,比如一些编码格式的转换、登录拦截等。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

JSP元素

JSP元素构成:JSP页面组成部分:指令、表达式、小脚本、声明、注释、静态内容。

JSP的脚本必须使用<%%>括起来

指令

JSP一共有三个指令,分别是 page,taglib,include

指令的语法:

<%@指令  属性名="值"  %>
  1. page指令:通常位于JSP页面顶端,定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等。同一个页面可以有多个page指令。

    <%@ page import="foo.,java.util." contentType="UTF-8" %>
    

page指令中指定contentType=“text/html;charset=UTF-8”,就不会出现中文乱码问题。

  1. taglib 指令:用来导入EL函数。当我们在EL中想要调用其它 Java 类时,就会用到这个指令。

    JSP支持标签技术,要使用标签技术就先得声明标签库和标签前缀。taglib指令就是用来指明JSP页面内使用标签库技术

    作用:该指令用于引入外部标签库。html标签和jsp标签不用引入。

    属性:

  • uri:外部标签的URI地址。

  • prefix:使用标签时的前缀。

    c.JSP:
    <%@ taglib prefix="mine" uri="DiceFunctions" %>
    <html>
    <body>
    Hello world
    ${mine:rollIt()}
    </body>
    </html>
    
  1. include 命令:作用为静态包含。静态包含的意思就是:把文件的代码内容都包含进来,再编译。

    静态包含:

    如果我们有很多个 JSP 都有重复的地方怎么办呢,比如说都有页眉与页尾,那么就可以把这些地方抽取出来作为公用部分,使用include 指令来复用这些页面。

    <%@ include file="Header.jsp" %>
    
     动态包含:相当于方法调用,会生成多个源码文件,可以定义同名变量
    

在这里插入图片描述

JSP 行为

在这里插入图片描述

JSP 自带的变量(隐含对象)

在这里插入图片描述

基本语法

脚本程序的语法格式:

<% 代码片段 %>

等价于

<jsp:scriptlet>
   代码片段
</jsp:scriptlet>

任何文本、HTML标签、JSP元素必须写在脚本程序的外面

JSP语法完整示例代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP语法</title>
</head>
<body>

<!--Java代码块-->
<% out.println("这是Java代码块");%>
<hr/>

<!--JSP表达式-->
<%="这是JSP表达式"%><br/>
就相当于<br/>
<%out.println("这是没有JSP表达式输出的");%>

<hr/>
<!--JSP声明-->
<%! String str = "声明语法格式";%>
<%=str%>

<hr/>

<%--JSP注释--%>
<!--HTML注释-->

</body>
</html>
  • 注释

    <%--这里是注释内容--%>
    
  • 声明

    <%!声明部分%>
    
    <%!
    public int num;
    public String name;
    public void speak(){
        out.println("我是JSP声明的方法!");
    }
    %>
    
  • 输出表达式

    <%=表达式%>
    
    等号就相当于Java中的输出语句。
    <%=num%>
    等价于
    <%out.println(num)%>
    

    输出表达式后不能有分号。

  • if else

  • Switch case

  • 循环语句

JSP 语法 | 菜鸟教程
在这里插入图片描述

JSTL - JSP标准标签库.

JSTL 支持以下标签库:

  • Core 标签库

  • XML processing 标签库

  • I18N formatting 标签库

  • Database access 标签库

  • Functions 标签库

core 核心标签库

core 是核心标签库,主要对 JSP页面的一般处理进行了封装。该标签库总共有 14个标签,被分为了四类,分别是:

  1. 多用途核心标签: <c:out>、 <c:set>、 <c:remove>、 <c:catch>

  2. 条件控制标签: <c:if>、 <c:choose>、 <c:when>、 <c:otherwise>

  3. 循环控制标签: `<c:forEach>、 <c:forTokens>``。

  4. URL相关标签: <c:import>、 <c:url>、 <c:redirect>、 <c:param>

总览:
在这里插入图片描述

c:out

用于在JSP中显示数据。

  • 语法:

    <c:out value="" default="" escapeXml="">

在这里插入图片描述

escapeXml 当设置为 false 时会自动将value中特殊字符转换成常用字符,如&nbsp替换成“”,&amp;替换成”&”。设置成true则保持原样:value中是什么值就显示什么值。(可选,默认为 true ).

  • 示例:
<%
    session.setAttribute("name", "zhongfucheng");
%>

    //<c:out/>标签支持标签体,default属性上的数据可以写在标签体中
    //<c:out value="${name}" escapeXml="true">您要的数据找不着</c:out>

    <c:out value="${name}" default="您要的数据找不着" escapeXml="true"/>

<hr />
<!-- escapeXml属性设置成false --><!-- 结果:AAA-->
<c:out value="AAA " default="" escapeXml="false"></c:out>

c:set

用来为变量或 JavaBean中的变量属性赋值。

  • 语法:

    <c:set value=""  var=""  scope="" ></c:set>
    

在这里插入图片描述

  • value 是值,数据信息(如用来显示的数据),可以是 EL 表达式或常量 (必须)

  • var 属性操作的是Integer、Double、Float、String等类型的数据(将value的值赋给val中的变量)(可选)

  • target 属性操作的是JavaBean或Map对象的名称·(可选)

  • scope 是变量的作用Web域:page、request、session、application。若没有指定,默认为保存于 page 范围中的变量(可选)

  • property是JavaBean 实例的属性名称。(与target属性同时存在)

<c:set var="name" value="fucheng" scope="page"/>

${name} <!-- 结果:fucheng-->

<c:set value="AAA"  var="a"  scope="session" ></c:set>
${a}<!-- 结果:AAA-->

c:remove

用于删除存在于scope 中的变量。

  • 语法:

    <c:remove var="" scope="" ></c:remove>
    

在这里插入图片描述

<c:set value="BBB"  var="b"  scope="session" ></c:set>
${b}<!-- 结果:BBB-->
<c:remove var="b" scope="session" ></c:remove><!-- 若是去掉remove标签,结果 则是:BBB BBB BBB  -->
${b}<!-- 结果:空-->
${sessionScope.b }<!-- 结果:空-->

c:catch

用于在 JSP页面中捕捉异常。

  • 语法:
<c:catch var=""></c:catch>

在这里插入图片描述

格式化标签

在这里插入图片描述

SQL标签

在这里插入图片描述

XML 标签

JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:

<%@ taglib prefix=“x” uri=“http://java.sun.com/jsp/jstl/xml” %>

在使用xml标签前,你必须将XML 和 XPath 的相关包拷贝至你的<Tomcat 安装目录>\lib下:

  • XercesImpl.jar

    下载地址: http://www.apache.org/dist/xerces/j/

  • xalan.jar

    下载地址: http://xml.apache.org/xalan-j/index.html

标签描述
<x:out>与<%= … >,类似,不过只用于XPath表达式
<x:parse>解析 XML 数据
<x:set>设置XPath表达式
<x:if>判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
<x:forEach>迭代XML文档中的节点
<x:choose><x:when>和<x:otherwise>的父标签
<x:when><x:choose>的子标签,用来进行条件判断
<x:otherwise><x:choose>的子标签,当<x:when>判断为false时被执行
<x:transform>将XSL转换应用在XML文档中
<x:param>与<x:transform>共同使用,用于设置XSL样式表
<x:otherwise><x:choose>的子标签,当<x:when>判断为false时被执行
<x:transform>将XSL转换应用在XML文档中
<x:param>与<x:transform>共同使用,用于设置XSL样式表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/478093.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis总结(持续补充),kafka和mq的区别面试

配置环境&#xff1a;需要引入Mybatis的一个jar包 然后写一个mybatis-config.xml的配置文件里面写着mybatis的核心配置文件&#xff0c;例如&#xff1a;连接的哪个数据库&#xff0c;资源文件的注册&#xff08;Mapper.xml等&#xff09; 书写一个MybatsiUtils工具类封装一个…

Monoxer Programming Contest 2024(AtCoder Beginner Contest 345)(A,B,C,D,E,F)

比赛链接 这场。。。好像已经是一周之前的比赛来着&#xff0c;终于补完了。 C是个披着字符串外衣的数学容斥题。D是个超级超级暴力的爆搜&#xff0c;写起来超级麻烦&#xff0c;感觉。。。真是一次酣畅淋漓的赤石。E是个DP&#xff0c;朴素想法其实比较直观&#xff0c;不过…

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好&#xff0c;我是淘小白~ 首先&#xff0c;感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新&#xff0c;此次版本更新修改增加了一些内容&#xff1a; 1、自定义多条指令&#xff0c;软件自动判断指令条数&#xff0c;进行输入 2、增加谷歌浏览多账号轮询&#xf…

了解Kafka位移自动提交的秘密:避免常见陷阱的方法

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 了解Kafka位移自动提交的秘密&#xff1a;避免常见陷阱的方法 前言位移自动提交简介自动提交的优缺点自动提交位移的优点&#xff1a;自动提交位移的缺点&#xff1a;自动提交与手动提交的对比分析&am…

vuex - 21年的笔记 - 后续更新

vuex是什么 Vuex是实现组件全局状态&#xff08;数据&#xff09;管理的一种机制&#xff0c;方便的实现组件之间的数据的共享 使用vuex统一管理状态的好处 能够在vuex中集中管理共享的数据&#xff0c;易于开发和后期维护能够高效地实现组件之间的数据共享&#xff0c;提高…

如何系统的入门大模型?

GPT图解&#xff0c;从0到1构建大模型。 本书将以生动活泼的笔触&#xff0c;将枯燥的技术细节化作轻松幽默的故事和缤纷多彩的图画&#xff0c;引领读者穿梭于不同技术的时空&#xff0c;见证自然语言处理技术的传承、演进与蜕变。在这场不断攀登技术新峰的奇妙之旅中&#xf…

数据安全运营:难点突破与构建策略全解析

小型企业关注基础安全运营&#xff0c;重点把安全产品“管好”和“用好”。大型企业通过SOC平台&#xff08;安全运营中心&#xff09;把所有安全产品串联起来&#xff0c;对大量的日志进行关联分析&#xff0c;发现事件和告警。通过SOAR平台把运营工作中能“自动化”内容进行预…

修改Linux系统时间与网络同步

文章目录 1、安装ntpdate2、修改时区3、设置系统时间与网络时间同步4、将系统时间写入硬件时间 1、安装ntpdate # Red Hat和Cent OS系统 sudo yum install ntpdate # 乌班图 sudo apt-get install ntpdate2、修改时区 1&#xff09;运行tzselect tzselect2&#xff09;选择A…

H4012耐压30V降压恒压芯片 30V降12V降5V 支持电流3A

耐压30V降压恒压芯片的工作原理如下&#xff1a; 该芯片内部集成了开关管和同步整流管&#xff0c;通过它们进行电压的转换&#xff0c;将输入的30V电压降至所需的输出电压&#xff08;如12V或5V&#xff09;。在工作过程中&#xff0c;该芯片通过PWM&#xff08;脉冲宽度调制…

一套键盘鼠标控制两台电脑 Mouse Without Borders

有两台电脑&#xff0c;一台笔记本一台台式机&#xff0c;拥有各自拥有鼠标和键盘&#xff0c;但总是需要切换&#xff0c;感觉太麻烦&#xff0c;想找个简单的方式&#xff0c;不需要额外操作就能同时操作这两台电脑。无意间发现了一个微软软件Mouse Without Borders&#xff…

项目起冲突,掌握这个模型的人,赢麻了!

在项目管理中&#xff0c;冲突是项目经理们无法避免的一环。在职场中&#xff0c;大家都是如何解决矛盾冲突的呢&#xff1f; 一、项目起冲突的原因及解决方法 项目管理过程中&#xff0c;冲突的产生&#xff0c;往往源自于多个方面&#xff0c;但无论是出于何种原因的项目冲…

#Linux(连接档概念)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;硬链接&#xff08;inode&#xff0c;建立硬链接的文件inode号相同&#xff09; &#xff08;2&#xff09;创建硬链接:ln 文件名1 文件名…

项目中如何进行限流(限流的算法、实现方法详解)

❤ 作者主页&#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是李奕赫&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习!!!&#x1f389;&#x1f389; 文章目录 限流的算法漏…

quartz整合前端vue加后端springboot

因工作需求&#xff0c;需要能修改定时的任务&#xff0c;前端vue3&#xff0c;后端是springboot 看看页面效果&#xff1a; 首先maven加上引入 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><versi…

日常 ------------ (一)

使用xdd 生成 firmware.cc 文件 &#xff0c;然后程序根据需要自己解压缩,也可以完成软件升级状态的监控 objcopy 此等神奇也可以&#xff0c;但是威力太大&#xff0c;容易玩崩&#xff0c;没敢尝试

Solo 开发者周刊 (第8期):Claude公司再度上新产品,成交额将超73亿美元

这里会整合 Solo 社区每周推广内容、产品模块或活动投稿&#xff0c;每周五发布。在这期周刊中&#xff0c;我们将深入探讨开源软件产品的开发旅程&#xff0c;分享来自一线独立开发者的经验和见解。本杂志开源&#xff0c;欢迎投稿。 好文推荐 Claude是否超过Chatgpt,成为生成…

Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证

昨日&#xff0c;Redis 官方宣布了一项重要变更&#xff1a;他们将修改开源协议&#xff0c;未来所有版本将采用 “源代码可用” 的许可证。 具体来说&#xff0c;Redis 不再使用 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始&#xff0c;Redis 将采用 SSPLv1 和 RSA…

【C语言】自定义类型:联合体和枚举

1. 联合体 1.1 联合体类型的声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成员可以是不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫&#xff1a;共用体。 给联合…

Binance labs孵化的Swan Chain明牌空投测试网零撸教程

简介&#xff1a;Swan Chain 是一个 Layer2云计算网络&#xff0c;可以将数据、计算、带宽和支付集成到一个套件&#xff0c;为Web3项目提供全面的解决方案。 相关概念&#xff1a;云计算、layer2、infrastructure 融资信息&#xff1a;项目在去年获得bi’an领投的300万美元融…

【pip安装时出现一大片红色报错】 raise ReadTimeoutError(self._pool, None, “Read timed out.“)

【pip安装时出现一大片红色报错】 raise ReadTimeoutError(self._pool, None, “Read timed out.”) 问题描述&#xff1a;pip 安装包时出现一大片莫名其妙的报错 raise ReadTimeoutError(self._pool, None, “Read timed out.”) pip._vendor.urllib3.exceptions.ReadTimeout…