javaweb基础:servlet第三篇 -----补充base标签

在聊这标签的作用的时候,首先说一个tomcat默认的行为,其实这个行为在很多web服务器部署网站的时候都是这样一个逻辑,那就是在部署的网站的时候,默认会启动index.html ,而在javaweb中用的是index.jsp来实现这个功能,所以为了方便演示,直接将index.jsp删除缓存一个index.html.

在这里插入图片描述

然后启动tomcat访问:http://localhost:8080/javaweb/

在这里插入图片描述

然后再web下创建一个路径:html / test

在这里插入图片描述

然后创建一个a.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="../../index.html">返回首页</a>
</body>
</html>

然后创建index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<a href="./html/test/a.html">跳转到a页面</a>
</body>
</html>

然后演示一个在html中访问一个文件资源然后返回首页的效果。

在这里插入图片描述

但是如果servlet进行转向呢?

而且将index.html修改:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<a href="./html/test/a.html"> 跳转到a页面</a>
<br/>
<a href="http://localhost:8080/javaweb/test1">通过servlet跳转到a页面</a>
</body>
</html>

如下测试写一个servle

@WebServlet("/test1")
public class test1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 
        req.getRequestDispatcher("/html/test/a.html").forward(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);

    }
}

然后测试:

在这里插入图片描述

发现通过servle访问的a.html无法返回到首页的,提示404.

为什么会出现这种情况呢?

首先看聊一下同html标签进行跳跃时候网址:

第一步: 当我们访问http://localhost:8080/javaweb/index.html或 http://localhost:8080/javaweb 然后出现了首页的html。

第二步: 当我们点击跳转的时候,看网页地址为:http://localhost:8080/javaweb/html/test/a.html

第三步:然后再点击返回首页看网址为:http://localhost:8080/javaweb/index.html

可以看出这个是一种完整的网页跳转。

看一下通过servlet进行跳转的路径为:

第一步: 当我们访问http://localhost:8080/javaweb/index.html或 http://localhost:8080/javaweb 然后出现了首页的html。

第二步: 当我们点击跳转的时候,看网页地址为:http://localhost:8080/javaweb/test1  这个是通过servlet配置url然后转发到a.html

第三步:然后再点击返回首页看网址为:http://localhost:8080/index.html

 然后报错了

通过这个可以看出两者区别,这个就涉及到 (…/…/index.html)

前面聊过再相对路径中的 (…) 默认是两个一目录,而这个依托于浏览器的地址:http://localhost:8080/javaweb/test1

可以如下看:

http://localhost:8080/javaweb/test1   ../../index.html

先消掉第二个 ..  等于如下
http://localhost:8080/javaweb    ../index.html

先消掉第一个 ..  等于如下
http://localhost:8080     /index.html

所以得到的路径就是:http://localhost:8080/index.html

通过上面的描述,明白为什么要会报错,毕竟没有这个资源路径。

当然如果根据上面的理解可以通过相对路径满足servlet的请求跳转

<!--<a href="../../index.html">返回首页</a>-->
<a href="../index.html">返回首页</a>

但是这样的相对路径不会满足html标签跳转。

当然如果a.html中如果称绝对路径就没有这个给问题了,修改如下:

 <!--<a href="../../index.html">返回首页</a>-->
 <!--<a href="../index.html">返回首页</a>-->
<a href="http://localhost:8080/javaweb/index.html">返回首页</a>

但是如果非要用相对路径,而且要满足两个请求方式的话,就可以使用 base这个标签了。

base标签可以设置当前页面所有相对路径工作时,参照那个路径进行跳转,也就是说可以不通过url上的路径进行相对路径跳转。

所以可以将a.html修改为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    因为前面聊路径了,所以这个地方只要两层文件夹就行没比如:http://localhost:8080/javaweb/test1/test1/     为了方便直接写所在路径更方便  -->
    <base href="http://localhost:8080/javaweb/html/test/">
</head>
<body>
<a href="../../index.html">返回首页</a>
</body>
</html>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值