认识与学习JSP

JSP核心技术

什么是JSP

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是Servlet

JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据

JSP最佳实践

不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术有各自的特点,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示交给jsp来做, 在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。

JSP语法

JSP模版元素

JSP表达式

JSP脚本片断

JSP注释

JSP指令

JSP标签

JSP内置对象

如何查找JSP页面中的错误

JSP模板元素

JSP页面中的HTML内容称之为JSP模版元素。

JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观

JSP脚本表达式

JSP脚本表达式(expression)用于将程序数据输出到客户端

语法:<%= 变量或表达式 %>

举例:当前时间:<%= new java.util.Date() %>

JSP脚本表达式中的变量或表达式后面不能有分号

JSP脚本片段

JSP脚本片断,用于在JSP页面中编写多行Java代码。

语法:

<%

       多行java代码

%>

注意:

JSP脚本片断中只能出现java代码,不能出现其它模板元素

JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。

案例:

1,在jsp脚本中定义一个时间变量,然后采用脚本表达式输出该变量

2,循环打印100行的表格

JSP声明

JSP页面中编写的所有代码,默认会翻译到servlet的service方法中,而Jsp声明中的java代码被翻译到_jspService方法的外面。语法

<%!

    java代码

%>

观察生成的代码效果

JSP注释

JSP注释的格式:

<%-- 注释信息 --%>

JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容.

注意:它与HTML中的注释有什么不同

JSP指令

JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。在JSP 2.0规范中共定义了三个指令:

page指令

include指令

taglib指令

JSP指令的基本语法格式:

<%@ 指令 属性名="值" %>

举例:<%@ page contentType="text/html;charset=utf-8"%>

如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。

<%@ page contentType="text/html;

charset=utf-8" import="java.util.Date"%>

也可以这样写

<%@ page contentType="text/html;charset=utf-8"%>

<%@ page import="java.util.Date"%>

JSP的page指令

page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。

JSP 2.0规范中定义的page指令的完整语法:

<%@ page

    [ import="{package.class | package.*}, ..." ]

    [ errorPage="relative_url" ]

    [ isErrorPage="true | false" ]

    [ contentType= "text/html ; charset=ISO-8859-1" ]

%>

可以在一条page指令的import属性中引入多个类或包,其中的每个包或类之间使用逗号分隔:

<%@ page import="java.util.Date,java.sql.*,java.io.*"%>

上面的语句也可以改写为使用多条page指令的import属性来分别引入各个

include指令

include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入

语法:

<%@ include file=“被包含页面的绝对URL或相对URL"%>

其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。

细节:

被引入的文件必须遵循JSP语法。

被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp

页面的方式处理它里面的内容,

为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名

案例:

网页头部显示当前时间,这个头部信息需要复用,那么就可以在多个页面进行引入操作

PageEncoding是jsp翻译成Java文件时用到的编码格式

ContentType是指服务器给客户端响应时的内容编码

taglib指令

taglib指令用于在JSP页面中导入标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

JSP的内置对象

每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。

由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。

JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

这9个对象分别是哪些,以及作用也是笔试经常考察的知识点。

request -- HttpServletRequest

response -- HttpServletResponse

config -- ServletConfig

application -- ServletContext

exception(只有在page指令中具有属性isErrorPage="true"时才有效)-- Exception

session -- HttpSession

page -- 当前类

out -- JspWriter

pageContext -- PageContext

pageContext对象和作用域

pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据

getException方法返回exception隐式对象

getPage方法返回page隐式对象

getRequest方法返回request隐式对象

getResponse方法返回response隐式对象

getServletConfig方法返回config隐式对象

getServletContext方法返回application隐式对象

getSession方法返回session隐式对象

getOut方法返回out隐式对象

pageContext封装其它8大内置对象的意义

pageContext作为域对象

pageContext对象的方法

public void setAttribute(java.lang.String name,java.lang.Object value)

public java.lang.Object getAttribute(java.lang.String name)

public void removeAttribute(java.lang.String name)

