厦门网站开发网站建设网站,免费购物平台都有哪些,wordpress企业仿站,合肥建设工程信息网初学jspservlet时经常碰上的几个错误#xff1a;404、路径正确但页面没有任何内容、样式和图片丢失。这几个错误曾经让我在debug时头大#xff0c;现在总结一下#xff0c;其实它们都跟路径有关#xff0c;正是因为没有处理好路径跳转的问题#xff0c;才引发了这一连串的…初学jspservlet时经常碰上的几个错误404、路径正确但页面没有任何内容、样式和图片丢失。 这几个错误曾经让我在debug时头大现在总结一下其实它们都跟路径有关正是因为没有处理好路径跳转的问题才引发了这一连串的错误。 首先要说明的是我们的页面本来是没有问题的导致问题发生的是路径跳转。 那么使我们的URL路径跳转的操作有哪些呢 大概有以下几种 1、客户端实现的跳转如html里的a标签和表单提交、js里的window.location.href 2、request.getRequestDispatcher 3、response.sendRedirect 那么这些路径跳转方式有什么不同呢 首先是客户端实现的跳转 客户端实现的跳转最不容易出现问题 但值得注意的是“”代表的不是项目的根路径而是tomcat里指定的根路径默认在webapps/ROOT下 注意urlPatterns里的“”除外urlPatterns里的“”指的是项目的根目录 所以要用request.getContextPath()来获取项目的根路径 如下: % page contentTypetext/html;charsetUTF-8 languagejava % htmlhead style typetext/css #p1 { height: 20%; width: 20% } /style/headbodya href%request.getContextPath()%/servlet/AddServletclick/aimg idp1 src%request.getContextPath()%/spic/img9.jpg//body/html 绝对路径这么麻烦那么为什么不用相对路径呢理由如下 使用request.getContextPath()还有一点重要原因在服务器内部request.getRequestDispatcher跳转后页面对应URL路径会发生变化而此时若再以相对路径去请求资源很可能请求不到需要的资源此时就会发生样式和图片丢失的问题。 服务器内部跳转request.getRequestDispatcher 以这种方式实现的跳转在服务器内部运行不会经过客户端的处理对应的URL路径不会发生变化究其原因是因为http的特性只允许客户端发起的请求重新定位URL路径。因此即使在servlet里用request.getRequestDispatcher跳转到其它路径实际上其路径并不会发生改变可以简单的理解为把本来要跳转到路径的资源移到原路径下运行。 可以看出如果我们在servlet里跳转到另一个servlet或jsp页面时其路径还是原路径。 值得注意的是 因为在服务器内部跳转后需要request和response对象才能进行后续操作因此需要forward(request,response)如果没有forward就会出现页面没有任何内容的错误因为没有获取request不能进行后续操作。 请求重定向response.sendRedirect 当在servlet里用请求重定向时实际上是返回给客户端信息让客户端重新发一次http请求给指定的资源因此才实现路径的跳转。 这样可以真正实现路径的跳转也不容易出现资源错误但也因为重新进行的http请求http的无状态性使request里保存的数据不能传递数据只能通过“........?a1bflypie”这种形式写在URL里。 转载于:https://www.cnblogs.com/flypie/p/5136528.html