Web路径专题

文章目录

    • 1.资源定位
        • 1.前置条件
          • 上下文路径设置
        • 2.上下文路径介绍
          • 重点说明
        • 3.资源定位方式
          • 资源路径 = 上下文路径 + 资源位置
          • a.html定位
          • C.java定位
        • 4.浏览器和服务器解析的区别
          • 1.浏览器解析`/`(地址变化)
          • 2.服务器解析`/`(地址不变)
        • 5.带`/`与不带`/`的区别
          • 1.带`/`指的是路径
          • 2.不带`/`指的是资源
        • 6.相对路径直接找到servlet
          • 1.servlet位置
          • 2.login.html位置
          • 3.定位方式
    • 2.浏览器默认相对路径
        • 1.基本介绍
        • 2.问题说明
    • 3.base标签(更改浏览器默认相对路径)
        • 1.基本介绍
        • 2.代码演示
    • 4.服务端请求转发定位资源
        • 1.基本介绍
        • 2.代码演示
          • 1.a.html(最初界面)
          • 2.C.java(中转界面 )
          • 3.b.html(最终界面)
          • 4.结果展示
        • 3.小细节
          • 转发时不带斜杠,服务器默认也是按照前面是上下文路径拼接
    • 5.课后练习
        • 基本环境
        • 第三题
          • 1.使用相对路径
          • 2.使用浏览器默认相对路径
          • 3.使用base标签更改浏览器默认相对路径
          • 4.使用绝对路径
        • 第四题
          • 1.使用相对路径
          • 2.使用绝对路径
        • 第五题
          • 1.使用相对路径
          • 2.使用base标签更改浏览器默认相对路径
          • 3.使用绝对路径
    • 6.小结
        • 1.匹配路径方法(重点)
          • 1.上下文路径 + 资源路径
          • 2.重定向到某个url如果含有中文,需要手动进行url编码
        • 2.注意事项和细节说明
          • 1.Web工程的相对路径和绝对路径
        • 3.斜杠的解析
          • 1.带斜杠与不带斜杠
          • 2.获取真实路径和上下文路径
          • 3.这个目录才是真正执行的文件
          • 4.重定向的斜杠
          • 5.重定向课后练习
            • 1.相对路径
            • 2.绝对路径(推荐)
            • 3.动态获取上下文路径拼接(强烈推荐)
          • 6.老韩小结
          • 7.base路径优化
            • jsp动态获取上下文路径

1.资源定位

1.前置条件
上下文路径设置

image-20240128110508450

2.上下文路径介绍

image-20240128153545319

重点说明
  1. 他们两个是互通的
  2. 意思就是假如C类想要定位a.html,就可以使用相对路径../d1/d2/a.html
  3. 这里的../虽然得到的是java目录下的资源,但是我说过了,他跟webapp是互通的,都称之为上下文路径
3.资源定位方式
资源路径 = 上下文路径 + 资源位置
a.html定位