pageContext对象中还封装了访问其它域的方法

public java.lang.Object getAttribute(java.lang.String name,int scope)

public void setAttribute(java.lang.String name, java.lang.Object value,int scope)

public void removeAttribute(java.lang.String name,int scope)

代表各个域的常量

PageContext.APPLICATION_SCOPE

PageContext.SESSION_SCOPE

PageContext.REQUEST_SCOPE

PageContext.PAGE_SCOPE

JSP标签

JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

<jsp:include>标签 

<jsp:forward>标签 

<jsp:param>标签

<jsp:include>标签

<jsp:include>标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入

语法:

        <jsp:include page="relativeURL" />

page属性用于指定被引入资源的相对路径

<jsp:include>与include指令的比较

一个是动态导入,一个是静态导入

<jsp:forward>标签

<jsp:forward>标签用于把请求转发给另外一个资源。

语法:

    <jsp:forward page="relativeURL | <%=expression%>" />

page属性用于指定请求转发到的资源的相对路径

<jsp:param>标签

当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其它资源时,可以使用<jsp:param>标签向这个资源传递参数。

语法1:

<jsp:include page="hhy.jsp | <%=expression%>">

    <jsp:param name="parameterName" value="parameterValue|<%= expression %>" />

</jsp:include>

语法2:

<jsp:forward page="relativeURL | <%=expression%>">

    <jsp:param name="parameterName" value="parameterValue|<%= expression %>" />

</jsp:forward>

EL

EL表达式:expression language 表达式语言

它不是一种开发语言,是jsp中获取数据的一种规范

注意:EL表达式查找的范围顺序,以及如何获取请求的参数信息

案例一:

    <%-- JSP脚本来存放值,然后采用EL表达式来获取值 --%>

    <%

       request.setAttribute("el", "来自request域存放的数据");

    %>

   

    <%-- 通过EL表达式获取该值 --%>

    ${el}

    <%=request.getAttribute("el") %>

通过设置多个区域的数据,来观察EL表达式获取值的顺序

另外,怎样采用EL表达式获取到请求参数?

案例二:

EL表达式对于null情况的处理,即不存在对应的key时,是怎么显示的?

案例三:

属性导航(对象获取属性,获取List的元素,获取Map的元素)

<%

       Book book = new Book(1001,"Java探索之旅",99.9);

       request.setAttribute("book", book);

    %>

    ${book.bookName}

<%

       List<Book> list = new ArrayList<Book>();

       list.add(new Book(1001,"Java探索之旅",99.9));

       list.add(new Book(1002,"技术探索之旅",199.9));

       list.add(new Book(1003,"宇宙探索之旅",999.9));

      

       request.setAttribute("list", list);

    %>

   

    ${list[0].bookName}

<%

       Map<String,String> map = new HashMap<String,String>();

       map.put("1001", "目标一:每天比昨天懂得多一点");

       map.put("1002", "目标二:每个星期有一个专项的提升");

       map.put("1003", "目标三:每个月有一个系统的提升");

      

       request.setAttribute("map", map);

    %>

   

    ${map["1001"]}

案例四:

三元运算符结合结果来做信息提示

${empty cart}

${empty cart ? "您的购物车尚无商品" : "您的购物车商品信息如下:" }

数据的回显

<%

    request.setAttribute("sex", 1);

%>

<input type="radio" name="sex" value="1" ${sex==1 ?"checked='checked'" : ""}/>

<input type="radio" name="sex" value="0"

${sex==0 ? "checked='checked'" : ""}/>

JSTL

什么是JSTL

JSTL(JavaServerPages Standard Tag Library)JSP标准标签库

2、JSTL的作用

使用JSTL实现JSP页面中逻辑处理。如判断、循环等。

3、使用JSTL

1)在JSP页面添加taglib指令

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

2)使用JSTL标签

<c:if test="${empty cart}">您的购物车尚无商品</c:if>

4、常用标签介绍

 1)通用标签: set、 out、 remove

 

2)条件标签:if  choose

3)迭带标签:foreach

