千家信息网

JSP和Servlet之间有什么区别

发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,这篇文章主要介绍JSP和Servlet之间有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JSP和Servlet之间有什么区别,两者之间又有什么联系?其实Servlet
千家信息网最后更新 2024年12月02日JSP和Servlet之间有什么区别

这篇文章主要介绍JSP和Servlet之间有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

JSP和Servlet之间有什么区别,两者之间又有什么联系?

其实Servlet技术的出现时间很早,是当时为了Java的服务器端应用而开发的。大家都知道Applet是应用小程序,Servlet就是服务器端小程序了。但在Microsoft公司的ASP技术出现后,使用Servlet进行响应输出时一行行的输出语句就显得非常笨拙,对于复杂布局或者显示页面更是如此。JSP就是为了满足这种需求在Servlet技术之上开发的。可见,JSP和Servlet之间有着内在的血缘关系,在学习JSP时,如果能够抓住这种联系,就能更深刻地理解JSP应用的运行机理,达到事半功倍的效果。

将通过对一个JSP应用运行过程的剖析,深入JSP运行的内幕,并从全新的视角阐述一些JSP中的技术要点。

HelloWorld.jsp

我们以Tomcat 4.1.17服务器为例,来看看最简单的HelloWorld.jsp应用程序是怎么运行的。

代码清单1:HelloWorld.jsp

HelloWorld.jsp

< %   String message = "Hello World!";  %> < %=message%>

这个文件非常简单,仅仅定义了一个String的变量,并且输出。把这个文件放到Tomcat的webappsROOT目录下,启动Tomcat,在浏览器中访问http://localhost:8080/HelloWorld.jsp,浏览器中的输出为"HelloWorld!"

让我们来看看Tomcat都做了什么。转到Tomcat的workStandalonelocalhost_目录下,可以找到如下的HelloWorld_jsp.java,这个文件就是Tomcat解析HelloWorld.jsp时生成的源文件:

代码清单2:HelloWorld_jsp.java

package org.apache.jsp;  import javax.servlet.*;  import javax.servlet.http.*;  import javax.servlet.jsp.*;  import org.apache.jasper.runtime.*;  public class HelloWorld_jsp extends HttpJspBase {   ......  public void _jspService(HttpServletRequest request,   HttpServletResponse response)throws java.io.IOException, ServletException   {    JspFactory _jspxFactory = null;    javax.servlet.jsp.PageContext pageContext = null;    HttpSession session = null;    ServletContext application = null;    ServletConfig config = null;    JspWriter out = null;    Object page = this;    JspWriter _jspx_out = null;    try {     _jspxFactory = JspFactory.getDefaultFactory();     response.setContentType("text/html;charset=ISO-8859-1");     pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);     application = pageContext.getServletContext();     config = pageContext.getServletConfig();     session = pageContext.getSession();     out = pageContext.getOut();     _jspx_out = out;     String message = "Hello World!";     out.print(message);    } catch (Throwable t) {     out = _jspx_out;     if (out != null && out.getBufferSize() != 0)      out.clearBuffer();     if (pageContext != null) pageContext.handlePageException(t);    } finally {    if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);    }   }  }

从上面可以看出,HelloWorld.jsp在运行时首先解析成一个Java类HelloWorld_jsp.java,该类继承于org.apache.jasper.runtime.HttpJspBase基类,HttpJspBase实现了HttpServlet接口。可见,JSP应用在运行前首先将编译为一个Servlet,这就是理解JSP技术的关键。

我们还知道JSP页面中内置了几个对象,如pageContext、application、config、page、session、out等,你可能会奇怪,为什么在JSP中的代码片断中可以直接使用这些内置对象。观察_jspService()方法,实际上这几个内置对象就是在这里定义的。在对JSP文件中的代码片断进行解析之前,先对这几个内置对象进行初始化。

首先,调用JspFactory的getDefaultFactory()方法获取容器实现(本文中指Tomcat 4.1.17)的一个JspFactory对象的引用。JspFactory是javax.servlet.jsp包中定义的一个抽象类,其中定义了两个静态方法set/getDefaultFactory()。set方法由JSP容器(Tomcat)实例化该页面Servlet(即HelloWorld_jsp类)的时候置入,所以可以直接调用JspFactory.getDefaultFactory()方法得到这个JSP工厂的实现类。Tomcat是调用org.apache.jasper.runtime.JspFactoryImpl类。

然后,调用这个JspFactoryImpl的getPageContext()方法,填充一个PageContext返回,并赋给内置变量pageConext。其它内置对象都经由该pageContext得到。具体过程见上面的代码,这里不再赘述。该页面Servlet的环境设置完毕,开始对页面进行解析。HelloWorld.jsp页面仅仅定义了一个String变量,然后直接输出。解析后的代码如下:

代码清单3:JSP页面解析后的代码片断

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

以上是"JSP和Servlet之间有什么区别"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

代码 页面 对象 方法 应用 运行 之间 就是 技术 输出 文件 变量 服务器 清单 片断 程序 服务 内容 容器 浏览器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库项目设计实例 软件开发类项目实施各阶段标志 服务器应用程序管理 软件开发项目开始前的准备工作 软件开发试用期怎么做 学校网络安全定期检查工作制度 湖州网络安全准入控制供应商 为什么lol开局无法连接服务器 四川游戏软件开发公司排名 vc 访问数据库 2004年服务器排名 国家安全网络安全标语 福建网络营销软件开发供应 龚向明软件开发 数据库中的知识发现的简称是 数据库水平分表作用 哪个英文数据库有中文 江西oa管控软件开发平台 哪些数据库应用到了数据库技术 网络安全策略配置具体内容 宁波奉化区监控存储服务器 戴尔fx2s超融合服务器 vf数据库与数据表常用命令 数据库恢复技术实现原理 南通软件开发培训老师 switch国行服务器腾讯 红帽7.4用什么数据库 创富天下网络技术 网络安全法网络运营者收集使用 广州服务器维修
0