zoukankan      html  css  js  c++  java
  • 彻底解决web开发中遇到的路径问题(下)

    接着讨论web开发中遇到的路径问题,其实路径问题用上部的知识就可以解决,下部主要是实践检验一下。

    现在看一看前台路径(html,css,js,jsp中的静态部分,ajax等):

    我在web.xml配置Servlet时,url-pattern均以/servlets/servletName的格式命名,故只出示一例Servlet的配置截图:

    就这个配置而言,我们要想请求到达该Servlet,就要提交一个http://localhost/pathTest/servlets/FirstServlet这样的请求。

    我在上部说过:form表单(属于html),其参考路径是http://localhost/,加上form表单中的提交路径/pathTest/servlets/FirstServlet。

    请求的绝对路径正是http://localhost/pathTest/servlets/FirstServlet,所以下面这个Servlet可以正常访问(200)。

     而下面这个Servlet由于form的提交路径错误,故Servlet访问失败(404)。

    原因同理:参考路径:http://localhost+相对路径:/servlets/FirstServlet = http://localhost/servlets/FirstServlet,路径错误。

    题外话,说一个我踩过的坑:web.xml配置正确,表单提交路径也正确,但是服务器报500错误。

     

     

    原因是我以java为名分包,导致服务器到内置java包下乱找,自然找不到。所以我才知道为什么教程上都以com、org等开头打包,哭。

    下面说后台路径:

    由于在Servlet中书写的路径是后台路径,其参考路径是http://localhost/pathTest,如果相对路径是/pathTest/pages/index.html,那么绝对路径是http://localhost/pathTest/pathTest/pages/index.html,路径错误。

    所以说,路径问题分清前台路径与后台路径,记住它们的参考路径,是不是很简单了呢。

    故事还没完,年轻人:

    现在说一下一个特例:response.sendRedirect()方法。若其参数路径为以斜杠开头相对路径,那么这个后台路径是个特例。这是由sendRedirect()的本质决定的,该方法可以跳转到其它项目的资源,所以这个后台路径的参照路径为当前web服务器的根目录,如果不知道项目,根本不知道跳转到容器哪个项目。(可以使用request.getContextPath()获取路径,使代码灵活些)只有这种重定向的以斜杠开头的相对路径是特例,其它重定向遵循路径转化规律。

    所以重定向时,需要给以斜杠/开头的路径加上web项目名称。

     

  • 相关阅读:
    Codeforces 691A Fashion in Berland
    HDU 5741 Helter Skelter
    HDU 5735 Born Slippy
    HDU 5739 Fantasia
    HDU 5738 Eureka
    HDU 5734 Acperience
    HDU 5742 It's All In The Mind
    POJ Euro Efficiency 1252
    AtCoder Beginner Contest 067 C
    AtCoder Beginner Contest 067 D
  • 原文地址:https://www.cnblogs.com/Libinkai/p/9377864.html
Copyright © 2011-2022 走看看