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

报告相同问题?

悬赏问题

  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题