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条)

报告相同问题?

悬赏问题

  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