JSP 编译和运行过程与JSP转移源码简单分析
Web容器处理JSP文件请求的执行过程主要包括以下4个部分:
1. 客户端发出Request请求
2. JSP Container 将JSP转译成Servlet的源代码
3. 将产生的Servlet源代码经过编译后,并加载到内存执行
4. 把结果Response(响应)至客户端
很多人都会认为JSP的执行性能会和Servlet相差很多,其实执行性能上的差别只在第一次的执行。因为JSP在执行第一次后,会被编译成Servlet的类文件,即.class,当再重复调用执行时,就直接执行第一次所产生的Servlet,而不再重新把JSP编译成Servelt。因此,除了第一次的编译会花较久的时间之外,之后JSP和Servlet的执行速度就几乎相同了。
在执行JSP网页时,通常可以分为两个时期:转译时期(Translation Time)和请求时期(Request Time)
转译时期:JSP网页转移成Servlet类。
请求时期:Servlet类执行后,响应结果至客户端。
转译期间做了两件事情:
转译时期:将JSP网页转移为Servlet源代码 .java.
编译时期:将Servlet 源代码 .java编译成 Servlet类 .class.
当JSP网页在执行时,JSP Container 会做检查工作,如果发现JSP网页有更新修改时,JSP Container 才会再次编译JSP成 Servlet; 如果JSP没有更新时,就直接执行前面所产生的Servlet.
showdate.jsp
<%@ page language="java" contentType="text/html;charset=gb2312" import="java.text.*,java.util.*;"%>
<html>
<head>
<title>Show time</title>
</head>
<body>
Hello :
<%
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
String str = format.format(new Date());
%>
<%=str %>
</body>
</html>
当部署好 showdate.jsp 之后,启动 Tomcat服务器 。
1. 在IE浏览器中输入配置好的路径 .... showdate.jsp 请求这个页面
2. JSP Container 即Tomcat 服务器会将 showdate.jsp 转译成 showdate_jsp.java 源文件
3. 同时将 showdate_jsp.java 源文件编译成 showdate_jsp.class
4. 编译执行showdate_jsp.class 类,处理请求,返回响应,容器将生成的页面返回给客户端显示
转移成的 java 源文件 showdate_jsp.java
package org.apache.jsp.ch04;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.text.*;
import java.util.*;;
public final class showdate_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static java.util.List _jspx_dependants;
public Object getDependants() {
return _jspx_dependants;
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
try {
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html;charset=gb2312");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<title>Show time</title>\r\n");
out.write("</head>\r\n");
out.write("<body> \r\n");
out.write("\tHello : \r\n");
out.write("\t");
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
String str = format.format(new Date());
out.write("\r\n");
out.write("\t ");
out.print(str );
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
当 JSP 页面被转译成Servlet时,内容主要包含三个部分:
public void _jspInit(){ ..} -- 当JSP网页一开始执行时,最先执行此方法,执行初始化工作
public void _jspDestory(){...} – JSP网页最后执行的方法
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
-- JSP网页中最主要的程序都是在此执行
将 showdate.jsp 和 showdate_jsp.java 做一个简单对比
第一部分:页面属性的对比
<%@ page language="java" contentType="text/html;charset=gb2312" %>
response.setContentType("text/html;charset=gb2312");
//通过 response响应设置返回客户端的页面属性
第二部分:HTML标签
<html>
<head>
<title>Show time</title>
</head>
..
</html>
out.write("\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<title>Show time</title>\r\n");
out.write("</head>\r\n");
out.write("<body> \r\n");
out.write("\tHello : \r\n");
out.write("\t");
//通过 out对象 向客户端写HTML标签
第三部分:声明的对象
<%
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
String str = format.format(new Date());
%>
在 _jspService 方法中声明的局部变量
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
String str = format.format(new Date());
第四部分:表达式
<%=str %>
out.print(str ); //写 即打印str变量的值
分享到:
相关推荐
当我们在服务器上运行一个JSP文件时,服务器会将其转换成一个Servlet(Java类),然后编译为.class文件,这个过程被称为JSP编译。下面我们将详细探讨这一过程以及如何将生成的Java类反编译为.class文件并打包到.jar...
总结来说,理解和配置Tomcat的JSP编译参数是优化Java Web应用程序性能、提升开发效率和确保错误处理的关键。通过对`web.xml`的适当调整,你可以定制JSP的编译行为,使其更好地适应项目的需求。同时,了解这些参数也...
2. **Servlet技术**:JSP最终会被编译为Servlet,因此理解Servlet生命周期和请求处理机制对于理解JSP源码至关重要。 3. **MVC设计模式**:许多博客系统采用Model-View-Controller(模型-视图-控制器)架构,其中JSP...
预编译过程将JSP文件转换为Servlet源码,然后编译成.class文件,减少了运行时的解析和编译时间。 一、JSP预编译的重要性 JSP预编译的主要好处是提高应用响应速度。在没有预编译的情况下,JSP首次被请求时会经历...
开发者可以创建一个简单的JSP项目,引入反编译后的源码,然后按照组件的使用指南编写上传页面,通过实际操作来验证源码的功能。 总的来说,`jspSmartUpload`组件的反编译源码为开发者提供了深入学习和定制上传功能...
但是,手工编译JSP可以提前完成这个步骤,提高应用程序的启动速度和运行效率。 1. **JSP预编译原理** - JSP预编译过程实际上是将JSP转换为对应的Servlet源代码,然后编译成字节码。这使得应用在首次请求时无需等待...
**JSP预编译与打包成JAR**是Web应用开发中的一个重要环节,尤其是在大型项目中,为了提高...对于大型项目,预编译JSP并将其打包进JAR文件,能够显著提升用户体验,因为这减少了服务器的启动时间和运行时的内存占用。
JSP页面经历四个阶段:翻译、编译、加载和实例化。翻译时,JSP被转换为Servlet源代码;编译后,生成Servlet类文件;加载时,Servlet被JVM加载;实例化阶段,Servlet对象被创建并处理请求。 **3. JSP内置对象** JSP...
编译源码时,会用到`ecj.jar`,这是Eclipse Java Compiler的jar包,用于编译JSP文件。 6. **其他依赖库**:Tomcat源码中还包括了其他一些必要的库,如`servlet-api.jar`、`jsp-api.jar`等,这些都是Java Web应用的...
本资料主要涉及JSP源码的解析与实例分析,特别关注的是一个电子商城系统和企业快信应用的实现。 首先,让我们深入理解JSP的核心概念。JSP通过将HTML模板和Java代码分离,使得开发者可以更方便地处理视图和控制逻辑...
《图书管理系统源码详解——基于JSP+Java+Tomcat+MySQL+Eclipse的实现》 图书管理系统是一款常见的信息管理软件,广泛应用于图书馆、...同时,通过分析和运行这个系统,开发者可以提升自己的编程技能和项目实践能力。
综上所述,JSP源码分析主要关注JSP页面的结构、指令、脚本元素、动作标签的使用,以及与之相关的数据库操作、XML处理、样式控制等技术。每个JSP文件都有其特定的功能,通过它们的名称可以推测其大致用途。同时,SQL...
【JSP手机销售网 JSP课本源码】项目是一个典型的基于Java Server Pages(JSP)技术的Web应用程序,用于模拟手机在线销售...通过阅读和运行源码,你可以了解如何将前端界面与后端逻辑结合起来,实现一个完整的动态网站。
在这个网上商城系统中,Tomcat负责接收和响应来自浏览器的请求,同时管理JSP页面的编译和执行,确保了系统运行的稳定性和效率。 数据库在电商系统中扮演着至关重要的角色,它存储了商品信息、用户数据、订单详情等...
【交易平台JSP源码详解】 在IT行业中,JavaServer Pages(JSP)是一种广泛用于创建动态Web内容的技术,尤其在构建交互式...通过深入研究提供的"交易平台JSP源码",开发者能够更好地理解和学习到实际项目中的实践知识。
在IT行业中,Ant和Tomcat是两个非常关键的组件,分别用于...通过Ant编译源码,MyEclipse导入和运行,开发者可以更深入地理解Tomcat的工作机制,并进行定制化开发。在实践中不断探索,将有助于提升你的Java EE开发技能。
2. **JSP生命周期**:JSP页面经过编译后会转化为Servlet,经历解析、编译、初始化、服务和销毁五个阶段。在服务阶段,每次HTTP请求都会调用Servlet的service方法来处理。 3. **JSP指令**:包括page、include和...
通过学习和分析这个项目,开发者不仅可以掌握JSP的编程技巧,还能了解如何在实际环境中部署和运行Java应用,以及如何利用XML进行数据管理和配置。同时,它也是理解和实践电子商务系统设计的一个宝贵资源。
翻译阶段将JSP转换为Servlet源码,然后编译为Servlet类;初始化阶段创建Servlet实例并调用其`init()`方法;服务阶段处理客户端请求,执行`service()`方法。 3. **JSP指令**:如`<%@ page %>`, `<%@ include %>`, 和...