URL学习 (进一步补充)

本文详细介绍了Java中URL的概念及其使用,包括URL的语法格式和创建方法。接着讲解了URLConnection类,阐述了如何建立URL连接、设置输入输出、请求属性以及获取输入输出流。此外,还特别提到了HttpURLConnection类,讨论了HTTP方法的设置,并给出了关闭连接的小技巧。最后,提供了一个获取文件名称的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

What is URL?

URL是统一资源定位符(Uniform Resource Locator)简称,标识互联网上任意的一个资源的地址。通过URL,用户可以访问各种网络资源,比如常见的WWW和FTP站点。浏览器通过解析URL,在网络上查找对应的文件或其他资源。

URL 语法格式:
protocol://resourceName

protocol:指明获取这一资源所需的传输协议。
常见的有:HTTP/HTTPs, FTP, file等,资源名则是完整的地址,包括了主机名,端口号,文件名/文件内部的引用。

http://www.google.com/  /* 协议名://主机名 */
http://localhost:8080/Test/admin/login.jsp /* 协议名://主机名:端口号/文件名 */

How to USE?

URL类

java.net包提供了专门处理URL的类:URL,获取URL中的协议名,主机名

  • 创建URL方式

获取一个URL对象:

URL url = new URL("http://www.google.com/");
  • 常用URL类中的方法:
public String getFile() : 获取URL的路径+文件名
public URLConnection openConnection() : 获取通信连接对象

URLConnection类

获取URL对象后,要建立URL的通信连接,要使用URLConnection类,URLConnection类对象使用URL类的openConnection()方法获得

  • 常用方法

1.输入:

public void setDoInput(boolean input)
URL连接可用于输入(输出),如果打算使用URL连接进行输入,设置input == true,如果不使用,则设置为input == false,默认为true

2.输出:

public void setDoOutput(boolean input)
URL连接可用于输出(输入),如果打算使用URL连接进行输出,设置input == true,如果不使用,则设置为input == false,默认为false

3.设置常规请求属性:

public void setRequestProperty(String key, String value)
设置键值对指定的常规请求属性,如果key对应的属性已存在,则覆盖value

4.获取输入流,读取资源

public InputStream getInputStream() throws IOException
返回URL输入流,用于读取资源

5.获取输出流,用于写入资源

public OutputStream getOutputStream() throws IOException
返回URL输出流,用于向URL指定的位置写入

6.获取文件资源大小

public int getContentLength()
返回头部content-length字段

7.获取服务器发送到的状态

getResponseCode():
返回服务器发送的 HTTP 状态码。

HttpURLConnection 类

如果 URL 中使用的网络协议为 HTTP 协议HTTPS 协议, 就可以将 URLConnection 类型强制转换为 HttpURLConnection.

  • 常用方法:

setRequestMethod(String method):
设置 URL 请求的方法。
method可以是: HTTP 方法 GET,POST,HEAD,OPTIONS,PUT,DELETE 和 TRACE 之一。
默认方法是 GET
(注意:这里方法类型必须大写)。

关闭连接

要关闭连接,需要使用从连接中获取的 InputStreamOutputStream 对象 , 在这两个对象上调用 close()方法。这样做可以释放与 URLConnection 实例关联的网络资源。

小技巧

如何获取文件名称?

