- 两个 list 求交集
艾斯比的日常
java
两个list求交集,一种方式是手动遍历,然后判断是否contains,然后添加到结果list中这里介绍另外一个方法直接调用list1.retainAll(list2),调用完成后,list1中不在list2的元素都会被剔除,此时list1就是交集/***retain*保留*/@TestpublicvoidtestRetain(){Listlist1=newArrayListlist2=newArr
- LeetCode-680. 验证回文串 II
德先生&赛先生
力扣leetcode算法职场和发展
1、题目描述:给你一个字符串s,最多可以从中删除一个字符。请你判断s是否能成为回文字符串:如果能,返回true;否则,返回false。示例1:输入:s="aba"输出:true示例2:输入:s="abca"输出:true解释:你可以删除字符'c'。示例3:输入:s="abc"输出:false提示:1<=s.length<=105s由小写英文字母组成2、代码:classSolution{public
- 【SpringBoot4】如何理解SpringBoot的约定大于配置
纵横千里,捭阖四方
spring家族一个项目征服Javaspringjava后端
今天我们来谈谈SpringBoot到底给我们带来了什么以及如何做的。目录1.指导思想:约定大于配置2.SpringBoot的依赖管理3.小结1.指导思想:约定大于配置Spring的优势是帮助我们管理Bean类,并且集成大量的组件,例如连接数据库、网络通信、甚至Tomcat都可以,但是我们在使用Spring的时候还需要写大量的配置文件,例如定义谁依赖谁等等。当我们的业务代码比较多的时候,这个配置简直
- js判断当前时间是否在指定范围内
i'm wxm
前端javascript开发语言
一、js判断当前时间是否在指定范围内利用js的Date对象,获得三个时间戳,分别为当前时间、开始时间、结束时间,通过比对当前时间是否在开始时间和结束时间之间,来判断是否在一个时间区间内方法一:functionisTimeInRange(startTime:any,endTime:any){//获取当前时间、开始时间、结束时间的时间戳constnow=newDate();constcurrentTi
- C#加班统计次数
回家的诱惑
C#c#开发语言
C#加班统计次数运行环境:vs2022.net8.0社区版1、用C#语言;2、有界面上传Excel文件;3、对Excel列(部门、人员姓名、人员编号、考勤时间)处理:(1)按人员编号、考勤日期分组且保留原来字段,保留唯一最晚考勤时间记录,(2)按人员编号分组,统计分组员工加班次数:判断条件(1)周一至周五(2)打卡时间超过17:304、输出Excel在另一个sheet标签统计。usingSyste
- 判断是否安装了cuda和cuDNN
幽殇默
pytorch深度学习人工智能
#判断是否安装了cudaimporttorchprint(torch.cuda.is_available())#返回True则说明已经安装了cuda#判断是否安装了cuDNNfromtorch.backendsimportcudnnprint(cudnn.is_available())#返回True则说明已经安装了cuDNN
- 图论- 经典最小生成树算法
左灯右行的爱情
图论算法
最小生成树算法什么是最小生成树Kruskal算法关键代码实现Prim最小生成树算法Kruskal和Prim算法的区别为什么Prim算法不需要判断成环,但Kruskal需要什么是最小生成树在图中找一棵包含图中所有节点的树,且权重和最小的那棵树就叫最小生成树.如下:右侧生成树的权重和显然比左侧生成树的权重和要小。(但是它并不是最小的,这里只是比较一下不同的树)Kruskal算法最小生成树是若干条边的集
- Python关键字终极指南:36个核心关键词详解+实战示例,带你彻底掌握
编程梦想记
python开发语言
以下是Python中的关键字(基于Python3.11版本,共**36个**),按功能分类解释它们的核心用途和常见场景。每个关键字都会用通俗易懂的语言和代码示例说明。一、控制程序流程的关键字1.**`if`/`elif`/`else`**-**用途**:条件判断。-**示例**:```pythonage=18ifage=18andage<=60:print("成年人")```14.**`is`**
- C语言运算符详解(一)算术运算符
倔强的小石头_
C语言c语言c++
目录一、算术运算符的分类(一)基本算术运算符(二)自增和自减运算符二、算术运算符的优先级和结合性(一)优先级(二)结合性三、注意事项(一)数据类型转换(二)整数除法的截断(三)自增和自减运算符的副作用在C语言编程中,算术运算符起着至关重要的作用。它们允许我们对数值数据进行各种数学运算,从而实现复杂的计算和逻辑。本文将详细介绍C语言中的算术运算符,包括其类型、用法以及一些需要注意的要点。一、算术运算
- 【C++学习笔记】if 和 if constexpr
Go 鹏ya
C++工作日常技能c++学习笔记
背景在工作中,在一个模版函数里,需要判断if(std::is_same)来选择走哪个分支,分支里的函数是只能处理相应的类型的,编译过程中产生了报错。解释if(std::is_same::value)和ifconstexpr(std::is_same::value)在功能上都是检查模板类型参数T是否与float类型相同。但两者的主要区别在于它们执行这个检查的时间和方式。如果你使用if(std::is
- C# Winform DragDrop事件不触发问题
Yuanymoon
C#WinformClient
背景:研究拖放文件到Winform程序时发现在控件上设了允许拖放的属性(AllowDrop=true;)后,依然不能触发DragDrop事件的。现象:DragEnter能够正常触发。DragDrop无法触发。原因:DragEnter对于控件的意义主要在于识别拖放进来的对象是何种对象,需要在这里验证并判断是否需要接受及以何种方式接受拖放进来的对象。DragEnter通过参数(DragEventArg
- 剪贴板权限申请前的内容识别
场景描述在其它应用复制的口令在进入本应用时,会判断剪切板内容是普通文本复制还是口令复制。仅在确认为口令复制时,才会弹出窗口请求用户授权,可有效避免每次用户进入APP,只要剪贴板存有内容,就无差别弹框要求授权。场景实现在A应用中粘复制一段文本,然后打开B应用,B应用识别是否为B应用需要的口令,如果是,则进行权限申请等后续操作,如果不是则不进行后续操作。效果展示实现方案:1、获取系统剪贴板对象。let
- 批量检测微信小程序封禁状态的 PHP 脚本示例
php
代码解析:设置AppID列表:修改$appIds数组,将'appid1','appid2','appid3'替换为您的小程序AppID。状态检查流程:使用file_get_contents函数请求API,获取小程序的状态信息。解析API返回结果:通过json_decode解析JSON格式的响应,根据code字段判断小程序的封禁状态,并输出相应提示。错误处理:如果接口调用失败或返回格式错误,脚本将输
- 大客户管理的方法和策略
客户管理crm系统
大客户管理的核心在于精准识别客户价值、提供个性化解决方案、建立长期互信关系,并通过数据优化决策。根据Gartner研究,80%的企业利润来自20%的大客户,而分层管理能提升30%的客户留存率。以精准分层为例,企业需根据客户贡献度、战略匹配度等维度划分优先级,例如,某全球500强企业通过RFM模型(最近消费、频率、金额)筛选出Top5%客户,针对性投入资源后,次年营收增长达18%。一、大客户分层与识
- 常见数据结构的简介(基本概念 & 操作 & 时间复杂度)
子诚之
编程
文章目录0.概览1.线性表、栈和队列2.数组2.1基本操作1)时间复杂度2)案例3.字符串3.1存储结构3.2基本操作1)时间复杂度2)案例:最大公共字符串4.二叉树4.1储存结构4.2基本操作1)时间复杂度2)案例:使用字典树判断字符串是否存在5.哈希/散列表5.1哈希函数5.2基本操作1)时间复杂度2)案例:构建哈希表《重学数据结构与算法》学习笔记0.概览数据结构增删查特点线性表变长栈队列数组
- vue 判断mp3是否加载成功
xuelong-ming
前端vue.jsjavascript前端
一、需求vueMP3加载时,有可能遇到后端没有MP3,但是返回有链接。要求获取MP3失败提示用户,MP3获取失败。二、代码canPlayAudio(url){//判断录音是否加载constaudio=newAudio(url)returnnewPromise((resolve,reject)=>{audio.oncanplay=()=>{resolve(true)audio.remove()}au
- 正则表达式匹配空值
wukurua
正则表达式正则表达式
.{0}可匹配空值例如:port=(.{0})可匹配port=,匹配结果为:这个方法适用于这个字段不一定有值,例如有时port=80,有时port=,这时候就可以这样写:port=(.{0}|\d+)把空值放在前面,先判断是否为空完再判断是否满足值,避免出现因为优先匹配值而忽略了空值的判断,例如:port=(.*|.{0})去匹配port=824413,结果为:与本意相违背。
- Linux常见的性能优化策略
这多冒昧啊
linux服务器运维
目录1.CPU性能优化:调整进程优先级2.内存优化:禁用透明大页3.磁盘I/O优化:切换I/O调度器4.网络优化:TCP缓冲区调优5.文件句柄优化:高并发API服务器策略总结:1.CPU性能优化:调整进程优先级场景描述:某跨境电商平台在“黑色星期五”大促期间,订单处理系统(Java服务)出现响应延迟。运维团队通过pidstat-u1发现名为log_aggregator的Python日志收集进程(P
- RocketMQ 消息堆积了怎么解决
星辰@Sea
消息队列Javarocketmq
目录引言消息堆积的原因RocketMQ的基本架构解决消息堆积的方法4.1扩大消费者规模4.2调整消息优先级4.3优化消费逻辑4.4消息重试与死信队列4.5监控与报警机制实现解决堆积的步骤5.1扩大消费者规模的配置5.2调整消息优先级的配置5.3优化消费逻辑的示例5.4消息重试与死信队列的配置5.5监控与报警机制的实现应用场景性能与扩展性考虑常见问题与解决方案总结参考资料1.引言在分布式系统中,消息
- 第2节课:深度学习基础python代码
Lips611
李哥深度学习python深度学习神经网络
目录编译环境:代码:文件:ds_0.py小结:python声明不需要定义,整型和浮点型都是直接给予值,字符串的[-2]代表是列表倒数的某值;同一列表里面可以有各种类型的变量;哈希表的键值对在打印时是调用字典[key],然后输出对应的value文件:judge_0.py小结:python相对于c语言,是将()换成空格和“:”,与此同时判断语句if和else的缩进不同对应着不同层次的判定条件,约等于“
- (学习总结24)Linux 基本命令2
瞌睡不来
linux学习
Linux基本命令2操作文件或目录命令更改文件或目录访问权限命令chmod修改文件的所有者和所属组命令chown修改文件或目录的所属组命令chgrp更改文件或目录的属性命令chattr创建文件和目录时的默认权限掩码命令umask判断文件类型命令file显示文件或文件系统状态命令stat树状结构显示目录和文件命令tree文件添加行号命令nl统计文件行数、字数和字节数命令wc文件压缩和解压命令gzip
- 算法刷题--哈希表--字母异位词和两个数组的交集
Bruce Jue
LeetCode刷题算法散列表哈希算法
哈希表概念哈希表是根据关键码的值而直接进行访问的数据结构。直白来讲数组就是一种哈希表。那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。那么一般都是将一个集合里面的元素映射为哈希表的索引。那么设计哈希表的时候需要考虑以下原则:均匀性,尽可能让不同key均匀分布到哈希表中;高效性;覆盖性,确保所有key都能映射到哈希表范围内。当多个元素映射到同一个索引时,这种现象叫做哈希
- MyBatis的if标签的基本使用
君子剑mango
#MyBatis框架mybatisjava开发语言
在MyBatis框架中,if标签用于在构建SQL语句时,根据参数条件判断的结果,动态地选择加入或不加where条件中。一常见使用在使用MyBatis处理查询逻辑的时候,常用的是判断一些参数是否为空,列举常用的几种情况展示1.1数据准备1.1.1创建表模型CREATETABLE`approval_info`(`id`BIGINTNOTNULLAUTO_INCREMENT,`info_name`VAR
- 三节课产品经理P1 学习总结
kyle_1111
PDM产品管理Certificate证书
完成三节课产品经理P1课程,以全优成绩毕业。课程目标用户,是未入行及2年内的初级产品经理,目的是打牢基本功,培养基本产品感。方式是每周线上课程(录像)+作业,助教会对每次作业进行点评,鼓励迭代修改。课程共六周,分别为:产品视角用户需求功能&流程原型功能点&产品调研需求文档对于自身,课程的最大帮助在于实践。因为教材干货,网上资料很多,但容易只看不练。看了很多、很深入,但等到要输出时照样两眼放白。通过
- 状态机fsm
dajunzhi
状态机
一.三段式状态机跳转(alwayscur_state<=next_state)判断next_state是啥(alwayscase(cur_state)根据输入值,判断next_state是啥,记得default)输出结果(always块中,根据cur_state来输出结果,case(cur_state),使用时序电路,可以消解毛刺)二.两段式就是将2和3合并在一起,使用逻辑电路,不用时序电路,即将
- 蓝桥杯篇---IAP15F2K61S2串口
Ronin-Lotus
上位机知识篇嵌入式硬件篇蓝桥杯单片机职场和发展嵌入式硬件cIAP15F2K61S2
文章目录前言简介串口通信的基本参数1.波特率2.数据位3.停止位4.校验位串口相关寄存器1.SCON2.SBUF3.PCON4.TMOD5.TH1/TL1串口使用步骤1.配置波特率2.配置串口模式3.使能串口中断4.发送数据5.接收数据6.处理中断示例代码:串口发送与接收示例代码:串口接收数据并回显注意事项1.波特率设置2.中断优先级3.数据缓冲区4.错误处理总结前言本文仅仅简单介绍了IAP15F
- 判断按键长按短按
后天han
STM32前端linux
第一种办法:switch循环进行延时判断按键长按短按延时一秒,就这样延时N秒在判断,就将case1的东西加到caseN中,进行判断u8step=0;switch(step){ case0: if(key_flag==1)//key_flag==1代表按键按下 { flag=1; } break; case1: if(flag
- 多线程异步执行,等待执行全部执行完成后,返回全部结果 CompletableFuture和Future以及CountDownLatch 使用
知道的越多越难受
javajavajvmservlet
需求:需要异步执行多个任务,获取每个任务的结果。根据任务结果判断是否继续后面的操作//存储全部任务返回结果集合publicstaticvoidmain(String[]args){Listobjects=Collections.synchronizedList(newArrayList{try{Thread.sleep(1000);}catch(InterruptedExceptione){e.p
- html5 判断长按操作,移动端h5模拟长按事件
weixin_39933414
html5判断长按操作
1、标志位vartimer='';varisLongTouch=false;//加个标志位,防止settimeout因为事件循环和实际时间有偏差vartarget=document.getElementById('target');target.addEventListener('touchstart',function(){timer=setTimeout(function(){isLongTo
- [Acwing] 双指针 2816. 判断子序列
*DDL_GzmBlog
#双指针
目录前言思路code:错误的思路前言基础不打牢今朝见鬼神(我是牛马呜呜呜)思路通过i指针循环一遍b数组然后通过j(j=1)遍历a数组当且仅当(jusingnamespacestd;constintN=1e5+10;inta[N],b[N],n,m;voidsolve(){cin>>n>>m;for(inti=1;i>a[i];for(inti=1;i>b[i];intj=1;for(inti=1;
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include