(http://localhost:8080/webpath/) + ( d1/d2/a.html)

C.java定位

(http://localhost:8080/webpath/) + ( c/C) (假设web.xml里面配置的路径是/c/C)

4.浏览器和服务器解析的区别
1.浏览器解析/(地址变化)

http://localhost:8080/ 比如:超链接,表单提交,重定向

2.服务器解析/(地址不变)

http://localhost:8080/webpath/ 比如:请求转发,配置servlet路径,获取真实路径,获取上下文路径

5.带/与不带/的区别
1.带/指的是路径
2.不带/指的是资源
6.相对路径直接找到servlet
1.servlet位置

image-20240128150721579

2.login.html位置

image-20240128150832848

3.定位方式

可以看到这个servlet的地址就是上下文路径加资源,在这个表单中使用./可以得到webapp的位置,这个其实就是上下文路径,再加上servlet的资源路径即可action="./c/C"

2.浏览器默认相对路径

1.基本介绍

image-20240128104132014

2.问题说明

image-20240128104843635

3.base标签(更改浏览器默认相对路径)

1.基本介绍

image-20240128105105645

2.代码演示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    这个解析的就是http://localhost:8080/webpath/  -->
    <base  href="/webpath/">
</head>
<body>
<form action="b.html">
  <input type="submit" value="跳转">
</form>
</body>
</html>

image-20240128141534051

image-20240128141540255

4.服务端请求转发定位资源

1.基本介绍
  1. 请求转发解析的/是上下文路径
  2. 请求转发将请求和响应都转发到了那个界面,所以响应给浏览器的也是那个界面
  3. 开发中一般都是使用转发或重定向到那个界面
2.代码演示
1.a.html(最初界面)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    这个解析的就是http://localhost:8080/webpath/  -->
    <base  href="/webpath/">
</head>
<body>
<form action="c/C" method="get">
  <input type="submit" value="跳转">
</form>
</body>
</html>
2.C.java(中转界面 )
package c;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author 孙显圣
 * @version 1.0
 */
@WebServlet(urlPatterns = "/c/C") //此时解析的就是http://localhost:8080/webpath/c/C
public class C extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //请求转发到b.html
        req.getRequestDispatcher("/b.html").forward(req,resp);
        //这里解析的是http://localhost:8080/webpath/b.html
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

3.b.html(最终界面)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
我是b.html
</body>
</html>
4.结果展示

image-20240128143831682

image-20240128143836926

3.小细节
转发时不带斜杠,服务器默认也是按照前面是上下文路径拼接

image-20240128143949230

5.课后练习

image-20240128144554430

image-20240128144610106

image-20240128144639552

基本环境

image-20240128152406864

第三题
1.使用相对路径

action=“./views/user/user.html”

2.使用浏览器默认相对路径

action=“views/user/user.html”

3.使用base标签更改浏览器默认相对路径

image-20240128145854552

action=“views/user/user.html”

4.使用绝对路径

action=“/webpath/views/user/user.html”

第四题
1.使用相对路径

…/views/user/user.html

(这里的…/就直接是java目录下的了,也就是到了上下文路径)

2.使用绝对路径

/views/user/user.html

第五题
1.使用相对路径

href=“…/…/login.html”

2.使用base标签更改浏览器默认相对路径

image-20240128155241490

href=“login.html”

3.使用绝对路径

href=“/webpath/login.html”

6.小结

1.匹配路径方法(重点)
1.上下文路径 + 资源路径
  1. 一共四种情况
    1. 相对:./ …/之类的(浏览器/服务器)
    2. 默认相对:浏览器有默认相对路径,服务器虽然也有但是不建议使用
    3. 修改默认相对:浏览器可以通过base修改默认相对路径
    4. 绝对:使用/开头(浏览器/服务器)
  2. 无论使用绝对路径还是相对路径,都要先找到上下文路径
  3. 上下文路径对于相对路径来说就是找到**webapp/java/**这两个都是一样的
  4. 上下文路径对于绝对路径来说,注意浏览器解析还是服务器解析的/是不同的
  5. 然后再匹配资源路径
2.重定向到某个url如果含有中文,需要手动进行url编码

image-20240208221101204

2.注意事项和细节说明
1.Web工程的相对路径和绝对路径

image-20240128160351696

3.斜杠的解析

image-20240128160447315

1.带斜杠与不带斜杠

image-20240128161749676

2.获取真实路径和上下文路径
package c;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author 孙显圣
 * @version 1.0
 */
@WebServlet(urlPatterns = "/c/C") //此时解析的就是http://localhost:8080/webpath/c/C
public class C extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //这里获取的是http://localhost:8080/webpath/
        String realPath = super.getServletContext().getRealPath("/");
        String contextPath = super.getServletContext().getContextPath();
        System.out.println(realPath);
        System.out.println(contextPath);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

image-20240128161040285

3.这个目录才是真正执行的文件

image-20240128161539036

4.重定向的斜杠

image-20240128161834518

5.重定向课后练习

image-20240128162328409

image-20240128163023539

1.相对路径

resp.sendRedirect(“…/views/user/user.html”);

2.绝对路径(推荐)

resp.sendRedirect(“/webpath/views/user/user.html”);

3.动态获取上下文路径拼接(强烈推荐)

String contextPath = super.getServletContext().getContextPath();
resp.sendRedirect(contextPath + “/views/user/user.html”);

6.老韩小结

image-20240128162044228

7.base路径优化
jsp动态获取上下文路径

image-20240128164743198

image-20240128164824537

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/533095.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为ensp中PPP(点对点协议)中的CHAP认证 原理和配置命令

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月11日6点00分 PPP协议&#xff08;Point-to-Point Protocol&#xff09;是点到点协议&#xff0c;是一种常用的串行链路层协议&#xff0c;用于在两个节点之间建立点…

结合 tensorflow.js 、opencv.js 与 Ant Design 创建美观且高性能的人脸动捕组件并发布到InsCode

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图tensorflow.js 使用 opencv.js 将人脸…

PTA 2813:画家问题(熄灯问题)

有一个正方形的墙&#xff0c;由NN个正方形的砖组成&#xff0c;其中一些砖是白色的&#xff0c;另外一些砖是黄色的。Bob是个画家&#xff0c;想把全部的砖都涂成黄色。但他的画笔不好使。当他用画笔涂画第(i,j)个位置的砖时&#xff0c; 位置(i−1,j)、 (i1,j)、(i,j−1)、(i…

HJ13 句子逆序(句子反序,再把单词反序)

句子反序&#xff0c;再把单词反序 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别String s sc.n…

本地化部署离线开源免费语音识别API,支持多模态AI能力引擎

思通数科作为一家专注于多模态AI能力开源引擎平台&#xff0c;其技术产品涵盖了自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别以及语音识别等多个领域。在语音识别这一细分市场&#xff0c;思通数科的技术产品中的音频文件转写服务有着相似的应用场景和功能特点。…

如何将powerpoint(PPT)幻灯片嵌入网页中在线预览、编辑并保存到服务器?

猿大师办公助手不仅可以把微软Office、金山WPS和永中Office的Word文档、Excel表格内嵌到浏览器网页中实现在线预览、编辑保存等操作&#xff0c;还可以把微软Office、金山WPS和永中Office的PPT幻灯片实现网页中在线预览、编辑并保存到服务器。 猿大师办公助手把本机原生Office…

【开发篇】十三、JVM基础参数设置与垃圾回收器的选择

文章目录 1、-Xmx 和 –Xms2、-XX:MaxMetaspaceSize 和 –XX:MetaspaceSize3、-Xss4、不建议改的参数5、其他参数6、选择GC回收器的调试思路7、CMS的并发模式失败现象的解决8、调优案例 GC问题解决方式&#xff1a; 优化JVM基础参数&#xff0c;避免频繁Full GC减少对象的产生…

设计模式学习笔记 - 设计模式与范式 -行为型:9.迭代器模式(上):相比直接遍历集合数据,使用迭代器模式有哪些优势?

概述 上篇文章&#xff0c;我们学习了状态模式。状态模式是状态机的一种实现方式。它通过将事件触发的状态转移和动作执行&#xff0c;拆分到不同的状态类中&#xff0c;以此来避免状态机类中的分支判断逻辑&#xff0c;应对状态机类代码的复杂性。 本章&#xff0c;学习另外…

Day20_学点儿JavaEE_基于Session的登录、数据库null值正确显示

1 登录 使用Session技术完成用户登录的功能&#xff1a; 登录功能会使用到Session&#xff0c;把用户登录的用户名和密码保存到Session&#xff0c;因为Session是属于每个用户独有的&#xff0c;就可以记录每个用户单独的登录信息。 当然&#xff0c;这仅仅是完成了一个简单的…

windows安装charles抓包iphone

安装charles抓包iphone charles基础介绍windows安装 charles基础介绍 Charles 是在 PC 端常用的网络封包截取工具&#xff0c;在做移动开发时&#xff0c;我们为了调试与服务器端的网络通讯协议&#xff0c;常常需要截取网络封包来分析。除了在做移动开发中调试端口外&#xf…

探索GlusterFS:开源分布式文件系统

目录 引言 一、GlusterFS简介 &#xff08;一&#xff09;基本介绍 &#xff08;二&#xff09;GlusterFS特点 &#xff08;三&#xff09;GlusterFS术语 &#xff08;四&#xff09;GlusterFS工作流程 二、GlusterFs的卷类型 &#xff08;一&#xff09;卷类型 &…

vue3中使用antv-S2表格(基础功能版)

先看展示效果&#xff1a; 可以调整行宽、列宽、自定义字段图标、表头图标、添加排序、显示总计、小计等 首先确保搭建一个vue3项目环境&#xff0c;从0开始的小伙伴着重看第一点&#xff1a; 一、搭建vue3项目环境 首先创建一个vue3vitets项目&#xff0c;可以查看下面相关…

铸造大型基础平板的结构应该怎样设计

设计大型基础平板的结构时&#xff0c;需要考虑以下几个方面&#xff1a; 地质条件&#xff1a;首先要了解工程所在地的地质条件&#xff0c;包括土质、地下水位、地震状况等。根据地质条件来选择合适的基础类型&#xff0c;如浅基、深基或地下连续墙等。 荷载分析&#xff1a…

Lumos学习python第九课:VSCode+Anaconda

注意Anaconda版本和Python版本的对应关系&#xff0c;同一个Anaconda可以支持多个Python版本&#xff0c; 注&#xff1a;现在vscode已原生支持jupyter notebook&#xff08;要求Python版本>3.6&#xff09; Anaconda在Python解析器的基础上封装了很多Python包&#xff0c…

Weblogic任意文件上传漏洞(CVE-2018-2894)漏洞复现(基于vulhub)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

C++模板编程

模板是泛型编程的基础&#xff0c;先给出泛型编程的概念。 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。 应用场景&#xff1a;比如要实现一个通用的&#xff0c;进行两个变量互相交换的函数&#xff0c;此时可以通过函数重载的方式&…

Ubuntu配置VScode的C++环境

在Ubuntu系统下配置C环境&#xff0c;并运行helloworld 1. 下载VScode 我这里使用的是星火应用商店&#xff0c;在商店里面可以直接下载安装 http://spark-app.store/ 2.创建文件夹 3.启动VScode并打开该文件夹 4.安装以下几个扩展 PS&#xff1a;Clang这个插件别安装&…

3. DAX 时间函数-- DATE 日期--一生二,二生三,三生万物

在数据分析过程中&#xff0c;经常需要从一个数据推到另外一个数据&#xff0c;日期数据也是如此&#xff0c;需要从一个日期推到另外一个相关的日期&#xff0c;或者从一群日期推到另外一个相关的日期/一群相关的日期。这一期说的就是日期之间彼此推衍的函数&#xff0c;会比之…

C# 操作PDF表单 - 创建、填写、删除PDF表单域

通常情况下&#xff0c;PDF文件是不可编辑的&#xff0c;但PDF表单提供了一些可编辑区域&#xff0c;允许用户填写和提交信息。PDF表单通常用于收集信息、反馈或进行在线申请&#xff0c;是许多行业中数据收集和交换的重要工具。 PDF表单可以包含各种类型的输入控件&#xff0…

QT:事件机制

作业&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include<QPushButton> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAME…