${param.xxx}获取url中的参数

本文解释了EL表达式${param.xxx}

在项目中看到了一个很奇怪的EL表达式...${param.catid}...一直找不到param在哪里定义的...(主要是水平太屎...)

然后从网上查了一下才知道是啥...


 

EL表达式${param.xxx}可以从url中获取参数放在页面中直接使用

比如:一个网址:127.0.0.1/test/testparam?test1=3&test2=sss

用${param.test1}就可以直接获取到test1的值,也就是3

用${param.test2}就可以直接获取到test2的值,也就是sss

${param.xxx} 就等价于 request.getparam("xxx"),也就是服务器从页面或者客户端获取的内容

 

转载于:https://www.cnblogs.com/zhengchenhui/p/6092715.html

<think> 我们使用Java标准库中的URL类来解析URL并提取路径部分。 步骤: 1. 创建URL对象,传入URL字符串 2. 调用getPath()方法获取路径 注意:URL路径包括从域名后的第一个斜杠开始到查询字符串(如果有)之前的部分,不包括查询参数和片段。 示例:对于 http://example.com:8080/sa-bis/services/CustomerGroupWS?param=value 路径是:/sa-bis/services/CustomerGroupWS 但是,注意如果URL字符串中包含特殊字符或格式错误,会抛出MalformedURLException。 另外,如果路径部分不存在,getPath()方法将返回空字符串。 代码实现: </think> ### Java从URL中提取路径部分的完整方案 在Java中提取URL的路径部分,推荐使用`java.net.URI`类(比`URL`类更符合RFC规范)[^1]。以下是详细实现: #### 方法一:使用URI类(推荐) ```java import java.net.URI; import java.net.URISyntaxException; public class UrlPathExtractor { public static String extractPath(String urlString) throws URISyntaxException { URI uri = new URI(urlString); String path = uri.getPath(); // 处理路径开头的斜杠 if (path.startsWith("/")) { return path.substring(1); } return path; } public static void main(String[] args) { String url = "http://xxx.xxx.xxx.xxx:xxxx/sa-bis/services/CustomerGroupWS"; try { String path = extractPath(url); System.out.println("提取的路径: " + path); // 输出: sa-bis/services/CustomerGroupWS } catch (URISyntaxException e) { System.err.println("URL格式错误: " + e.getMessage()); } } } ``` **关键点说明**: 1. **`uri.getPath()`** - 返回完整路径(包含开头的`/`) - 示例输入:`http://example.com/a/b/c` → 路径:`/a/b/c` 2. **路径规范化** - `substring(1)`去除开头的斜杠 - 保留路径中的连续斜杠(如`sa//bis`会原样保留) - 自动解码URL编码字符(如`%20`转为空格) 3. **异常处理** - `URISyntaxException`处理非法URL格式 - 支持标准格式:`[scheme:][//authority][path][?query][#fragment]` > ⚠️ **注意**:`URI`类比`URL`类更安全,不会触发DNS解析或网络连接[^1]。 --- #### 方法二:使用正则表达式(简单场景) ```java public class RegexPathExtractor { public static String extractPathWithRegex(String url) { // 匹配协议、域名、端口后的路径部分 java.util.regex.Pattern pattern = java.util.regex.Pattern.compile( "^https?://[^/]+(:\\d+)?/(.*)$" ); java.util.regex.Matcher matcher = pattern.matcher(url); if (matcher.find()) { return matcher.group(2); // 返回第二个捕获组 } return ""; } } ``` **正则解析**: ``` ^https?:// # 匹配http/https开头 [^/]+ # 匹配域名(不含斜杠) (:\\d+)? # 可选端口部分 /(.*)$ # 捕获斜杠后的所有路径 ``` --- #### 两种方法对比 | 特性 | URI类 | 正则表达式 | |---------------|---------------------------|------------------------| | 标准合规性 | ⭐⭐⭐⭐⭐ (RFC 3986) | ⭐⭐ (需自行处理边界) | | 特殊字符处理 | 自动解码URL编码 | 需手动处理 | | 性能 | 高 (原生实现) | 中 (编译模式匹配) | | 适用场景 | 所有标准URL | 简单/固定格式URL | > 💡 **最佳实践**:生产环境优先使用`URI`类,正则表达式仅适合日志分析等简单场景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值