Servlet和JSP的关系以及此关系在Tomcat中的体现


    典型的Servlet运行环境有JSWDK,Tomcat,Resin等,相比 JRun,Web Sphere,Web Logic等等,前者配置比较简单,功能较简单,而且免费,更适合初学者!常用博客:http://blog.csdn.net/dongzi87/archive/2011/01/25/6163479.aspx

    学习servlet之前首先得了解一个servlet的运行环境,下面认识一下tomcat6.0.30的目录结构:

Servlet和JSP的关系以及此关系在Tomcat中的体现_第1张图片

    在RUNNING.txt文件中简单描述了这些文件夹的做用和使用tomcat服务器的其他相关信息。今天我们主要讲解一下conf、webapps和work等文件夹在我们的应用程序运行中的作用。

    我们的应用程序主要部署在webaps文件夹下,在某个项目文件夹下含有WEB-INF文件夹,我们的应用程序就部署在其中,其中含有的元素如下图所示:

Servlet和JSP的关系以及此关系在Tomcat中的体现_第2张图片

    下面举个简单servlet例子,代码如下:

import javax.servlet.http.*;

import javax.servlet.*;

import java.io.*;

public class FirstServlet extends HttpServlet{

public void doGet(HttpServletRequest req,

HttpServletResponse resp) throws ServletException,java.io.IOException{

//控制台输出

System.out.print("My first servlet");

//浏览器输出

resp.setContentType("text/html");

resp.getWriter().print("My First Servlet");

}

}

对此java文件进行javac编译,将编译好的文件放到classes文件夹下,然后配置web.xml文件,如下图所示:

Servlet和JSP的关系以及此关系在Tomcat中的体现_第3张图片

    而后便可以启动tomcat,在浏览器中访问到我们的servlet程序了。运行结果如下图所示:

(1) 控制台的结果

Servlet和JSP的关系以及此关系在Tomcat中的体现_第4张图片

(2)浏览器中的结果

Servlet和JSP的关系以及此关系在Tomcat中的体现_第5张图片

    从上述浏览器中输出的信息我们会发现,其实servlet写的文件就是可以用于浏览器访问的,跟我们的html和一些动态网页的展现功能是很相似的。而servlet的实质就是针对运行于客户端浏览器中的Applet程序而提出的一种运行于服务器端的小应用程序。

    但servlet存在一些缺陷,这也是JSP产生的主要原因,如下所示:

1)写静态页面必须部署后才能看到效果,很难控制页面的外观。

2)从技术角度来说Servlet是Java代码和HTML静态代码的混合代码。

3)从市场竞争角度来说,微软推出了ASP产品。

    JSP主要有如下几点改进:

1)JSP是标签式的文本文件(区Servlet是Java文件)

2)JSP不需要编译(其实是由服务器监测JSP文件的变化,再将其翻译成 Servlet 代码)

服务器对其进行编译并在第一次请求时创建一个Servlet实例。所以,第一次访问JSP页面时会后延迟

3)JSP不用写配置文件

4)JSP以静态代码为主,Java代码为辅。Servlet反之。

5)是J2EE蓝图的一部分(Servlet、JSP以及EJB是J2EE的三大组件)

   下面编写并部署一个JSP程序,JSP代码文件如下所示:

MySecondJsp

<%

out.print("中国!");

%>

   不需要在web.xml文件中进行配置,直接运行tomcat,便可访问,结果如下所示:

Servlet和JSP的关系以及此关系在Tomcat中的体现_第6张图片

    由此可以看出JSP也是一种servlet。在第一次访问我们的JSP时,tomcat会对这个文件进行编译,将之编译成一个servlet类,其位置在work文件夹下。在servlet举例中我们知道运行它是需要配置web.xml文件的,那jsp编译成servlet类后不需要配置web.xml文件吗?这个当然需要,只不过tomcat已经存在了一个默认的配置,该文件的是:conf文件夹下的web.xml。

    到此可以看出tomcat实现了像访问servlet的一样的方式来访问JSP!具体的流程图如下所示:

Servlet和JSP的关系以及此关系在Tomcat中的体现_第7张图片

    对上图进行一点解释,如果是第一次调用这个jsp页面则需要从第0步顺次执行,否则只执行第5步。

    JSP从本质上来说内核还是Servlet,但与Servlet不是替代关系而是一种互补的关系。 JSP适合于写显示层的动态页面,而Servlet则适合写控制层的业务控制(页面转发)。JSP往纯标签方向发展,Servlet往纯代码方向发展,他们以Servlet内核(请求响应式的工作方式)往两个方向发展。

    一点补充:servlet和jsp的调用流程分别如下所示:

Servlet和JSP的关系以及此关系在Tomcat中的体现_第8张图片

Servlet和JSP的关系以及此关系在Tomcat中的体现_第9张图片