jsp基础语法

news2024/12/31 6:10:19

前提

安装jdk参考
下载tomcat解压,运行tomcat不报错即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一个jsp程序

切换到webapps下ROOT文件夹下,将除了WEB-INF文件外的全部内容删除,新建index.jsp
在这里插入图片描述
index.jsp内容如下

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>hello world</h1>
</body>
</html>

访问localhost:8080
在这里插入图片描述

jsp注释

<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!--该jsp注释可以在浏览器中查看-->
    <%--该jsp注释不可以在浏览器中查看--%>
    <h1>hello world</h1>
    <%
    //这是脚本中java注释
        /*
        * 这也是脚本中java注释
        *
        * */
    %>
</body>
</html>

在这里插入图片描述

jsp声明

<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<%!
int x,y=60,z;
String name ="John";
Date date = new Date();
%>
<%!
int add(int m,int n){
    int result =0;
    result =  m+n;
    return result;
}
%>
<%!
int chengji(int m,int n){
    return m*n;
}
%>
<%!
class Circle{
    double r;
    Circle(double r){
        super();
        this.r = r;
    }
    double area(){
        return Math.floor(Math.PI*r*r);
    }
}
%>
<%
    out.println("我的名字:"+name);
    out.println("<br/>");
    out.println("x的值为"+x);
    out.println("y的值为:"+y);
    out.println("<br/>");
    out.println("现在时间:"+date);
    out.println("10+20="+add(10,20));
    out.println("<br/>");
    out.println("10*20="+chengji(10,20));
%>
<br>
<br>
<%
Circle c = new Circle(5);
out.println("半径为5的圆面积为:"+c.area());
%>
</body>
</html>

在这里插入图片描述

jsp表达式

<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<h1>现在时间是<%=new Date()%></h1>
</body>
</html>

在这里插入图片描述

jsp指令

与页面相关的jsp指令

属性和属性值说明
session="truefalse"
autoFlush="truefalse"
info=“text”描述该jsp页面的相关信息
errorPage=“URL”当页面产生异常时跳转的路径
isErrorPage="trueflase"
isThreadSafe="truefalse"
buffer=“8kb”输出流是否有缓冲区,默认8kb
contenrType=“text/html;chartset=UTF-8”设置mime类型和编码属性,编码属性一般设置为utf-8,mime类型有很多,比如application/vnd.ms-excel表示excel文件,image/gif标识gif图像等
extends=“class”指明由jsp页面产生的servlet所继承的父类

include指令

include指令是在JSP页面生成Servlet时引入需要包含的页文件,既可以是HTML文件,也可
以是JSP文件,还可以是其他文件(例如.js文件)。include指令的作用是在标签插入的位置插入静态的文件内容,使其与JSP文件组合成新的JSP页面,然后由JSP引擎翻译成Servlet文件,这样做有如下两个好处:

  • 页面的代码可以复用,因为被引入的文件是静态文件,所以在其他的JSP页面中也可以导入。
  • JSP页面的代码结构清晰易懂,维护也比较简单。
    include指令如下
<%@include file="URL"%>

file属性指向要包含的文件,一定要注意引入的路径是否正确,一旦路径出错,在编译的时候将不能通过。
include指令经常用来包含网站中经常出现的相同页面。例如,一般情况下,网站为每个页面都设置导航栏,把它放在页面的顶端或者左边,这部分代码在每个页面都重复,可以用include来解决,为开发者省去重复动作。
john.jsp

<%@page language="java" pageEncoding="utf-8" %>
<h1>John的个人简介</h1>
<table>
    <tr>
        <td>姓名</td>
        <td>john</td>
    </tr>
    <tr>
        <td>年龄</td>
        <td>20</td>
    </tr>
</table>

新建copyright.jsp

<%@page language="java"
        import="java.util.*,java.text.SimpleDateFormat" pageEncoding="utf-8" %>
<h1>版权信息</h1>
<%!
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String year =sdf.format(d);
%>
<p>john公司版权所有2001-<%=year%></p>

index.jsp

<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<h1>jsp include指令</h1>
<%@include file="john.jsp"%>
<hr>
<%@include file="copyright.jsp"%>
</body>
</html>

在这里插入图片描述

taglib指令

taglib指令(又名标签指令) 是JSP新增的一个指令, 用户可以自定义新的标签在页面中执行。taglib指令的语法如下:

<%@taglib uri="taglib url"prefix="tagPre"%>

其中uri属性用来表示自定义标签库的存放位置。prefix属性是为了区分不同标签库的标签名,在页面中引用标签也是以prefix开头的。
安装对应jar包,修改pom.xml

<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

index.jsp

<%@page language="java" isELIgnored="false" import="java.util.*" pageEncoding="utf-8" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<table>
    <tr>
        <td>输出值</td>
    </tr>
    <c:forEach begin="1" end="10" var="i">
        <tr>
            <td>
                <c:out value="${i}"></c:out>
            </td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

在这里插入图片描述
从上述代码可以看出, JSTL标签使得JSP页面十分简洁, 它不需要定义或初始化对象、方法。但凡事都不能只看表面,应该注重本质,标签的定制在页面显示时是如此简单,但在编制时却是一个复杂的过程, 它通过一定的编程步骤将JSP代码和Java代码联系起来。标签定制的最大好处就是使得开发者的职责分工更加明细:标签定制者无须关注业务逻辑的实现,页面编程人员直接使用标签即可。这样两者就不会冲突,分工明确。下面简单介绍定制标签的过程。

jsp动作

<jsp:include>动作

<jsp:includepage="relativeURL"flush="true"/>

与include指令十分相似都是引入文件到目标页面
但是,jsp:include动作与include指令还是有些不同的:首先,jsp:include动作是在页面被访问时导入的, 而include指令是由JSP引擎在编译时导入的; 其次, 在include指令中, 被包含的文件会同主页面一块被编译为一个Servlet类文件, 而jsp:include动作包含的文件跟主页面会是相对独立的两个文件, 在编译时会被编译成两个Servlet类文件, 因此jsp:include在效率上稍微慢些。
news1.html

<h1>news01</h1>

news2.html

<h1>news02</h1>

index.jsp

<%@page language="java" isELIgnored="false" import="java.util.*" pageEncoding="utf-8" %>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<p>最近新闻</p>
<ul>
    <li>
        <jsp:include page="news1.html"/>
    </li>
    <li>
        <jsp:include page="news2.html"/>
    </li>
</ul>
</body>
</html>

在这里插入图片描述

<jsp:forword>动作

<jsp:forward>动作的作用是转发请求到另外一个页面中, 在请求过程中会连同请求的参数数据一起被转发到目标页面中, 目标页面通过request.getParameter方法获得参数值进行进一步处理。<jsp:forward>的基本语法如下:

<jsp:forwardpage="relativeURL">

如果随机数能被2整除,则跳转even.jsp,如果不能则跳转odd.jsp
even.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>偶数页</h1>

odd.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>奇数页</h1>

index.jsp

<%@page language="java" isELIgnored="false" import="java.util.*" pageEncoding="utf-8" %>

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<%
String url="";
int random = (int)(Math.random()*10);
int m = random%2;
switch (m){
    case 0:
        url="even.jsp";
        break;
    case 1:
        url="odd.jsp";
        break;
}
%>
<jsp:forward page="<%=url%>"></jsp:forward>
</body>
</html>

注意页面链接没有变化
在这里插入图片描述
在这里插入图片描述

<jsp:param>

<jsp:param>用来传递参数信息, 它经常与其他动作一起使用, 例如与<jsp:forward>、<jsp:include>等结合使用, 用于传递主页面的参数到目标页面。其基本语法如下:

<jsp:param name="参数名称" value="参数值">

param和include结合使用

安装对应版本的tomcat包

<dependency>
   <groupId>org.apache.tomcat</groupId>
   <artifactId>tomcat-servlet-api</artifactId>
   <version>9.0.74</version>
</dependency>

index.jsp

<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%request.setCharacterEncoding("utf-8");%>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<h1>父页面</h1>
<jsp:include page="subPage.jsp">
    <jsp:param name="userName" value="约翰"/>
    <jsp:param name="passwd" value="123456"/>
    <jsp:param name="address" value="中国北京"/>
</jsp:include>
</body>
</html>

subPage.jsp

<%@ page import="java.util.*" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>子页面</title>
</head>
<body>
<%
String userName = request.getParameter("userName");
String passwd = request.getParameter("passwd");
String address = request.getParameter("address");
%>
<p>子页面</p>
<table>
    <tr>
        <td>用户名:<%=userName%></td>
    </tr>
    <tr>
        <td>密码:<%=passwd%></td>
    </tr>
    <tr>
        <td>用户地址:<%=address%></td>
    </tr>
