shaboshi2015 2011-03-20 10:52
浏览 237
已采纳

response.sendRedirect和RequestDispatcher跳转的怪问题,请大家帮助

(1)利用MyEclipse新建web project,在WebRoot目录下建立子目录admin和css,在admin目录下有1.jsp,在css目录下有s.css.
(2)在1.jsp中通过以下代码使用样式文件s.css


侧栏



(3)在浏览器中浏览1.jsp文件,样式应用成功。
(4)新建一个Servlet.问题出现了,如果在Servlet通过
response.sendRedirect("admin/1.jsp"); 该句代码跳转到1.jsp后,样式表仍然起作用
但是如果通过以下方法跳转,跳转后在1.jsp中样式表不起作用。
RequestDispatcher rd = request.getRequestDispatcher("admin/1.jsp");
rd.forward(request, response);
这里就不明白两种跳转为什么有一种导致样式不生效呢。

如果将1.jsp不放在admin目录下,直接放置在WebRoot目录下,两种跳转方式跳转后,样式表文件都生效,但是不知道为什么1.jsp放置在admin子目录中后,ReqeustDispatcher的跳转方式

跳转后样式文件不生效。

请各位指教,小弟感激涕零

  • 写回答

4条回答 默认 最新

  • changchanghust 2011-03-20 14:11
    关注

    是相对路径的问题。
    我从lz描述的现象猜测lz的servlet应该映射的是web应用的根目录下的,假设相关的url如下:

    servlet: http://localhost:8080/myapp/myservlet
    jsp: http://localhost:8080/myapp/admin/1.jsp
    css: http://localhost:8080/myapp/css/s.css

    要取到css文件,浏览器请求的url应该是http://localhost:8080/myapp/css/s.css

    (1)直接访问jsp的情况,浏览器请求的url是http://localhost:8080/myapp/admin/1.jsp,然后再根据../css/s.css请求css文件,相对路径转换后的url是http://localhost:8080/myapp/css/s.css,所以可以取到文件。

    (2)response.sendRedirect的情况,访问servlet后,浏览器被重定向到http://localhost:8080/myapp/admin/1.jsp,情况跟(1)一样,所以也能取到。

    (3)rd.forward的情况,浏览器请求的是http://localhost:8080/myapp/myservlet,经过请求转发,返回1.jsp的内容,但浏览器的url仍旧是http://localhost:8080/myapp/myservlet,根据../css/s.css来取文件的话,转换后的url变为http://localhost:8080/s.css,所以取不到。

    (4)把1.jsp放在根目录下以后,lz的1.jsp里的路径应该有改成./css/s.css之类的吧。这时http://localhost:8080/myapp/myservlet被forward后,请求的css路径就变成http://localhost:8080/myapp/css/s.css,所以可以取的到文件。

    这是我猜测的大概情况,不知是否跟lz的实际情况一样。lz可以用firebug等截包工具,看看取到1.jsp页面后,浏览器发的css文件请求的url就知道了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥15 如何修改pca中的feature函数
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况