简述 jsp 页面的工作原理以及请求转发和重定向的区别(转载)

JSP的工作原理

当一个JSP页面第一次被请求时,容器首先会把JSP页面转换成Servlet。在转换时,所有HTML标签将被包含在println()语句中,所有JSP元素将会被转换成Java代码。

在转换的过程中,若JSP页面存在语法错误,转换会被终止,并向服务器和客户端输出错误信息。如果转换成功,转换后的Servlet会被编译成相应的class文件。

在调用Servlet时,首先执行jspInit()方法,然后调用jspService()方法处理客户端的请求。对客户端发送的每一个请求,JSP容器都会创建一个新的线程来处理。如果有多个客户端同时请求该JSP文件,JSP容器会为每个客户端请求创建对应一个线程。

如果jsp文件被修改,服务器将根据设置决定是否对该文件进行重新编译。如果重新编译,内存中的Servlet会被新的编译结果取代。

Servlet被处理完毕以后,调用jspDestroy()方法结束它的生命周期,同时被JVM(Java虚拟机)的垃圾回收器回收。

注释:

JSP页面必须要在JSP服务器内运行,如tomcat weblogic,jboss等等.(顺便说一下,apache 和 tomcat是两码事儿,有不少人认为apache就是tomcat,其实是错误的理解!~,tomcat只是apache中的一个子项目,apache是作为WEB应用服务器,而tomcat可以说是JSP或Servlet的一个web容器);

JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。

请求转发和重定向的区别

1)一个 web 资源收到客户端请求后,通知浏览器去访问另外一个 web 资源进行处理,称之为请求重定向。response.sendRedirect(“XXX.jsp 或者 servlet”)。

2)一个 web 资源收到客户端请求后,通知服务器去调用另外一个 web 资源进行处理,称之为请求转发。

request.getRequestDispatcher("XXX.jsp 或者servlet").forward(request,response)。
  • 1

(1)请求转发:

  • 只能将请求转发给同一个 Web 应用;
  • 浏览器的地址栏不发生变化;
  • 转发的是同一次请求;请求转发的调用者和被调用者之间共享相同 request对象和 response 对象;
  • 转发在服务器端完成。请求转发实际上是通过服务器端将请求转发到另外的
  • 页面或者 Servlet 中。这个时候跳转的目标页面或者 Servlet 可以获取到请求对象,也可以获取到请求中的属性和参数。

(2)重定向:

  • 重定向是在客户端完成的。实际上是第一次请求后,服务器端向客户端发送了一个指令,让客户端再次请求了一次服务器端,这个时候服务器第二次拿到的 request 对象已经不是第一次请求的 request 对象了,所以无法获取到第一次请求里的参数和属性。
  • 不仅可以指定到同一个 web 应用,还可以指定到任何的 JSP 资源。
    浏览器地址栏显示 URL 变化
  • 重定向是两次不同请求,重定向调用者和被调用者使用各自的 Request 和Response 对象。
  • 重定向是在客户端完成的。

--------------------- 作者:diligentyang 来源:CSDN 原文:https://blog.csdn.net/qq_28602957/article/details/53468300?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/chyxOne/p/9765916.html