Web开发基础_Servlet学习_0017_JSP原理

简述:

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
  JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

执行原理:

浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet,如果是使用Tomcat应用服务器运行的话,那么它编译后的Servlet的java位置在:

Tomcat主目录\work\Catalina\localhost\工程名\org\apache\jsp下。

举例:

当我们通过浏览器访问hello.jsp时,服务器首先将index.jsp翻译成一个hello_jsp.class,在Tomcat服务器的work\Catalina\localhost\项目名\org\apache\jsp目录下可以看到源代码文件hello_jsp.java与hello_jsp.class

打开hello_jsp.java文件,index_jsp这个类是继承 org.apache.jasper.runtime.HttpJspBase这个类的,通过查看Tomcat服务器的源代码,可以知道在apache-tomcat-7.0.90-src\java\org\apache\jasper\runtime目录下存HttpJspBase这个类的源代码文件

Web开发基础_Servlet学习_0017_JSP原理_第1张图片

我们可以看看HttpJsBase这个类的源代码,如下所示: 

Web开发基础_Servlet学习_0017_JSP原理_第2张图片

Web开发基础_Servlet学习_0017_JSP原理_第3张图片

public abstract class HttpJspBase extends HttpServlet  implements HttpJspPage  

HttpJspBase类是继承HttpServlet的,所以HttpJspBase类是一个Servlet,而hello_jsp又是继承HttpJspBase类的,所以hello_jsp类也是一个Servlet,所以当浏览器访问服务器上的hello.jsp页面时,其实就是在访问hello_jsp这个Servlet,hello_jsp这个Servlet使用_jspService这个方法处理请求。

在jsp中编写的java代码和html代码都会被翻译到_jspService方法中去,在jsp中编写的java代码会原封不动地翻译成java代码,如<%out.print("Hello Jsp");%>直接翻译成out.print("Hello Jsp");,而HTML代码则会翻译成使用out.write("\r\n");的形式输出到浏览器。在jsp页面中编写的html排版标签都是以out.write("\r\n");的形式输出到浏览器,浏览器拿到html代码后才能够解析执行html代码。

大致的翻译执行流程:

Web开发基础_Servlet学习_0017_JSP原理_第4张图片

 

你可能感兴趣的:(Web开发,Servlet)