</table>
</body>
</html>

在这里插入图片描述

forward和param

修改上面例子中index.jsp的include为forward

<%@page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%request.setCharacterEncoding("utf-8");%>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<h1>父页面</h1>
<jsp:forward page="subPage.jsp">
    <jsp:param name="userName" value="约翰"/>
    <jsp:param name="passwd" value="123456"/>
    <jsp:param name="address" value="中国北京"/>
</jsp:forward>
</body>
</html>

在这里插入图片描述

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

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

相关文章

React Proxy 详细流程与配置方式(webpack、setupProxy.js、package.json)

一、 package.json 配置方式 全部以 GET 请求为例&#xff0c;每次修改配置后&#xff0c;重启项目&#xff0c;否则不生效。 访问 http://127.0.0.1:6000/api/user/list 接口为例检查自己脚手架版本 $ create-react-app -V若脚手架版本在 2.0 以下&#xff0c;可以使用对象类型…

【C++】deque的实现原理简单介绍

前言 deque被称为双端队列&#xff0c;它的出现主要是为了结合vector和list的优点并减小它们的缺点&#xff0c;实际上deque确实结合了vector和list的优点减小了它们的缺点&#xff0c;但是它的结合也让它自己的优点没有原始的vector和list那么极致&#xff0c;导致deque变得很…

C++好难(1):C++的入门

目录 前言&#xff1a; C的历史&#xff1a; c的领域 1.C的关键字&#xff1a; 2.命名空间 2.1命名空间的定义&#xff1a; 1&#xff09;命名空间的普通定义&#xff1a; 2&#xff09;命名空间的嵌套定义&#xff1a; 3&#xff09;命名空间相同的处理&#xff1a; …

没有公网IP,自建网站如何让外网访问?

受创业潮影响&#xff0c;身边很多朋友都自己开公司创业了&#xff0c;作为一个IT行业从业者&#xff0c;我就莫名的开始忙起来了&#xff0c;因为掌握编程技术&#xff0c;朋友们经常找到我&#xff0c;让我帮他们做公司网站。但是存在一个无法回避的问题&#xff0c;就是我的…

0/1背包问题——从LeetCode题海中总结常见套路

目录 问题讨论 01背包问题公式 为什么状态压缩到一维时候需要逆序&#xff1f; 怎样求次数&#xff1f; 转化成最大和sum/2的01背包&#xff1a;LeetCode.416.分割等和子集 转化成最大和sum/2的01背包&#xff1a;LeetCode1049.最后一块石头的重量II LeetCode.494.目标和…

微软文字转语音不能试用了,分享三个方法给大家!

最近很多小伙伴告诉我&#xff0c;微软文字转语音不能在线试用了&#xff0c;这是因为微软关闭了官方的使用页面&#xff0c;所以现在不能直接使用微软的网页版进行文字转语音了。 那么我们还有没有更好的方法去“白嫖”微软的文字转语音呢&#xff1f; 答案是肯定的&#xf…

初识NoSQL(一文读懂)

最近参加了Oracle的数据库培训&#xff0c;对NoSQL非常好奇&#xff0c;总结一下关于NoSQL的认识。 NoSQL是Not Only SQL&#xff0c;并不是去除掉SQL&#xff0c;泛指非关系型的数据库。关系&#xff0c;指关系模型&#xff0c;具体指同一个对象在不同属性上的值 以及 不同对…

一个AK/SK泄露检测的实现思路

01、简介 在企业上云的过程中&#xff0c;AK/SK泄露导致的数据泄露事件屡见不鲜。在企业混合云架构下&#xff0c;公有云和私有云都存在大量的AccessKey&#xff0c;如何有效地检测可能的AK/SK泄露事件&#xff0c;一直困扰着企业的安全人员。 本文提供了一种比较容易实现的思路…

UART协议学习——异步全双工串行通信方式

文章目录 前言一、简介1、优点2、缺点 二、数据格式三、波特率1、定义2、波特率和采样频率 四、常见接口电平1、TTL电平2、RS232&#xff08;负逻辑&#xff09;3、RS485 前言 2023.4.22 世界地球日 一、简介 UART&#xff1a;Universal Asynchronous Receiver/Transmitter&a…

