servlet之路径问题

本文探讨了在Servlet中遇到的404错误通常是由于路径问题导致的。重点讲解了URL地址的构成,如http://localhost:8080/servlet001/hello/3.html,并指出URL的准确性对于资源访问至关重要。还区分了相对路径和绝对路径的概念,强调在服务器端和浏览器端的不同,并提到了在静态页面中使用base标签以及在服务器端获取项目名称的方法。最后给出开发中应使用绝对路径而非相对路径的建议。

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

访问资源时经常出现访问404错误,一般都是路径的问题。
需思考以下几点。什么是Url地址、相对路径、绝对路径,二者之间有何区别;路径常常出现在什么地方。

项目结构图:
这里写图片描述

==============================

重点内容
URL地址:
访问服务器资源时需要在浏览器地址栏输入:
http://主机地址:端口号/项目名/资源路径/资源名,
比如:http://localhost:8080/servlet001/hello/3.html
再熟悉不过了,这个就是我们的URL地址,访问资源时都必须通过我们的URL地址去访问,那么URL的地址正确与否就显得特别的关键。

====================================

相对路径和绝对路径:

相对路径:2.html: <a href="2.html">去2.html</a>
绝对路径:2.html: <a href="/2.html">去2.html</a>

平常所说的相对绝对指的是上面书写的问题。有一点需要注意的是,不管是相对路径书写还是绝对路径书写,他们都有自己的相对路径,并且是一样的。
相对的路径分为2种情况,服务器端、浏览器端。
服务器端相对的路径是:http://localhost:8080/10_WEB_Path/
浏览器端相对的路经是:http://localhost:8080/
因此我们访问资源是的URL地址栏显示的路径字符串就是等于书写的路径+相对的路径

===================================

对于浏览器:
base标签:项目名称时常发生变动,如果频繁在静态页改动很麻烦,统一配到base标签里。

对于服务器:想取得项目名称,使用:
String contextPath = request.getContextPath();

/**

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- base标签中可以设置一个href属性,这个属性可以作为页面中所有相对路径的前缀 -->
<!-- base标签不会对使用绝对路径书写起作用 -->
<!--浏览器端相对的路经是:http://localhost:8080/-->
<base href="http://localhost:8080/10_WEB_Path/" />
</head>
<body>

    <!--http://localhost:8080/10_WEB_Path/index.html  -->
    <a href="index.html">去index.html</a>

    <hr />

    <!--http://localhost:8080/10_WEB_Path/hello/1.html  -->
    <!-- 实际上base标签就是可以让我们以相对路径的方式使用绝对路径 -->
    <a href="hello/1.html">去1.html</a>
</body>
</html>

*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //转发到1.html
        //转发是在服务器内部进行,它会自动为绝对路径加上项目名
        request.getRequestDispatcher("/hello/1.html").forward(request, response);

        //重定向是发生在浏览器端的,地址由浏览器解析,绝对路径需要加上项目名

        /*String contextPath = request.getContextPath();
        System.out.println(contextPath);

        response.sendRedirect(contextPath+"/hello/1.html");*/

    }

====================================
tips:
1.使用绝对路径书写,不要使用相对路径书写,因为转发的缘故,相对路径非常容易发生改变,所以在开发中我们从来不使用相对路径。

/**
使用相对路径书写发生错误场景:

1.html: <a href="2.html">去2.html</a>

Index.html:<a href="PathServlet">转发去1.html</a>

    PathServlet:request.getRequestDispatcher("/hello/1.html").forward(request, response);


在index.html中点击转发去1.html,通过转发去到了1.html页面,地址栏显示的地址是:http://localhost:8080//10_WEB_Path/PathServlet
再点击去2.html时,发送了404错误。因为转发地址栏路径不变,此时相对的路径是http://localhost:8080//10_WEB_Path/,加上2.html成了http://localhost:8080//10_WEB_Path/2.html;所以资源找不到。


*/

2.常见路径:

/**

            servlet中的url-pattern、转发的路径
                -- 这两个的绝对路径由服务器解析,相对于项目的根目录  http://localhost:8080/10_WEB_Path/


            重定向的路径、页面中的路径:
                > 这两个路径有浏览器解析,相对于服务器的根目录
                http://localhost:8080/

*/

未完待续!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值