我最近在用jsp、servlet做开发,有几个问题想问下各位牛人,
问题1:
我知道请求转发和请求重定向的区别,但我想问下在实际开发中什么时候用请求重定向,什么时候用请求转发?
问题2:
我想问下,在实际开发中,要访问一个jsp一定要先跳转到一个servlet然后再跳到jsp吗?
问题3:
jsp页面应该放到WEB-INF下,以保护不让外界直接访问吗?

解决方案 »

  1.   

    问题1:
    我的理解是,转发是客户端跳转,重定向是服务器端跳转。一般使用重定向,这样比较安全。
    问题2:
    一般在MVC开发模式中,都是jsp提交到servlet,然后servlet调用业务层的类,业务层把数据返回给servlet,然后再从servlet跳转到jsp,展示结果内容。如果a.jsp中并没有和业务层打交道,而是直接想跳到b.jsp,那么就没有必要通过servlet中转了,可以直接跳转
    问题3:
    对,jsp页面文件放在web-inf下比较安全
      

  2.   

    继续问题1:
    为什么请求转发不安全?还有重定向约等于重新向服务器发了一次请求,全部写成重定向会不会加重服务器负担,能不能列举一下哪些情况一定用请求重定向,哪些情况一定用转发?
    继续问题3:
    实际开发中也放到WEB-INF下吗?
      

  3.   

    问题1:
    (我说的比较白一点)重定向和请求转发理论上的区别是在于:
    重定向是重新发一个请求:response.sendRedirect(location)
    请求转发是接着上一个请求继续走下去:request.getRequestDispatcher(path).forward(arg0, arg1)
    最大的区别在于:我们有时候会把一些返回到表现层的的变量放到request中(也就是request.setAttribute(name, o)) 当你用重定向时你会发现你获取不到存在request中的信息,而请求转发可以!因为它是接着上一个请求走的,所以你在上一个请求放在request中的值是可以获取到的
    一般请求转发用的比较多,因为我们一般会把东西放在request当中而不是session中!当然啦看个人习惯了。问题2:
    这个没有规定!但是处于一些安全,权限过滤,字符过滤等等考虑我们一般会先通过action或servlet(控制层)再到展现层,如果你遵行的是MVC嘛问题3:
    没错,但是一般存放的是一些框架或者是系统的配置文件!如果你要存放页面的话也没问题!
      

  4.   

    楼上正解, 还有一个区别就是重定向可以定向到其它的服务器的Web应用,而转发是做不到的。一般都不会把页面放在Web-inf下,因为页面本身就是要展示给用户的