当前位置:首页 > Java技术 > JAVA后端,拼接URL访问,特殊字符异常处理

JAVA后端,拼接URL访问,特殊字符异常处理

2022年08月05日 10:30:55Java技术4

JAVA后端,拼接URL访问,特殊字符异常处理

一般来说,前端传入keyword之前都需要进行urlencode处理,详情见链接为什么要用 urlencode()。拿到参数(比如keyword)之后我们可能会需要利用此去拼接其他url,常见的报错有:
1、异常:java.lang.IllegalArgumentException: Illegal group reference

serviceUrl=geturl().replaceall("<keyword>",normalize(keyword));

keyword替换,遇到 replaceall$,$1$2 ”后跟的不是整数的时候,就会抛出“非法的组引用”的异常。
关于得到地址中的数据,使用JDK中的urlConnection,详见urlConnection介绍

URL url = new URL("http://www.baidu.com"); 
URI uri = new URI(url.getProtocol(), null, url.getHost(), url.getPort(), url.getPath(), url.getQuery(),null);
String url=uri.toASCIIString();
URL url = 
URLConnection rulConnection = url.openConnection();// 此处的urlConnection对象实际上是根据URL的 ,忽略该类的Host,user-agent等参数设置
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
    resultBuffer.append(line);
}//这样就可以得到内容了

解决办法之一就是把replaceall改成replace函数。现在说的另外两个坑是”#”和”&”字符。
2、#。URL中的#号表示链接结束,URL中#后面的字符都被认为位置标识符,用来作为识别标记或其他用途,也就是说#后面的的所有字符都不会被传入,这样可能后面的一些参数并没有传入进来,异常类型比较多。
问题的原因是因为前端传入参数时候会urlencode,而且我们用的URI函数有编码的功能,但是URI并不会编码#、@、&(肯定不可以,不然参数没办法区分了)和、$、*等,可以解析^为%5E,%为%25。以上字符urlencode都可以解析。

3、&。通常多个参数传递用“&”符号来隔开。如果keyword中包含&,就可能会导致传入结果并不是我们实际想传入的。

解决办法:第二和第三两种异常常是因为用户输入错误乱输入或者直接复制粘贴等等造成的,可以特殊字符替换为空字符。建议在URI函数之前,将#编码为%23,将&编码为%26。然后再URI函数之后将%2523替换为%23,将%2536替换为%26,之所以分开替换不直接.replace.(“%25”,”%”),因为有一种可能是用户输入”%”。

作者:你不走吗
来源链接:https://blog.csdn.net/tm807782912/article/details/78744183

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17528.html

标签: Exception
分享给朋友:

“JAVA后端,拼接URL访问,特殊字符异常处理” 的相关文章

报org.mybatis.spring.MyBatisSystemException: nested exception is `***.ReflectionException解决方法!

错误描述: 1.数据库中表(se_seat)设计 字段 数据类型 seSeatId varchar seSeatName...

java 异常处理

java 异常处理

一:什么是异常  异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。  比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了...

Mybatis报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.Bu

Mybatis报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.Bu

使用spring+Mybatis報錯org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Er...

java异常处理中的返回值

java异常处理中的返回值

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 1.try-catch中的返回值 java代码中,有各种各样的try-catch...

Java异常处理和设计

Java异常处理和设计

#cnblogs_post_body h2 { background: rgba(64, 108, 164, 1) !important; margin: 15px 0 !important; padding: 5px 0 5px 20px; border-radius: 4px !i...

Mybatis异常处理之MySQL Connector Java] will not be managed by Spring

Mybatis异常处理之MySQL Connector Java] will not be managed by Spring

很长时间没写后台代码有点生疏了,这不今天又出点小插曲,写个文章记录下。 由于要上传点数据到后台,顺手整了个mybatis+springmvc。在保存数据时出现了异常。 Creating a new SqlSession SqlSession [org.apache...

深入理解java异常处理

深入理解java异常处理

文章目录 一.异常的介绍 二.分类...

java mybatis org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error qu...

Java中的异常处理:何时抛出异常,何时捕获异常,何时处理异常?

Java中的异常处理:何时抛出异常,何时捕获异常,何时处理异常?

1.具体明确(异常类型) 2.提早抛出(1抛更具体的异常类型,2 更好的定位) 3.延迟捕获 (在能处理的时候捕获,而不是把它‘吃掉’ Java中的异常处理:何时抛出异常,何时捕获异常? 2017-06-07   1 异常分类...

SSM

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。