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 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)