JSP使用

news2025/1/23 12:44:11

目录

简介

作用

创建

结构

常用脚本

声名脚本

表达式脚本

代码脚本 

注释

九大内置对象

四大域对象

out与response.getWriter

静态引入

动态引入

EL表达式

作用

语法

取值顺序

获取指定参数

输出指定对象的数据

运算符

算数运算符

关系比较

逻辑运算符

判空

隐式对象


        使用Servlet返回前端页面代码编写较为复杂,并且维护与修改成本较高

简介

        JSP (Java Server Pages) 基于Servlet技术的、运行在服务器之上、支持Java语言的动态网页技术。实际上JSP就是一个Servlet,当客户端请求一个JSP文件时,JSP文件会在服务器中转换成Servlet来执行。

作用

         替换显示页面部分的Servlet

创建

        在web文件夹下创建

结构

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

</body>
</html>

属性,page指令:  


contentType:当前响应数据类型与编码格式

language:翻译后支持的语言,目前只支持Java

pageEncoding:设置当前编码格式

 import:导包,编译器可以自动导

autoFlush:输出流缓冲区,满了是否自动刷新,默认是true,如果改为false,当缓冲区满了以后会报错

buffer:缓冲区大小,默认8kb

errorPage:当前页面出现异常时跳转的页面

isErrorPage:当前页面是否为错误页面,默认值为false,如果为true表示捕获异常信息

session:当前页面是否会创建session对象,默认是true

extends:指定父类

常用脚本

声名脚本

作用:声名

语法:<%!  声名的东西  %>

</head>
<body>
        <%!
            private  int num;
            private List<String> str;
            static {
                
            }

        %>

</body>

可以声名很多东西:基本数据,引用数据,静态代码块,方法,内部类

表达式脚本

作用:在jsp页面输出

语法:<%=  写输出的内容  %>

 <%= "6666"%>

地址

代码脚本 

作用:在jsp页面写java代码

语法:<%  写代码  %>

注释

语法<%--  注释内容  -->

九大内置对象

jsp中的内置对象,是指Tomcat在翻译jsp页面成为Servlet源代码后,提供的九个对象

        request:请求对象

        response:响应对象

        pageContext:jsp的上下文对象,可以获取当前JSP的任何信息

        session:会话对象

        application:ServletContext对象

        config:ServletConfig对象

        out:输出流对象

        page:指向当前jsp的对象,相当于this

        exception:异常对象,注意需要在page指令中设置isErrorPage="true",

四大域对象

九大内置对象中用来存储数据的四个对象

域对象:可以存储数据的对象

        pageContext:当前jsp页面中有效

        request:一次请求中使用

        session:一次会话中使用,从浏览器第一次访问该项目到浏览器关闭

        application:当前Tomcat中,从服务器打开到服务器关闭

out与response.getWriter

相同:都是给页面输出

不同:response先于out执行

原因:out输出时会先执行flush方法将输出的内容追加到response尾部导致的

        response中表示响应,经常用于设置返回给客户端的内容,out也是给用户做输出使用的。

        当jsp页面中所有代码执行完成后会执行out.flush操作,会把out缓冲区中的数据追加写入到response缓冲区末尾,会执行response的刷新操作,把全部数据写给客户端

write:输出整型时会将数字转为字符输出

out.write();

print:先将类型转为字符串,再调用write

out.print()

        在jsp页面中统一使用out.print()输出,既可以防止数据输出顺序错乱又可以保证数字不 会转换为字符输出。

静态引入

include指令

语法:<%@ include file = " 引入的jsp文件 "%>

        静态引入两个jsp文件编译成一个java文件,除了page指令,两个jsp文件中可以共享同一个变量,但不能定义重名的变量。

动态引入

语法:<jsp:include page = " 引入的jsp页面">

        通过代码引入另一个页面,动态引入会生成两个java文件,两个jsp文件中不可以共享同一个变量,可以定义重名的变量。