Albert-Z-Guo/Deep-Reinforcement-Stock-Trading

深加固股票交易 该项目打算在投资组合管理中利用深度强化学习。框架结构的灵感来自Q-Trader。代理人的奖励是在每个行动步骤评估的未实现净利润&#xff08;意味着股票仍在投资组合中且尚未兑现&#xff09;。对于每一步的不作为&#xff0c;投资组合中都会增加负惩罚&#xf…

USMART 函数错误解决方法

身为电子工程师&#xff0c;看了马斯克的星舰飞船&#xff0c;真是太帅了&#xff1b; 深知一个良好的测试环境对产品性能的影响&#xff0c;对工作效率的提升。 小资源MCU调试代码的工具USMART 使用起来。 移植的文章网上有很多&#xff0c;但是对移植过程中使用错误的文章…

mybatisPlus拦截器使用demo

概述 顾名思义&#xff0c;就是一个拦截器&#xff0c;和springmvc的拦截器&#xff0c;servlet的过滤器差不多&#xff0c;就是在执行前拦了一道&#xff0c;里面可以做一些自己的事情。 平时用的mybatisPlus较多&#xff0c;直接以com.baomidou.mybatisplus.extension.plug…

VUE中使用element-china-area-data

使用element-china-area-data的中国省市区级联数据编写城市选择器。以下为解决效果图&#xff1a; &#xff08;1&#xff09;安装 npm install element-china-area-data -S &#xff08;2&#xff09;引入 import { regionData, CodeToText, TextToCode } from ‘element-ch…

LDO系列--LDO并联扩容

1、不能简单并联&#xff08;无法电流均衡&#xff09; 两个LDO的内部的带隙基准源(参考电压)&#xff0c;FET的特性&#xff0c;以及误差放大器的噪声不同(如失调电压)&#xff0c;实际LDO输出的目标电压依旧是有差异的。 这就导致了&#xff0c;LDO-High的目标输出电压高一些…

STM32F103基于标准库+I2C SSD1306仿数码管RTC时钟显示

STM32F103基于标准库I2C SSD1306仿数码管RTC时钟显示 ✨申明&#xff1a;本文章仅发表在CSDN网站&#xff0c;任何其他网站&#xff0c;未注明来源&#xff0c;见此内容均为盗链和爬取。 &#x1f341;对于文中所提供的相关资源链接将作不定期更换。 &#x1f4fa;显示效果&a…

UWB芯片DW300之CRC模式介绍及代码实现

SPI CRC模式 当启用SPI CRC模式时,可以为SPI传输提供循环冗余校验序列的额外保护。这种操作模式在默认情况下是禁用的,但可以通过SYS_CFG寄存器中的SPI_CRCEN位启用(和禁用)。 虽然SPI CRC检查在主机微处理器必须为每个SPI写入和读取事务计算CRC的附加软件开销方面有缺点,但…

SOFA Weekly|SOFARPC 5.10.0 版本发布、SOFA 五周年回顾、Layotto 社区会议回顾与预告...

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

【Mysql】分库分表

【Mysql】分库分表 文章目录 【Mysql】分库分表1. 介绍2. 拆分策略2.1 垂直拆分2.1.1 垂直分库2.1.2 垂直分表 2.2 水平拆分2.2.1 水平分库2.2.2 水平分表 3. MyCat3.1 概述 1. 介绍 采用单数据库进行数据存储存在以下瓶颈&#xff1a; IO瓶颈&#xff1a;热点数据太多&#x…

项目管理必备!20个实用技巧全掌握!

即使在最完美的条件下&#xff0c;管理一个项目也是很困难的。 ​项目管理的成败好坏与优秀项目团队密不可分的,建设一个好的团队将会更团结、更坚强、更具有竞争力, 更能适应无限变化的环境。 ​不幸的是&#xff0c;还是有很多项目经理实质上没有没有总结出自己思维方法和运…

进程状态

理念上的状态 新建 子面意思运行 task_struct在运行队列中排队&#xff0c;就叫做运行态阻塞 等待非CPU资源就绪挂起 当内存不足的时候&#xff0c;OS通过适当的置换进程的代码和数据到磁盘&#xff0c;进程的状态就叫做挂起退出 子面意思 实际上的状态 …