web中“”写在不同地方时的值不同

web中“”写在不同地方时的值不同,第1张

概述web 中的 / 到底代表什么? 用法: 1.若/交由浏览器来解析,代表当前web站点的根路径;例:http://localhost:8080/        >超链接:<a href="/TestServlet">Java Web</a><br><br> 此时相当于:http://localhost:8080/TestServlet   此时是不能连接到servlet的,因为servlet不是直 web 中的 / 到底代表什么? 用法: 1.若/交由浏览器来解析,代表当前web站点的根路径;例:http://localhost:8080/        >超链接:<a href="/TestServlet">Java Web</a><br><br> 此时相当于:http://localhost:8080/TestServlet   此时是不能连接到servlet的,因为servlet不是直接部署tomcat的webapps目录下, 正确的方式应该加上工程路径,即为:http://localhost:8080/shipin/TestServlet 。     >表单中的action:<form action="/login.Jsp" > 此时相当于:http://localhost:8080/longin.Jsp 此时也是不能连接到servlet的,,同上。     >请求重定向: request. sendRedirect("/login.Jsp") 此时相当于: http://localhost:8080/longin.Jsp 原理同上,浏览器直接更换网址 2.若/交由web服务器来解析代表当前web工程的根路径。例:/shipin/ (shipin即工程名)     >请求转发时:request. getRequestdispatcher("/chapter.Jsp").forward(request,response); 此时相当于:      http://localhost/shipin/chapter.Jsp 若此时chapter.Jsp在webContent或webroot根目录下,可以连接,服务器内部转发     >web.xml 中映射servlet的访问路径时          <servlet-mapping> <servlet-name>getinRegisterServlet</servlet-name> <url-pattern>/getinRegister</url-pattern> </servlet-mapping>     此时的getinRegisterServlet经过映射,实际路径为 http://localhost:8080/shipin/getinRegister   可以连接。     >其他定制标签 web应用中的“绝对路径”是指相对于工程根目录的路径 request.getcontextpath()可获得 此时的路径在工程目录下,例:/shipin   原理: 1.我们开发时候在浏览器中输入“http://localhost:端口号/项目名/xxx文件”请求需要的资源,并且根据tomcat的项目都是在%tomcat根目录%/webapps文件夹下,可得知,此时由浏览器发起的请求,代码中的“/”表示的当前路径就应该表示的是webapps的根目录
2、由服务器发起的路径,“/”表示项目中的Webroot根目录 路径应该怎么写 ?   上面的/代表的是被解析完成后路径的第一个/   把所有非字符串的的东西全部转化为字符串后,才开始解析第一个/   例如:<a href="<%=request.getcontextpath()%>/Test3Servlet">     里面有方法,全部转化为字符串后为"/shipin/Test3Servlet" 然后开始解析/   如上,这里/应该被解析为web站点的跟目录即http://localhost:8080/ ,解析完后即为完整的url,http://localhost:8080/shipin/Test3Servlet,                   正确理解web各个场景路径的/的含义后   该怎么判断写的路径对不对:   步骤:1.把你写的路径当中所有非字符串(例如函数)的东西都转化为字符串               2.按照上文中,/到底代表什么,把第一个/解析替换出来               3.判断最终的解析结果是不是一个完整正确的工程目录,完整正确的工程目录应该是:htttp://localhost:8080/工程名/文件的完整目录(包括文件夹)例:若目标Jsp文件在webContent目录下的Get文件夹下,则正确路径为:htttp://localhost:8080/ship/Get/login.Jsp               web应用中的“绝对路径”是指相对于工程根目录的路径 request.getcontextpath()可获得   此时的路径在工程目录下,例:/shipin         相对路径是指,相对于一个文件或文件夹的路径   设当前文件(即代码执行到哪个文件)为a.Jsp,相对路径的作用范围:   若c.Jsp处于与当前文件同一级目录:c.Jsp   若c.Jsp处于与当前文件同一级目录的文件夹下:/文件夹名/c.Jsp   若c.Jsp处于与当前文件上一级目录:../c.Jsp       最好写绝对路径getcontextpath() + 具体文件相对于工程的文件夹路径,不容易出错。       绝对路径的反例:   把所有非字符串的的东西全部转化为字符串后,才开始解析第一个/,,非常重要,举个反例,request.getRequestdispatcher(request.getcontextpath()+"/Test3Servlet").forward(request,response);   此例咋一看没啥问题,但是,先来看,把非字符串转化字符串后:/shipin/Test3Servlet,然后解析/,这是转发,/应该被解析为:/shipin/,然后最终路径就变成了:/shipin/shipin/Test3Servlet,只要/还可以解析,就会向上解析,最终变成了http://localhost/8080/shipin/shipin/Test3Servlet,显然这是错误的。这里就不能加上request.getcontextpath(),只要request.getRequestdispatcher("/Test3Servlet").forward(request,response);   则/Test3Servlet被解析为/shipin/Test3Servlet,然后/shipin/Test3Servlet又被解析为http://localhost/8080/shipin/Test3Servlet.         相对路径的反例:   从一个a.Jsp提交请求到personServlet再转发到b.Jsp,当到了personServlet时,此时的当前文件就是personServlet,所以要以personServlet为当前目录去定位b.Jsp,即便a.Jsp和b.Jsp在同一目录下,也不能就写:b.Jsp,而要写相对于personServlet的路径。而写绝对路径就没问题,顾名思义,绝对定位,不是相对的。 总结

以上是内存溢出为你收集整理的web中“/”写在不同地方时的值不同全部内容,希望文章能够帮你解决web中“/”写在不同地方时的值不同所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1057516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存