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项目名称。

     

  • 相关阅读:
    PHP设计模式:简单工厂
    MySQL实现两张表数据的同步
    SSH中Action的单例与多例
    Java日期时间操作的一些方法
    Null value was assigned to a property of primitive type setter of
    Android Studio创建AVD
    一台主机上安装多个Tomcat
    Tomcat指定的服务已存在
    Unsupported major.minor version 52.0问题的解决
    修改MySQL自动递增值
  • 原文地址:https://www.cnblogs.com/Libinkai/p/9377864.html
Copyright © 2011-2022 走看看