JavaURLEncode转码是一种用于将字符串转换为URL编码的方法,它可以将字符串中的特殊字符转换为URL可以识别的格式。它是一种常用的Web应用开发技术,在Web应用中,它可以帮助我们将数据传递到服务器端,并在服务器端进行处理。
JavaURLEncode转码使用了一套特殊的字符集来表示不同的字符,这套字符集包含了大小写英文字母、数字、标点和其他特殊字符。当我们需要将一个特定的字符传递到服务器端时,就需要使用JavaURLEncode转码来将其转换成URL可识别的格式。
String str = "Hello World!"; String encodedStr = URLEncoder.encode(str, "UTF-8"); System.out.println(encodedStr); // Outputs: Hello%20World!
JavaURLEncode转码也可以用于对URL中的参数进行转义处理,例如在URL中传递中文时,就需要使用JavaURLEncode来对其进行处理。此外,JavaURLEncode也可以帮助我们避免XSS攻击(Cross Site Scripting Attack)。
String str = "http://www.example.com/search?q=中文"; String encodedStr = URLEncoder.encode(str, "UTF-8"); System.out.println(encodedStr); // Outputs: http%3A%2F%2Fwww.example.com%2Fsearch%3Fq%3D%E4%B8%AD%E6%96%87
绝对URI具有以下通用格式:
scheme:scheme-specific-part
scheme-specific-part
取决于 scheme
。
例如,http
scheme使用一种格式,并且mailto
scheme使用另一种格式。
URI的另一个通用形式如下,它表示一个URL。
scheme://<authority><path>?<query>#<fragment>
scheme
访问资源的方法。
它是协议名称,如http,ftp等。
URI中的 scheme
和 path
部分是必需的。所有其他部分均为可选。
path
部分可以是空字符串。权限部分指示服务器名称或IP地址。
如果权限部分表示服务器名称,则它可以是 userinfo @ host:port
的形式。
例如,标识本地文件系统中的文件的URL使用文件方案作为file:///c:/documents/java.doc
。
URI语法在其 path
部分中使用分层语法。
path
的多个部分由正斜杠(/)分隔。
query
部分指示通过执行指定的查询获得资源。
它由名称 - 值对组成,用&
符号分隔。
名称和值由等号=
分隔。
例如, id = 123& num = 5
是一个查询,它有两个部分,id和num。id的值为123,num的值为5。
fragment
部分标识辅助资源,通常是子集由URI的另一部分标识的主资源。
下面是一个URI的例子,它也被分成几部分:
URI: //www..cn/java/a.html?id=123#abc Scheme: http Authority: www..cn Path: /java/a.html Query: id=123 Fragment: abc
要在URI中使用空格字符,请使用%20,这是空格的转义形式。
使用%25表示URI中的%字符。
例如,要在查询中使用5.2%的值
//www..cn/details?rate=5.2%25
Java表示一个URI和一个URL作为对象。
它提供以下四个类,您可以使用它们将URI和URL用作Java程序中的对象:
java.net.URI java.net.URL java.net.URLEncoder java.net.URLDecoder
以下代码创建一个URI对象。
URI baseURI = new URI("http://www.www..cn");
要创建具有相对URI字符串的URI,并使用baseURI解析它
URI baseURI = new URI("http://www.www..cn"); URI relativeURI = new URI("welcome.html"); URI resolvedRelativeURI = baseURI.resolve(relativeURI);
完整代码
import java.net.URI; public class Main { public static void main(String[] args) throws Exception { String baseURIStr = "http://www.www..cn/a/b/c/index.html?id=1&rate=5%25#foo"; String relativeURIStr = "../x/y/z/welcome.html"; URI baseURI = new URI(baseURIStr); URI relativeURI = new URI(relativeURIStr); URI resolvedURI = baseURI.resolve(relativeURI); printURIDetails(baseURI); printURIDetails(relativeURI); printURIDetails(resolvedURI); } public static void printURIDetails(URI uri) { System.out.println("URI:" + uri); System.out.println("Normalized:" + uri.normalize()); String parts = "[Scheme=" + uri.getScheme() + ", Authority=" + uri.getAuthority() + ", Path=" + uri.getPath() + ", Query:" + uri.getQuery() + ", Fragment:" + uri.getFragment() + "]"; System.out.println(parts); System.out.println(); } }
上面的代码生成以下结果。
我们可以使用它的toURL()方法从URI对象中获取一个URL对象,如下所示:
URL baseURL = baseURI.toURL();
演示java.net.URL类的使用的示例类
import java.net.URL; public class Main { public static void main(String[] args) throws Exception { String baseURLStr = "http://www.ietf.org/rfc/rfc3986.txt"; String relativeURLStr = "rfc2732.txt"; URL baseURL = new URL(baseURLStr); URL resolvedRelativeURL = new URL(baseURL, relativeURLStr); System.out.println("Base URL:" + baseURL); System.out.println("Relative URL String:" + relativeURLStr); System.out.println("Resolved Relative URL:" + resolvedRelativeURL); } }
上面的代码生成以下结果。
URLEncoder和URLDecoder类分别用于对字符串进行编码和解码。
import java.net.URLDecoder; import java.net.URLEncoder; public class Main { public static void main(String[] args) throws Exception { String source = "index&^%*a test for 2.5% and &"; String encoded = URLEncoder.encode(source, "utf-8"); String decoded = URLDecoder.decode(encoded, "utf-8"); System.out.println("Source: " + source); System.out.println("Encoded: " + encoded); System.out.println("Decoded: " + decoded); } }
上面的代码生成以下结果。
访问URL的内容
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; public class Main { public static String getURLContent(String urlStr) throws Exception { BufferedReader br = null; URL url = new URL(urlStr); InputStream ins = url.openStream(); br = new BufferedReader(new InputStreamReader(ins)); StringBuilder sb = new StringBuilder(); String msg = null; while ((msg = br.readLine()) != null) { sb.append(msg); sb.append("n"); // Append a new line } br.close(); return sb.toString(); } public static void main(String[] args) throws Exception { String urlStr = "http://www..cn"; String content = getURLContent(urlStr); System.out.println(content); } }
上面的代码生成以下结果。
向/从URL写入/读取数据的URL读取器/写入器类。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; import java.util.Map; public class Main { public static String getURLContent(String urlStr) throws Exception { URL url = new URL(urlStr); URLConnection connection = url.openConnection(); connection.setDoOutput(true); connection.connect(); OutputStream ous = connection.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(ous)); bw.write("index.html"); bw.flush(); bw.close(); printRequestHeaders(connection); InputStream ins = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(ins)); StringBuffer sb = new StringBuffer(); String msg = null; while ((msg = br.readLine()) != null) { sb.append(msg); sb.append("n"); // Append a new line } br.close(); return sb.toString(); } public static void printRequestHeaders(URLConnection connection) { Map headers = connection.getHeaderFields(); System.out.println(headers); } public static void main(String[] args) throws Exception { String urlStr = "http://www.www..cn"; String content = getURLContent(urlStr); System.out.println(content); } }
上面的代码生成以下结果。
以下代码显示了如何获取JarURLConnection对象。
使用其方法来获取JAR特定数据。
String str = "jar:http://yoursite.com/my.jar!/my/Abc.class"; URL url = new URL(str); JarURLConnection connection = (JarURLConnection)url.openConnection();
Java网络教程 - Java网络UDP服务器以下代码显示了如何编写UDP回显服务器:DatagramSocket socket= new DatagramSocket(12345);Da...
JavaFX教程 -JavaFX文本另一个基本的JavaFX节点是Text节点,它允许我们在场景图上显示测试。要创建 Text 节点,请使用 javafx.sc...
JavaFX教程 -JavaFX矩形椭圆avaFX Shape类定义了常见的形状,如线,矩形,圆,Arc,CubicCurve,Ellipse和QuadCurve。在场景图上...
JavaFX教程 -JavaFX绑定JavaFX绑定同步两个值:当因变量更改时,其他变量更改。要将属性绑定到另一个属性,请调用bind()方法,该...
JavaFX教程 -JavaFX按钮当用户单击按钮时,JavaFX Button类可以触发事件。Button类扩展标记的类,它可以显示文本,图像,或两者...