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之间有什么区别”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


新闻名称:JSP和Servlet之间有什么区别
文章URL:http://lszwz.com/article/ieiopo.html

其他资讯

售后响应及时

7×24小时客服热线

数据备份

更安全、更高效、更稳定

价格公道精准

项目经理精准报价不弄虚作假

合作无风险

重合同讲信誉,无效全额退款