彻底解决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,路径错误。

扫描二维码关注公众号,回复: 2410470 查看本文章

题外话,说一个我踩过的坑: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项目名称。

 

猜你喜欢

转载自www.cnblogs.com/Libinkai/p/9377864.html