`
xiaoye4188
  • 浏览: 30934 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

深入分析JSP

    博客分类:
  • JSP
阅读更多

首先,面试的时候经常会被问到JSP和Servlet有什么关系?

从表面上看,JSP处理页面展示,Servlet处理页面跳转;更进一步就是有些面试宝典上说得:JSP编译后是类Servlet文件

 

那么到底两者是什么关系?见下面分析

 

一个简单的JSP文件HelloWorld.jsp

 

<%@ page buffer="16kb" %>
<%! int a = 0; %>
<%
 String message = "Hello World!";
 out.print(a);
%>
<%=message%>
 

 

将它拷贝到Tomcat下\webapps\ROOT下

经过Tomcat编译后看一下文件夹在我本地是\apache-tomcat-6.0.14\work\Catalina\localhost\_\org\apache\jsp,
你会发现有个HelloWorld_jsp.java,内容如下:
package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class HelloWorld_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

 int a = 0; 
  private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();

  private static java.util.List _jspx_dependants;

  private javax.el.ExpressionFactory _el_expressionfactory;
  private org.apache.AnnotationProcessor _jsp_annotationprocessor;

  public Object getDependants() {
    return _jspx_dependants;
  }

  public void _jspInit() {
    _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
    _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
  }

  public void _jspDestroy() {
  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    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 {
      response.setContentType("text/html");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 16384, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write('\r');
      out.write('\n');
      out.write('\r');
      out.write('\n');

 String message = "Hello World!";
 out.print(a);

      out.write('\r');
      out.write('\n');
      out.print(message);
      out.write('\r');
      out.write('\n');
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try { out.clearBuffer(); } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}
  发现这个类的方法_jspInit()、_ jspDestroy()、_jspService()和Servlet中的init()、destory()、service()非常像,其实这个文件就是一个servlet。

  下面说明几点:
  1)这个类extends org.apache.jasper.runtime.HttpJspBase,而HttpJspBase extends javax.servlet.http.HttpServlet
  2)我们知道JSP的内置对象可以在页面上直接用,原理何在?看一下上面的_jspService()方法中的变量声明 包含6个对象除了request、reponse和exception,并进行了初始化
  3)可以看到_jspService()处理主要的页面输出,对比JSP的代码
  4)在JSP中我们设定了缓存<%@ page buffer="16kb" %> 在HelloWorld_jsp.java中体现在pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 16384, true);
  



分享到:
评论

相关推荐

    JSP核心技术源代码分析

    通过深入分析JSP的源代码,我们可以更好地掌握其工作原理,理解JSP与服务器、客户端之间的交互,从而更高效地开发和维护Web应用程序。无论是初学者还是经验丰富的开发者,都能从中受益,提升对JSP技术的理解和应用...

    基于JSP精品课程网站-任务书最终版.doc

    6. **关键技术分析**:深入分析JSP的关键技术,例如JavaBean、MVC(Model-View-Controller)设计模式,以及如何使用Servlet和JSP协同工作。 7. **编写语言理解**:Java是JSP的基础,学生需要熟悉Java编程,理解面向...

    JSP数据库连接池的研究与实现(源代码+论文).rar

    此资料包包含了深入分析JSP环境下数据库连接问题的学术论文以及一套实现高效数据库连接池的源代码。该研究论文详细讨论了为何需要使用连接池、连接池的工作原理、以及它们如何显著提高应用程序响应时间和整体性能。...

    JSP网络开发逐步深入源代码

    本资源“JSP网络开发逐步深入源代码”旨在帮助初学者逐步掌握JSP的核心概念和技术,通过实际的源代码实现,让学习过程更加直观和实用。** **1. JSP基础** JSP是Java平台的一部分,它的核心理念是将静态内容(如HTML...

    深入分析JavaWeb技术内幕 修订版PDF

    但根据【标题】和【描述】,我们可以对“JavaWeb技术内幕”的知识点进行深入的介绍。 首先,“JavaWeb技术内幕”通常指深入探讨Java语言用于开发Web应用的核心技术与原理。JavaWeb主要依赖于Java EE(Java Platform...

    JSP探针JSP探针

    JSP探针,作为网络安全和服务器管理工具,主要用于检测和分析JSP应用中的漏洞和异常行为。JSP探针可以帮助开发者和系统管理员监控JSP应用程序的运行状态,预防潜在的安全威胁,并提供性能优化的依据。 1. **JSP探针...

    深入分析java ++web技术内幕 修订完全版

    《深入分析Java ++Web技术内幕 修订完全版》是一本专为Java Web开发人员精心编写的权威指南。这本书详尽地探讨了Java在Web领域的应用和技术内幕,旨在帮助读者掌握核心概念并提升实际开发能力。作为一本必备的参考...

    许令波——深入分析Java Web技术内幕

    本文档为针对Java Web的技术文档,有网易工程师许令波老师所著,深入分析了jsp、servlet、EL于MVC中的调度关系分析,同时涉及了框架的部分内容,适合于入门不久的猿们用来提升实力,深入理解Java Web的相关机制!

    java jsp语法分析

    本文将深入探讨Java JSP的基本语法和关键概念。 1. **JSP基本结构** JSP页面由两部分组成:静态内容(HTML、CSS、JavaScript)和动态内容(Java代码)。动态内容以`&lt;% %&gt;`或`&lt;jsp:*&gt;`标签形式存在。例如: ```jsp...

    深入分析java web

    《深入分析Java Web》这本书是Java Web开发领域的一本经典之作,它涵盖了多个核心主题,旨在帮助读者深入了解这个领域的各种技术细节。以下是书中的主要知识点: 1. **Java Web基础知识**:这部分通常会介绍Web应用...

    百度云下载--《深入分析Java Web技术内幕》修订版 许令波著 PDF扫描版[92M]

    根据提供的文件信息,我们可以推断出这是一本关于Java Web技术的书籍——《深入分析Java Web技术内幕》修订版,作者是许令波。本书主要针对Java Web开发人员和技术爱好者,旨在深入剖析Java Web技术的核心原理及应用...

    jsp网站流量图表分析

    本文将深入探讨如何利用JSP技术来构建一个网站流量图表分析系统,帮助我们理解并优化网站性能。 首先,JSP的核心在于它的Java代码嵌入,这使得开发者能够直接在HTML页面中编写业务逻辑。在构建流量图表分析系统时,...

    jsp网站流量图表分析系统

    【标题】"jsp网站流量图表分析系统"是一个基于JavaServer Pages (JSP)技术构建的系统,用于收集、处理和展示网站流量数据。这个系统旨在帮助网站管理员深入了解用户行为,通过对访问量、页面浏览量、用户来源等关键...

    深入分析Java Web技术内幕 完整修订版本

    《深入分析Java Web技术内幕 完整修订版本》是一本专为Java Web开发人员精心编写的书籍,旨在全面解析Java Web技术的核心概念、原理及实际应用。书中通过淘宝实例,将理论与实践相结合,帮助读者深入理解并掌握相关...

    JSP的相对路径深入研究

    JSP相对路径深入研究 JSP相对路径深入研究是指在JSP文件中使用图片、CSS、JavaScript等资源时,如何正确地计算相对路径,以便正确地加载资源。下面我们将深入研究JSP相对路径的计算规则。 第一种情况:直接访问JSP...

    jsp网上商城jsp课程设计

    在学习和分析这个项目时,你将有机会深入理解JSP的生命周期,了解如何使用JSP和Servlet协同工作,以及如何组织一个实际的Web应用结构。此外,你还需要掌握如何从外部数据库读取和写入数据,以及如何调试和优化代码以...

    JSP核心技术源代码分析(pdf格式)

    在"JSP核心技术源代码分析"中,我们将会深入探讨以下几个关键知识点: 1. **JSP基本元素**:包括指令(Directives)、脚本元素(Scripting Elements)、动作(Actions)。指令如`&lt;%@ page %&gt;`用于设置页面属性,...

    jsp小程序案例分析

    在本案例分析中,我们将深入理解JSP的工作原理、核心特性以及如何应用到实际的小程序开发中。 1. **JSP的基本结构** JSP页面主要由两部分组成:静态内容(HTML、CSS、JavaScript)和动态内容(Java代码)。动态...

    Servlet JSP深入详解 基于Tomcat的Web开发

    #### 五、案例分析:使用Servlet和JSP创建登录系统 为了更好地理解Servlet和JSP的实际应用,我们可以通过一个简单的登录系统来实践。该系统包括用户输入用户名和密码,然后由Servlet验证这些信息是否正确,并根据...

    JSP销售分析系统源代码.rar

    【JSP销售分析系统源代码】是一个基于Java服务器页面(JSP)技术构建的系统,主要功能在于对销售数据进行深度分析。这个源代码包包含了JAR文件和JAVA源代码,意味着开发者可以深入理解系统的内部逻辑,并根据需要...

Global site tag (gtag.js) - Google Analytics