转发

<jsp:forward page="/b.jsp">

</jsp:forward>

带值里面写

试一试:

打印九九乘法表:

       <%= "九九乘法表"%>
        <%
            for (int i= 0;i<10;i++){
                for (int j= 1;j<i+1;j++){
        %>
                 <%
                    out.print( i+"*"+j+"="+i*j+"  "  );
                    out.flush();
                }
                  %>
              <br>
        <%
            }
        %>

----------------------------------------------------------------------------------
        <%
            for (int i= 0;i<10;i++){
                for (int j= 1;j<i+1;j++){
                    String str = i+"*"+j+"="+i*j;
        %>
                <font>  <%= str %>  </font> &nbsp
            <%
            }
            %>
        <br>
        <%
            }
        %>

 打印多个用户信息:

        <%
            ArrayList<Stu> list = new ArrayList<>();
            for (int i = 0 ;i<3 ;i++){
                Stu stu = new Stu("贺神"+i,"男",1+i);
                list.add(stu);
            }
            System.out.println(list);
        %>
            <table border="1" cellspacing="1" align="center">
                <tr>
                    <td>姓名</td>
                    <td>性别</td>
                    <td>年龄</td>
                </tr>
                <tr>
                    <td><%= list.get(0).getName()%></td>
                    <td><%= list.get(0).getSex()%></td>
                    <td><%= list.get(0).getAge()%></td>
                </tr>
                <tr>
                    <td><%= list.get(1).getName()%></td>
                    <td><%= list.get(1).getSex()%></td>
                    <td><%= list.get(1).getAge()%></td>
                </tr>
                <tr>
                    <td><%= list.get(2).getName()%></td>
                    <td><%= list.get(2).getSex()%></td>
                    <td><%= list.get(2).getAge()%></td>
                </tr>
            </table>

EL表达式

作用

简化四大作用域获取数据的书写

EL表达式就是替代以下代码的作用:

                pageContext.getAttribute("key");             Object

                request.getAttribute("key");

                session.getAttribute("key");

                application.getAttribute("key");

语法

${key}

例:

    <%
        request.setAttribute("name","凝光");
    %>
    <%= request.getAttribute("name")%>//使用Java代码获取并输出
    
        ${name};//直接搞

取值顺序

从小到大

pageContext.setAttribute(String,Object); 同一个页面

request.setAttribute(String,Object); 一个请求

session.setAttribute(String,Object); 一个会话

application.setAttribute(String,Object); 服务器中

获取指定参数

例:获取application的

${applicationScope.name}
pageScope对应pageContext
requestScope对应request
sessionScope对应session
applicationScope对应application

输出指定对象的数据

简单类型

<% 
        request.setAttribute("key",666);

    %>
    ${key}

数组

String[] arr = {"a","b","c"};
request.setAttribute("key",arr);

${key[1]}

对象

request.setAttribute("key",Stu);

${key.name}

集合

List<Stu> list = new ArrayList<>();
list.add(Stu1);
list.add(Stu2);
list.add(Stu3);
request.setAttribute("key",list);


${key[1].name}

字典

Map<String,Stu> map = new HashMap<>();
map.put("z",Stu1);
map.put("l",Stu2);
map.put("x",Stu3);
request.setAttribute("key",map);


${key.z.name}

${key['z'].name}

如果有特殊符号,可以用['  '],

一般默认打印,

运算符

算数运算符

+      例:${key1+key2}

-

*

/或div

%或mod

关系比较

==或eq        返回值为true/false

!=或ne

> 或gt

<或lt

>=或ge

<=或le

逻辑运算符

&&     and

||           or

!          not

判空

empty           ${empty key}

隐式对象

param获取Rquest对象的参数,返回String, ${param.key} 等价于 request.getParameter("key")
paramValues获取Rquest对象传递的所有的参数值,返回字符串集合 ${paramValues} 等价于request.getParameterMap()
 
