首先,面试的时候经常会被问到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环境下数据库连接问题的学术论文以及一套实现高效数据库连接池的源代码。该研究论文详细讨论了为何需要使用连接池、连接池的工作原理、以及它们如何显著提高应用程序响应时间和整体性能。...
本文档为针对Java Web的技术文档,有网易工程师许令波老师所著,深入分析了jsp、servlet、EL于MVC中的调度关系分析,同时涉及了框架的部分内容,适合于入门不久的猿们用来提升实力,深入理解Java Web的相关机制!
本书较为全面地介绍了JSP技术,由浅入深、循序渐进地介绍了JSP的运行系统,基本概念,语法规范及其相关内容,从基本的JSP概述、与其他技术的对比,到JSP的运行系统和模式,逐步深入地对JSP语法规范进行了详细的...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
本文分析JSP/Servlet的会话管理机制及其所面临的问题,然后提出了一种改进的会话管理方法。
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了 JSP开发中的种种问题。本书精要地介绍了JSP的语法、Servlet技术、JDBC 技术、标签库技术、表达式语言等基本问题,并对热门的实用开发技术Stru ...
该源代码主要采用jsp开发,此外还用到java等技术。通过该代码能够帮助你: ...5.深入分析基于JSP动漫论坛的关键技术与编写语言; 6.训练检索文献资料和利用文献资料的能力; 7.训练撰写技术文档与学位论文的能力。
随着中国加入WTO,全球经济一体化的逐步深入,互联网在我国得到了突飞猛进的发展,特别是电子商务网站如雨后春笋般涌现出来,网上购物更是已经逐渐成为一种时尚了。本文将介绍如何使用JSP技术,使网站具有基本的电子...
为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了 JSP开发中的种种问题。本书精要地介绍了JSP的语法、Servlet技术、JDBC 技术、标签库技术、表达式语言等基本问题,并对热门的实用开发技术Stru ...
深入分析JavaIO的工作机制.doc
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》附1张DVD光盘,内容为《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》汲及的源代码和Java Web学习视频。 《Java Web整合...
在对本课题进行全面深入研究和分析后,决定采用的数据库库管理系统为SQL SEVER 2005,使用的开发工具为MYECLIPSE的JSP,在面向对象的开发工具中,最主要的是JAVA,在网络查询和开发语言方面都运用了JSP技术。...
这个资料包旨在帮助学习者深入了解JSP技术,并通过实践来提升自己的编程能力。首先,这个资料包中包含了一些基础的JSP教程,这些教程详细介绍了JSP的基本概念、语法和运行机制。通过学习这些教程,你可以了解到JSP是...
由于电子书太大了 只有分part01~~part16上传 需要的朋友将16个part一起下载解压就可以用 目 录 ...1.3.5 JSP:Servlet的模板 8 1.3.6 JSP基本原理 9 1.4 本章小结 10 第2章 搭建Java Web开发环境 11
1)复习、巩固jsp的基础知识,进一步加深对jsp的理解和掌握; 2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生...
主要内容是HTML窗体、数据库访问、会话和线程管理、JSP和JavaBean、JSP 和XML、JSP测试和调试、发布Web应用、事例分析共八方面的内容。第四部分给出使用了JavaServer Page的大量的上下文——其如何与servlet、applet...
结合以上的要求,对 网上书店进行分析、功能模块划分、数据库模式分析,并由此设计了数据库 结构和应用程序。本文所设计的网上书店满足了网上购书、图书介绍、对后台图书的管 理以及定单处理等方面的需要。设计充分...