- java map深拷贝_java Map深度复制问题
weixin_39860732
javamap深拷贝
展开全部这里的pos是基础类型,不是引用类型,不需要拿出来单独复制,浅clone就可e5a48de588b63231313335323631343130323136353331333332613737以了,但是attr这个map需要进行深度复制,因为这个是引用类型,复制后的对象修改该属性依然会影响源对象clone方法可以简单写为@OverrideprotectedObjectclone()thro
- java map深拷贝_关于HashMap的浅拷贝深拷贝
K8S技术社区
javamap深拷贝
Map中存储的都是String,不是基本数据类型的,这个有很大影响;putAll()和clone()对基本数据类型的数据是没有问题的,但是引用类型还是不行。HashMap的浅拷贝clone()方法一、创建一个HashMap对象source,进行赋值,然后再克隆一个对象targetMap出来。通过改变targetMap的值,观察source与targetMap的变化。HashMapsource=ne
- MapUtils常用方法
qq_41482600
java基础开发语言
1、摘要MapUtils是一个用于处理Map对象的实用工具类,它提供了许多方便的方法来执行常见的操作,如获取值、设置默认值、合并Map等。本文将介绍MapUtils的常见用法,以帮助你更轻松地处理Map数据。2、前言在Java编程中,Map是一种常用的数据结构,用于存储键值对。然而,处理Map数据时,经常需要进行一些繁琐的操作,例如检查键是否存在,获取键对应的值,或者在键不存在时设置默认值。为了简
- SpringBoot核心组件详细解析
德乐懿
后端springboot后端java
SpringBoot核心组件详细解析SpringBoot作为当前Java领域最流行的微服务框架之一,其核心组件的设计与应用对于开发高效、稳定的应用程序至关重要。本文将详细解析SpringBoot的核心组件,包括SpringBoot框架本身、Spring、SpringMVC、数据库连接池等,通过阐述每个组件的作用、特点、使用场景,并结合实际案例,深入分析SpringBoot核心组件之间的关联性和依赖
- python爬虫之JS逆向入门,了解JS逆向的原理及用法(18)
盲敲代码的阿豪
python之爬虫系统教学python爬虫javascriptJS逆向
文章目录1.JS逆向是什么?2、如何分析加密参数并还原其加密方式?2.1分析JS加密的网页2.2编写python代码还原JS加密代码3、案例测试4、操作进阶(通过执行第三方js文件实现逆向)4.1python第三方模块(execjs)4.2调用第三方js文件完成逆向操作4.3总结1.JS逆向是什么?什么是JS加密?我们在分析某些网站的数据接口时,经常会遇到一些密文参数,这些参数实际就是通过Java
- 读书笔记-《Spring技术内幕》(一)IoC容器的实现
萝卜青今天也要开心
springjava后端笔记
如今已是2024年,掌握Spring早已是Java从业人员的基本要求。Spring帮我们屏蔽掉了许多繁琐的工作,使我们可以把重心放在业务逻辑上。但也因此,要深刻体会到Spring带来的便捷性,反倒需要与没有使用Spring时作对比。为此,我特地翻了下上大学时用JaveWeb开发的项目(无框架),希望能让大家更好理解。01SpringIoC容器概述Spring的架构图如上所示,IoC与AOP都是Sp
- 关于Java中的Map的浅拷贝和深拷贝问题
不生气的打工人
使用笔记
关于Java中的Map的浅拷贝和深拷贝问题发生背景生产打印的log会有图片的Base64码这并不是我们实际日志中需要关心的东西想定的解决案是在切面打印日志类中删除掉打印log的字段使用过程根据方法的参数做区分定位到对应的参数是删除掉参数中的图片字段代码if(args.length==1&&args[0]instanceofMap){MapargMap=(Map)args[0];argMap.rem
- SpringSecurity相关面试试题及答案解析
HappyAcmen
java面试题相关总结面试职场和发展
SpringSecurity是一个功能强大且高度可定制的Java安全框架,主要用于保护基于Java的应用程序。文章目录1.核心功能2.核心组件3.工作原理4.相关试题1.什么是SpringSecurity?它的主要功能是什么?2.简述一下Authentication和Authorization的区别?3.SpringSecurity的核心组件有哪些?4.如何在SpringSecurity中实现身份
- Java Map 深拷贝方法
qq_41482600
java基础java开发语言
1、JSON.parseObject(JSON.toJSONString(map))importcom.alibaba.fastjson.JSON;importorg.apache.commons.lang3.SerializationUtils;importjava.util.HashMap;importjava.util.Map;publicclassJSONDemo{publicstatic
- Java 在包管理与模块化中的优势:与其他开发语言的比较
nbsaas-boot
开发语言java
在开发复杂的、规模庞大的软件系统时,包管理和模块化设计起着至关重要的作用。它们不仅决定了代码的组织和可维护性,还直接影响到团队协作效率、扩展性和性能。在众多编程语言中,Java凭借其成熟的生态系统、强类型系统和标准化的包管理机制,成为了大型企业级应用开发的首选之一。本文将探讨Java在包管理和模块化方面的优势,并与其他流行语言(如Rust、Go、Python、JavaScript和C#)进行对比,
- 推荐篇:一探Selenium Java自动化测试架构的奥秘
俞予舒Fleming
推荐篇:一探SeleniumJava自动化测试架构的奥秘selenium-java-test-automation-architectureReady-to-useUITestAutomationArchitectureusingJavaandSeleniumWebDriver.项目地址:https://gitcode.com/gh_mirrors/se/selenium-java-test-au
- Github 2025-02-01 开源项目月报 Top20
老孙正经胡说
github开源Github趋势分析开源项目PythonGolang
根据GithubTrendings的统计,本月(2025-02-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下:开发语言项目数量Python项目8TypeScript项目3JupyterNotebook项目2Rust项目2HTML项目2C++项目1Ruby项目1JavaScript项目1Svelte项目1非开发语言项目1Go项目1Ollama:本地大型语言模型设置与运行创建周
- python注意事项:range遍历越索引现象、列表边遍历边修改出现的问题
JU HE
python基础(语法以及多线程等操作)python开发语言
文章目录前言一、range遍历越索引现象QS1:遍历range(2,2)会发生什么?不会报错,但是也不会遍历到任何内容QS1:遍历range(3,2)会发生什么?不会报错,但是也不会遍历到任何内容二、列表边遍历边修改注意事项(Java的List系列集合使用for-each循环或Iterator遍历集合时也会有下面问题)1避免直接修改列表长度:特别是边遍历边append和pop元素2边遍历边修改里面
- Kafka 单机和集群环境部署教程
闲人编程
大数据集群部署教程kafka分布式集群部署单机zookeeper
目录一、Kafka单机环境部署1.环境准备2.安装Java3.安装ZooKeeper3.1下载并解压ZooKeeper3.2配置ZooKeeper3.3启动ZooKeeper3.4验证ZooKeeper是否正常运行4.安装Kafka4.1下载并解压Kafka4.2配置Kafka4.3创建日志目录4.4启动KafkaBroker4.5验证Kafka是否正常运行5.Kafka单机部署的注意事项二、Ka
- (尚硅谷 Java 学习 B 站大学版)Day 13 面向对象 方法
亢从文_Jackson
java学习开发语言
4-5类的成员之二:方法(Method)一、“万事万物皆对象”**:(理解)1、在Java语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构>Scanner,String等>文件:File>网络资源:URL2、涉及到java语言与前端html、后端数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象二、内存解析说明1、引用类型的变量,只可能存储两类值:nu
- java -Xms -XX 这些参数该咋写?5 分钟带你快速入门!
后端java
前言java-Xms4G-Xmx4G-XX:MaxMetaspaceSize=512m-XX:MetaspaceSize=512m-XX:MaxDirectMemorySize=256m-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=./.hprof-Dfile.encoding=UTF-8-jardemo.jar上面是典型的启动Java程序时会携带
- Pyhon : 爬虫Requests高级用法--超时(timeout)
ZhuCheng Xie
Python
超时(timeout)为防止服务器不能及时响应,大部分发至外部服务器的请求都应该带着timeout参数。在默认情况下,除非显式指定了timeout值,requests是不会自动进行超时处理的。如果没有timeout,你的代码可能会挂起若干分钟甚至更长时间。连接超时指的是在你的客户端实现到远端机器端口的连接时(对应的是connect()_),Request会等待的秒数。一个很好的实践方法是把连接超时
- uniapp安卓端后台定时任务不能触发问题
张小勇
uni-app
如果用vue界面就会导致这个问题,因为实际上是加载了一个浏览器内核,有的手机一旦退出到后台就会停止运行js代码而用nvue则用原生技术实现,就能有一定的后台运行能力尤其是app.vue里面如果有全局定时任务的时候,要把app.vue改为app.nvue
- MyBatis:深入了解其特性与优势
HelloZheQ
mybatis
MyBatis是一款优秀的持久层框架,它通过XML或注解的方式将Java对象映射到数据库表,简化了数据库操作。相比于其他ORM框架,MyBatis更加灵活、轻量级,并且提供了更细粒度的SQL控制。本文将深入探讨MyBatis的特点和优势,帮助你更好地理解和使用它。MyBatis的核心特性SQL映射:定义:MyBatis的核心功能是将Java对象和SQL语句进行映射。这意味着你可以直接编写SQL语句
- Java 中 List 源码解析:深度剖析与实现
HelloZheQ
javalistwindows
List是Java中最常用的数据结构之一,广泛用于存储有序的元素集合。它是Java集合框架中的一个接口,提供了多种常见的实现,如ArrayList、LinkedList、Vector等。通过对List接口及其常见实现类的源码分析,开发者可以深入理解其内部机制和实现方式,进而优化应用程序的性能,做出更合适的选择。本文将通过深入解析List接口及其常见实现(特别是ArrayList和LinkedLis
- Java并发:ReentrantLock原理、应用与优秀实践
master_chenchengg
能力提升面试宝典技术IT信息化
Java并发:ReentrantLock原理、应用与优秀实践ReentrantLock的基本概念及与synchronized的对比分析深入理解ReentrantLock的工作原理和内部机制ReentrantLock在实际开发中的应用场景探讨公平锁与非公平锁的选择及其对系统性能的影响使用ReentrantLock实现高效的读写锁机制ReentrantLock常见问题及调试技巧分享如何避免常见的Ree
- Python网络爬虫调试技巧:解决爬虫中的问题
master_chenchengg
pythonpythonPythonpython开发IT
Python网络爬虫调试技巧:解决爬虫中的问题引子:当你的小蜘蛛遇到大麻烦知己知彼:了解常见的爬虫错误类型侦探出马:使用开发者工具和日志追踪问题源头化险为夷:调整User-Agent与添加延时策略进阶秘籍:处理JavaScript渲染页面与动态加载内容引子:当你的小蜘蛛遇到大麻烦在一个阳光明媚的下午,我正坐在电脑前,满怀信心地运行着我的Python爬虫脚本。这个脚本是为了从一个大型电子商务网站上抓
- requests模块-timeout参数
李乾星
爬虫自学笔记开发语言python网络爬虫网络协议
超时参数timeout的重要性与使用方法在进行网上冲浪或爬虫项目开发时,我们常常会遇到网络波动和请求处理时间过长的情况。长时间等待一个请求可能仍然没有结果,导致整个项目效率低下。为了解决这个问题,我们可以使用超时参数timeout来强制要求请求在特定时间内返回结果,否则将抛出异常。使用超时参数timeout的方法在学习爬虫和request模块的过程中,我们会频繁使用requests.get(url
- 探究Fingerprintjs:了解浏览器指纹技术的原理和应用
Bj陈默
javascript
一、什么是FingerprintjsFingerprintjs是一个用于生成浏览器指纹的JavaScript库。浏览器指纹是一种通过收集浏览器的各种信息来识别用户设备的技术。它类似于人的指纹,具有一定的独特性,可以用于区分不同的用户设备。二、浏览器指纹技术的原理(一)基本信息收集用户代理(UserAgent)用户代理字符串包含了浏览器的类型、版本、操作系统等信息。例如,一个典型的用户代理字符串可能
- java笔试--十进制数字二进制的个数(比较器)
晨沉辰
春招--笔试
Integer二进制函数:publicstaticintbitCount(inti):数字i的二进制中1的个数publicstaticStringtoBinaryString(inti):将十进制i转化为二进制publicstaticStringtoOctalString(inti):将十进制i转化为八进制publicstaticStringtoHexString(inti):将十进制i转化为十六
- 几种常见的工具类
小裕哥略帅
java开发语言
反射工具类packagecom.mdgyl.common.util;importorg.springframework.util.StringUtils;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.util.Objects;/***description:反射工具类*author:wuyc*crea
- Spring中常见的注解
小裕哥略帅
python开发语言
1spring注解介绍SpringFramework是一个开源的Java平台,广泛用于创建高性能的企业应用程序。随着Spring的发展,注解(Annotation)已经成为了配置Spring应用程序的主要方式,逐渐取代了传统的XML配置。使用注解可以使代码更加简洁明了,提高开发效率和可读性。Spring的注解驱动的编程模型大大简化了Java企业应用的开发。通过减少配置的复杂性,提高代码的清晰度和模
- Alibaba grpc Dubbo view
稚辉君.MCA_P8_Java
高可用Kubernetes集群在线全科家教CentOS7.6dubbo大数据java
什么是Dubbo?它的作用是什么?答:Dubbo是一款高性能的JavaRPC框架,是阿里巴巴公司开源的产品,用于提供高性能的分布式服务框架和面向服务的架构。Dubbo的主要作用是帮助分布式应用程序进行服务治理,如服务注册、服务发现、负载均衡、容错等。Dubbo的架构是怎样的?答:Dubbo的架构主要分为三层:服务接口层、服务实现层和服务注册层。服务接口层是提供给客户端的接口,服务实现层是具体的服务
- Java软件架构:2020年2月最佳实践与趋势
王元祺
本文还有配套的精品资源,点击获取简介:本资源探讨了2020年2月软件架构领域的主要趋势,重点关注微服务、容器化、DevOps、云原生以及CI/CD等关键议题。特别强调了Java在现代软件架构中的应用,包括微服务架构的实现,容器化技术如Docker的使用,以及Kubernetes等容器编排工具。还涉及到了Java的新特性、性能优化、安全性、可扩展性以及设计和架构模式。资料包括实例代码、文档和教程,致
- 基于Spring Boot的校园志愿者服务网站
超级无敌暴龙战士塔塔开
Java课设与毕设资源springbootjava后端
文章目录项目介绍主要功能截图:登录个人中心志愿者管理活动类型管理活动报名管理活动心得部分代码展示设计总结项目获取方式作者主页:Java韩立简介:Java领域优质创作者、简历模板、学习资料、面试题库【关注我,都给你】文末获取源码联系项目介绍校园志愿者服务网站,java项目,springboot项目。eclipse和idea都能打开运行。推荐环境配置:eclipse/ideajdk1.8mavenmy
- 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