案例一:实现普通for循环,打印多个数字

案例二:遍历一个集合数据,并实现隔行换色的效果

格式化

首先,引入

<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

案例一:日期格式化

比如对象保存的属性为日期类型,希望展示的结果是我们期望的日期格式

案例二:格式化小数,保留两位小数点

案例三:百分比格式化

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里新发布的UniAnimate现高效人像动画生成;在ComfyUI中使用Stable 3模型;音频版的gpt2o;将 PDF 文档转换为音频播客

✨ 1: UniAnimate 阿里新发布的UniAnimate通过统一的视频扩散模型&#xff0c;实现高效人像动画生成&#xff0c;支持长视频生成 UniAnimate 是一种专注于一致性人像动画生成的统一视频扩散模型。该模型通过映射参考图像、姿势指导和噪声视频到一个共同特征空间&#xff0c;实…

ZED双目相机环境配置

官方资料&#xff1a;stereolabs/zed-python-api: Python API for the ZED SDK (github.com) 1&#xff0c;配置ZED相机环境 1.安装CUDA 查看电脑是否安装CUDA&#xff0c;安装过程可参考以下博文&#xff1a; 如何选择匹配的CUDA版本&#xff1a;https://blog.csdn.net/iam…

MoCo v3(ICCV 2021)

paper&#xff1a;An Empirical Study of Training Self-Supervised Vision Transformers official implementation&#xff1a;https://github.com/facebookresearch/moco-v3 出发点 本文并没有提出一种新的方法&#xff0c;而是对计算机视觉领域最近进展中的一个重要且基础…

C++杂记

文章目录 前言cin1. getline(cin, str)2. cin.getline(arr, number)3. cin.get()4. cin >> variable_name5. cin.clear(); 动态内存1. 可以在动态声名数组的同时进行初始化。 数组1. &arr[0]2. &arr3. 数组输入指定长度和非数字时&#xff0c;停止 前言 在写《C…

C++中的组合模式

目录 组合模式&#xff08;Composite Pattern&#xff09; 实际应用 文件系统 组织结构 图形对象 总结 组合模式&#xff08;Composite Pattern&#xff09; 组合模式是一种结构型设计模式&#xff0c;它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使…

沃尔玛自养号测评:优势与技术要求解析

沃尔玛自养号测评是一种卖家在沃尔玛平台上提升店铺权重和排名的营销手段。传统运营策略的局限性日益显现&#xff0c;如营销手段单一、难以应对市场竞争等。因此&#xff0c;许多卖家为了提升店铺权重和排名&#xff0c;选择了自养号测评这一技术手段。 以下是对沃尔玛自养号…

关于BERT和embedding

embedding到一个低维向量&#xff0c;但是需要回到onehot高维表示&#xff0c;所以大部分填词游戏最后都需要加上一个MLP接头。 word2vec如此简单的结构&#xff0c;学习到的是embedding 基于计数的统计方法和word2vec融合就形成了glove词嵌入模型 总结&#xff1a;通过各种…

消费者消费数据时报错:INVALID_REPLICATION_FACTOR

今天部署了kafka集群&#xff0c;三台服务器&#xff0c;启动后&#xff0c;生产者发送数据&#xff0c;消费者接收数据的时候报错&#xff0c;INVALID_REPLICATION_FACTOR。 查了很多资料&#xff0c;说是要改kafka下config目录的server.properties,可能是副本数太小&#xff…

WPS中XLS表格使用的技巧记录

我遇到一个问题&#xff0c;xls表格中有一列数据的格式是会计专用&#xff0c;金额前面有货币符号&#xff0c;但是我想复制这列数据为普通的文本&#xff0c;并且在后面添加.00&#xff0c;有什么方法可以做到。 TEXT(B2, “0”) & “.00”

【第5章】Stable Diffusion大模型(简介/两种版本/安装/模型推荐/使用方式)ComfyUI基础入门教程