header获取HTTP请求头 ${header.contentPosition}
headerValues获取HTTP请求头中所有的值
initParam获取上下文初始化参数(在web.xml中配置的context-param中的数据)
pageContext一般用于获取 协议 服务器端口 获取工程路径(重点) 获取请求方式 等
cookie获取cookie中的值,${cookie.username}

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

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

相关文章

【Vue】使用 axios 发送ajax 请求

在 Vue 里面我们如何去发送一些 Ajax(阿贾克斯)请求 从远程的网站上获取一些数据。 假如我们有这样的接口的地址&#xff1a; https://www.xxxx.site 假设它是一个能跨域访问的接口。‍‍‍‍ 如果我们想去在我们的代码里面发这种请求&#xff0c;我该怎么做&#xff1f; 首…

Ubuntu 桌面系统升级

本文介绍 Ubuntu 桌面系统升级的两种方式&#xff0c;通过 UI 或命令行的方式&#xff0c;演示为 20.04 升级为 22.04。并介绍了 windows 的 Linux 子系统 wsl 的升级注意事项。 背景 之前在学习 ROS2 时&#xff0c;安装 ros-humble-desktop 出现依赖错误&#xff1a;无法修正…

[附源码]java毕业设计食材采购平台论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

AI智工作室11.19练习题解

F CodeForces - 710A 训练1(共12题) - Virtual Judge 我的代码 #include<iostream> using namespace std; int main() {char arr[10][10],a;int b,c,k0;cin>>a>>c; ba-a1; // cout<<b<<" "<<c<<endl; for(int i0;i<9…

使用VSCode编辑与编译WSL2下源代码

1. 安装WSL2 2. windows下安装VSCode 3. VSCode安装插件Remote Development 北京时间2019年5月3日&#xff0c;在 PyCon 2019 大会上&#xff0c;微软发布了 VS Code Remote&#xff0c;开启了远程开发的新时代&#xff01;这次发布包含了三款核心的全新插件&#xff0c;它们…

Java文件操作【教你用Java运行微信】

文章目录01 创建文件02 获取文件信息03 目录操作和文件删除04 运行可执行文件01 创建文件 new File(String pathname) //根据路径创建一个File对象&#xff1b;new File(File parent,String child) //根据父目录文件子路径创建&#xff1b;new File(String parent,String chil…

使用mqtt.fx向EMQX服务器发送消息

摘要&#xff1a;本文介绍如何使用mqtt.fx向mqtt服务器&#xff08;EMQX&#xff09;发送消息。顺便介绍一下labview与EMQX连接成功的实现效果。 上一篇文章介绍了如何在ubuntu下安装emqx服务器&#xff0c;以及如何使用mqtt.fx订阅服务器上的一个主题。 ubuntu系统下搭建本地…

为什么ArcGIS添加的TIFF栅格数据是一片纯色

下面来介绍一下今天的正式内容&#xff1a;为什么你添加的tiff栅格数据明明有数据&#xff0c;为什么却在GIS中显示一片颜色。 即使你去拉伸后 他还是显示这样&#xff1f; 那如何才能让他正常显示呢&#xff1f; 逻辑其实是简单的。我们检查数据会发现&#xff0c;这份数据等…

Springboot集成HBase使用案例

一、HBase部署安装 1.HBase下载地址:Apache HBase – Apache HBase Downloads 2.解压启动(进入压缩包bin目录),本次演示的是macOS系统启动演示(windows系统启动命令:./start-hbase.cmd) ./start-hbase.sh 3. 浏览器访问http://IP:16010/master-status出现如下页面表示启动成功…

线程基础知识复习

