浏览器中输入URL的各种情况带 / 号和不带 / 号的区别

URL以 / 结尾

第一种情况:

http://www.example.com/dir/

这种可以这样理解:/结尾代表/dir/后面本来应该有的文件名被省略了。

  • 为什么要省略呢?
    因为这样输入更简洁快速,减少字节传输。
  • 那么问题来了,没有文件名,服务器怎么知道要访问哪个文件呢?
    其实真相是:服务器上会事先设置好文件名省略时要访问的默认文件名。比如通常是index.html之类的文件名。因此这种情况,服务器会访问/dir/index.html这样的文件。

第二种情况:

http://www.example.com/

同理,它表示访问一个名叫/的目录下的index.html这样的默认文件。


URL不以 / 结尾

第一种情况:

http://www.example.com

这种可以这样理解:当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是/index.html这样的文件。


第二种情况:

http://www.example.com/what

这种就比较神奇了,这种处理机制是:

  • 如果服务器上存在名为what的文件,则将what作为文件名来处理。
  • 如果存在名为what的目录,则将what作为目录名来处理。按照目录处理的话,那就是默认访问what目录下的类似index.html这样的文件。

仔细研究一下还是很有趣的,会慢慢找到工作中很多不起眼的规则或者现象,并了解和掌握它们背后依据的技术原理,同时举一反三,提高个人整体的技术水平。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 JavaFX 实现简单浏览器的示例代码,并有注释: ```java import javafx.application.Application; import javafx.concurrent.Worker.State; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.layout.BorderPane; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class SimpleBrowser extends Application { private WebView webView; // WebView 控件用于显示网页 @Override public void start(Stage primaryStage) { BorderPane root = new BorderPane(); // 创建一个 BorderPane 根容器 webView = new WebView(); // 创建一个 WebView 控件 WebEngine engine = webView.getEngine(); // 获取 WebView 的 WebEngine 对象 TextField urlField = new TextField(); // 创建一个文本输入urlField.setOnAction(event -> { // 绑定回车键事件 String url = urlField.getText().trim(); // 获取用户输入的网址,并去除前后空格 if (!url.startsWith("http://") && !url.startsWith("https://")) { // 如果网址不是以 http:// 或 https:// 开头 url = "http://" + url; // 在网址前面添加 http:// } engine.load(url); // 使用 WebEngine 加载指定的网页 }); Button backButton = new Button("Back"); // 创建一个“后退”按钮 backButton.setOnAction(event -> { // 绑定按钮点击事件 if (engine.getHistory().getCurrentIndex() > 0) { // 如果网页历史记录还有上一页 engine.getHistory().go(-1); // 返回上一页 } }); Button forwardButton = new Button("Forward"); // 创建一个“前进”按钮 forwardButton.setOnAction(event -> { // 绑定按钮点击事件 if (engine.getHistory().getCurrentIndex() < engine.getHistory().getEntries().size() - 1) { // 如果网页历史记录还有下一页 engine.getHistory().go(1); // 前往下一页 } }); engine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> { // 监听 WebEngine 的状态变化事件 if (newState == State.SUCCEEDED) { // 如果网页加载成功 urlField.setText(engine.getLocation()); // 在地址栏显示当前网页的网址 } }); root.setTop(urlField); // 将地址栏放在 BorderPane 的顶部 root.setLeft(backButton); // 将“后退”按钮放在 BorderPane 的左侧 root.setCenter(webView); // 将 WebView 放在 BorderPane 的央 root.setRight(forwardButton); // 将“前进”按钮放在 BorderPane 的右侧 Scene scene = new Scene(root); // 创建一个场景,并将 BorderPane 放入场景 primaryStage.setTitle("Simple Browser"); // 设置窗口标题 primaryStage.setScene(scene); // 设置窗口场景 primaryStage.show(); // 显示窗口 } public static void main(String[] args) { launch(args); // 启动应用程序 } } ``` 该示例,使用了 JavaFX 的 WebView 控件来显示网页,并使用 WebEngine 来加载和控制网页。用户在地址栏输入网址后,按下回车键,即可通过 WebEngine 加载指定的网页。同时,还实现了“后退”和“前进”按钮,通过 WebEngine 的 History 对象来实现网页历史记录的管理。所有代码都有注释,方便理解和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值