这几天我在做一些简单的项目的时候,我发现个问题?为什么在用MVC模式开发项目的时候,在Servlet中如果用request.getRequestDispatcher();跳转的时候我的JSP中的Javascript验证(单独的js文件)和CSS样式(单独的css文件)
都显示不出来?但是, 如果换成,response.sendRedirect();的时候JSP页面里面的javascript验证和CSS 样式又能显示?
而且,还有个更严重的问题是,我在使用过滤器过滤非法用户登陆的时候,为什么使用了过滤器之后,登陆页面中的图片就没有了
(登陆页面使用的背景图片)?请各位指教哈?谢谢!!!

解决方案 »

  1.   

      谢谢你的提醒!
      
      最进我在做简单的东西的时候的确出现过这样的问题,刚刚开始的时候能够运行出来效果。但是,到后来可能是因为缓冲区满了无论怎么也不能出效果了。请问下如何来解决这种情况,是不是直接设置“不缓存”就是了?
        
      请问一下,在实际开发中,一般情况下用的是什么跳转?我上面的哪个问题,为什么我清除了缓冲区,还是不能运行出效果来?为什么路径是http://localhost:8080/Exam/admin/add.jsp才能出现效果?而这样http://localhost:8080/Exam/loginservlet就不行额?(两种路径是一样的,只不过前面是用的response,而后面用的request)?
      

  2.   

    你的具体情况我不清楚,但我遇到过跟你一样的现象。
    问题1:不同的跳转方式之后路径出问题。
    response.sendRedirect();之后你的当前路径就是你重定向的页面所在目录,所以相对路径不会出问题。
    但request.getRequestDispatcher();属于转发,转发之后路径还是你的servlet路径,从浏览器的地址栏可以看到区别。
    比如从servlet/Loginservlet 转发到a.jsp,浏览器地址栏是不变的,所以a.jsp中的相对路径就不能正确找到js css等文件。
    我的解决方法是所有路径都用绝对路径,比如在jsp页面上 <base href="http://localhost:8080/Exam/"/> 
    这样页面中所有客户端解析的路径就都以base为基准了。当然这个<base href="...."/>最好request的方法动态生成。 问题2:filter造成资源无法获取
    登录页面是不受filter保护的,否则就无法登陆了,同理登录页面要访问的图片等资源也不能被filter保护。
    把那些图片放在一个单独的目录里,和受保护页面分开就好了。