线程基础知识复习 并发相关Java包 涉及到的包内容 java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks 并发始祖 并发始祖Doug Lea start线程解读 初始程序 public static void main(String[] args) {Thread t1 new Thread(() ->{},"t…

涛涛的Linux学习笔记

前言&#xff1a; 因为自己偏向Java后端开发&#xff0c;接触linux有一段时间了&#xff0c;但从来没系统的学过&#xff0c;用啥学啥&#xff0c;所以一直感觉体系不全&#xff0c;现在补补日常能用到的。 一、Linux的定位 二、Linux系统的目录结构 目录结构描述/根目录&#…

【云原生】Docker的初步认识,安装与基本操作

内容预知 1.docker的相关知识 1.1 docker的概念 1.2 docker三个重要概念 &#xff08;1&#xff09;image镜像 &#xff08;2&#xff09;container容器 &#xff08;3&#xff09;repostory仓库 1.3 docker的主要用途 1.4 docker与虚拟机的区别 namesapce&#xff…

STM32F334timer6-7

STM32F334timer6-7概况预分频器描述计数模式时钟概况 基本计时器&#xff08;TIM6/TIM7&#xff09;功能包括&#xff1a; •16位自动重新加载递增计数器 •16位可编程预分频器&#xff0c;用于将计数器时钟频率除以1和65535之间的任何因子&#xff08;也可“动态”&#xff0…

立方体贴图shade计算

正常的平面贴图是根据mesh顶点找到对应的uv坐标&#xff0c;然后根据重心坐标插值计算三角面内每个点的uv坐标值。最后根据uv坐标值查找平面贴图上的颜色值。 立方体贴图的6个面分别为6张图片&#xff0c;我们怎么根据mesh面上的坐标值来计算对应平面上的uv坐标值。 基本算法是…

【算法篇-数论】线性筛法(欧拉筛法)筛 n 以内的质数

筛质数1.线性筛法&#xff08;欧拉筛法&#xff09;介绍2.欧拉筛法代码以及分析3.总结本文参考自 B站董晓算法 1.线性筛法&#xff08;欧拉筛法&#xff09;介绍 我们的目标是筛出 2 ~ n 以内的质数 最最最暴力的方法就是一个数一个数判断是不是质数 但是这样的时间复杂度是非…

【Java第31期】:Spring中存储Bean的注解以及用法

作者&#xff1a;有只小猪飞走了 博客地址&#xff1a;https://blog.csdn.net/m0_62262008?typeblog 这期内容&#xff1a;揭开Bean存储的神秘面纱 文章目录前言一&#xff0c;Controller&#xff08;控制存储&#xff09;二&#xff0c;Service&#xff08;服务存储&#xff…

过拟合问题(机器学习)

训练误差代表分类方法对于现有训练样本集的拟合程度 泛化误差代表此方法的泛化能力&#xff0c;即对于新的样本数据的分类能力如何 模型的训练误差比较高&#xff0c;则称此分类模型欠拟合 模型的训练误差低但是泛化误差比较高&#xff0c;则称此分类模型过拟合 对于欠拟合…

QGIS制作精美地图

QGIS制作精美地图 1.首先新建一个Print Layout,并为其命名(PS:如果创建完不小心删了,点右面的Layout Manager即可~ 2.在右侧空白处,设置页面大小(也可以在空白页面右键——属性) 3.点击Items——Add Map,然后在空白页面框画一个范围,这与ArcGIS pro的操作类似(PS:如…

【UML】类图Class Diagram

1、面向对象 面向对象分析&#xff1a;OOA&#xff08;Object-Oriented Analysis&#xff09; 面向对象设计&#xff1a;OOD&#xff08;Object-Oriented design&#xff09; 面向对象分析和面向对象设计的核心问题是怎么抽象对象。类图就是用来表示对象&#xff0c;可以表示…

JavaScript 基础1:变量与数据类型及其转换

JavaScript 基础1&#xff1a;变量与数据类型及其转换 Date: September 17, 2022 了解变量、数据类型、运算符等基础概念&#xff0c;能够实现数据类型的转换&#xff0c;结合四则运算体会如何编程。 体会现实世界中的事物与计算机的关系理解什么是数据并知道数据的分类理解变…