URL url = new URL("网址");
String urlName = url.getFile();
//获取文件路径+名称:
// 并从最后一个“/”开始截取, 截取到url的结尾 
fileName = urlName.substring(urlName.lastIndexOf("/")+1,urlName.length());
<think>嗯,用户想了解URL的定义和用途。首先,我需要整理一下引用中的信息。引用[1]提到URL是统一资源定位符,是互联网上资源的地址,也就是网址。引用[3]详细解释了URL的结构,包括物理和逻辑结构,还有处理方式。引用[5]补充了端口号的部分。用户的问题主要围绕含义和作用,可能需要分点说明。然后,用户之前的问题是关于后端开发,现在转向URL,可能是在学习Web开发的基础知识。需要确保回答清晰,结构合理。根据引用,URL的作用包括定位资源、统一访问方法,还有统计参数如spm的作用,引用[4]提到spm参数用于跟踪来源页面具体链接,这对分析投放效果有帮助。需要检查是否有遗漏的部分,比如URL的组成部分,比如协议、域名、路径等,引用[3]和[5]都有提到。还要注意使用中文,避免技术术语过多,保持易懂。可能需要用示例来说明,比如一个完整的URL分解,这样用户更容易理解。另外,用户提到要使用LaTeX格式的数学公式,但这个问题可能不需要复杂的公式,所以可能用结构图或分解示例更合适。确保引用标记正确,比如在提到唯一标识时引用[1],结构部分引用[3],端口引用[5],spm参数引用[4]。 最后,生成相关问题要考虑用户可能进一步想了解的,比如URL结构优化、参数作用、设计规范等,参考之前的引用内容来设计问题。需要确保问题相关且有深度,帮助用户深入学习。</think>### URL的定义与核心作用解析 #### 一、URL的基本定义 URL(Uniform Resource Locator)是用于完整描述互联网资源地址的标准方法[^1]。其数学表达可定义为: $$ \text{URL} \triangleq \left( \text{协议} :// \text{域名} : \text{端口} / \text{路径} ? \text{查询参数} \# \text{锚点} \right) $$ #### 二、URL结构分解 ```mermaid graph LR A[URL示例] --> B["https://www.example.com:8080/path/to/file?name=test#section"] B --> C{协议部分} B --> D{域名部分} B --> E{端口部分} B --> F{路径部分} B --> G{查询参数} B --> H{锚点} ``` | 组成部分 | 功能描述 | 示例值[^3][^5] | |------------|--------------------------------------------------------------------------|-----------------------------| | **协议** | 定义资源访问方式 | `http`/`https`/`ftp` | | **域名** | 标识资源所在服务器 | `www.example.com` | | **端口** | 指定服务访问入口(默认协议端口可省略) | `:8080`(HTTP默认80可省略) | | **路径** | 描述资源在服务器上的存储位置 | `/api/v1/users` | | **查询参数**| 传递附加请求参数(键值对形式) | `?category=books&page=2` | | **锚点** | 定位网页内特定位置(仅客户端使用) | `#chapter3` | #### 三、核心作用解析 1. **资源定位** - 通过层级结构精确标识网络资源位置[^1] - 示例:`https://docs.python.org/3/library/os.html#os.open` 定位到Python文档特定函数 2. **协议规范** - 定义访问资源使用的通信协议 - 常见协议: - `http`: 超文本传输协议 - `https`: 加密版HTTP协议 - `ftp`: 文件传输协议 3. **参数传递** - 通过查询字符串传递动态参数: ```python # 示例:电商网站商品筛选 /products?category=electronics&price_min=1000&sort=rating ``` - 特殊参数作用(如`spm`): - 跟踪用户行为路径[^4] - 示例:`spm=5176.8142029.631162.about.702b614aLj4URY` 表示来源页面区块位置 4. **结构优化** - 物理结构设计原则: - 树型结构适合大型网站(首页→频道→内容页)[^3] - 扁平结构适合小型网站 - 逻辑结构优化: - 通过内链形成内容网络 - 遵循`首页→频道→内容页`的链接层级 #### 四、高级应用场景 1. **SEO优化** - URL命名规范: - 使用英文关键词(`/digital-camera`优于`/product123`) - 层级深度不超过3-5级[^3] - 静态URL优势: ```markdown 优: /blog/2023/seo-tips 劣: /article?id=3587&category=tech ``` 2. **安全控制** - 敏感参数加密处理: ```javascript // 原始参数 → 加密后 user_id=123 → token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 ``` - 端口重定义防护: - 修改默认HTTP端口(80→8080)[^5] 3. **数据分析** - UTM参数跟踪: ```url https://example.com/?utm_source=weibo&utm_medium=social ``` - 行为路径还原: ```mermaid graph LR A[广告页] -- spm=5176 --> B[落地页] B -- spm=8142029 --> C[详情页] ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值