🍩 大模型简介 大模型,又称为Stable Diffusion模型,所有Stable Diffusion的绘图都是以该模型能力为基础上进行的。 发展到现在,大模型已经更新了很多个版本,大家听说过的可能有Stable Diffusion 1.4(简称SD1.4),Stable Diffusion 1.5(简称SD1.5),Stable Diffusion 2.0…

【react】如何合理使用useEffect

useEffect 是 React Hooks API 的一部分,它允许你在函数组件中执行副作用操作,比如数据获取、订阅或者手动更改 DOM。合理使用 useEffect 可以帮助你管理组件的生命周期行为,同时避免不必要的渲染和性能问题。以下是一些关于如何合理使用 useEffect 的建议: 明确依赖项: 当…

【计算机视觉】人脸算法之图像处理基础知识(四)

图像的几何变换 图像的几何变换是指在不改变图像内容的前提下对图像的像素进行空间几何变换。主要包括图像的平移变换、镜像变换、缩放和旋转等。 1.插值算法 插值通常用来放缩图像大小&#xff0c;在图像处理中常见的插值算法有最邻近插值法、双线性插值法、二次立方、三次…

sap怎么批量给信息记录打上删除标识

1.MEMASSIN-----事务代码 2.选择完成字段 3.根据条件查询需要冻结的信息记录 4.输入查询条件 5.全部勾选完成标识&#xff0c;点击保存&#xff0c;即可冻结完成

特殊矩阵:零矩阵(Zero)幺矩阵(Ones)单位矩阵(Identity)随机矩阵(Random)#matlab

在MATLAB中&#xff0c;通用的特殊矩阵主要包括以下几种&#xff0c;每种都有其特定的函数来创建&#xff1a; 零矩阵&#xff08;Zero Matrix&#xff09; 使用zeros函数创建,&#xff0c;元素全为0。 格式&#xff1a; zeros(m, n): 创建一个m行n列的零矩阵。 zeros(n):…

盘点国内外免费AI视频工具,助你先人一步拥抱AI

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 6月13日&#xff0c;Luma AI 在 X 平台&#xff08;原 Twitter&#xff09;宣布其视频生成模型 Dream Machine 开放测试&#xff0c;并提供免费试用&#xff0c;这在海外 AI 圈掀起了一…

配置中心理论学习

配置中心是一种用于集中管理应用程序配置信息的系统或服务。在微服务架构中&#xff0c;由于服务数量众多且可能分布在不同的环境中&#xff0c;配置中心的作用尤为突出。它允许开发者将配置信息从应用程序代码中分离出来&#xff0c;集中存储和管理&#xff0c;从而提高配置的…

C#防止多次注册事件

事件声明和使用部分的代码&#xff0c;防止多次注册事件主要通过判断事件中类型的委托实例是否为空实现 public class ReRegisterEvent {public delegate void Mydelegate(string message);private Mydelegate? mydel;public event Mydelegate Myevent{add{if (mydel null){…

买什么样的护眼大路灯比较好?五款专业级别的护眼灯推荐

在这个生活节奏的加快和科技的进步的时代&#xff0c;许多家长越来越关注生活质量以及身心健康问题。其中孩子的眼睛视力健康也逐渐引起了家长们的注意。 现在的孩子从早上睁开眼就开始学习&#xff0c;有时候还需要使用到电子产品辅助学习&#xff0c;晚上的写作业的情况更是…

【perl】基本语法 /备忘录/

分享 perl 语言学习资源 Perl 教程|极客教程 (geek-docs.com) Perl [zh] (runebook.dev) Perl 运算符 | 菜鸟教程 (runoob.com) Perl Documentation - Perldoc Browser Search the CPAN - metacpan.org 当然还有一些经典书籍&#xff0c;不再列举。 1、数字 1.1、数字表…

判断QT程序是否重复运行

打开exe&#xff0c;再次打开进行提示。 main.cpp添加&#xff1a; #include "QtFilePreview.h" #include <QtWidgets/QApplication> #include <windows.h> #include <qmessagebox.h> #pragma execution_character_set("utf-8")bool Ch…