典型的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的目录结构:
在RUNNING.txt文件中简单描述了这些文件夹的做用和使用tomcat服务器的其他相关信息。今天我们主要讲解一下conf、webapps和work等文件夹在我们的应用程序运行中的作用。
我们的应用程序主要部署在webaps文件夹下,在某个项目文件夹下含有WEB-INF文件夹,我们的应用程序就部署在其中,其中含有的元素如下图所示:
下面举个简单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文件,如下图所示:
而后便可以启动tomcat,在浏览器中访问到我们的servlet程序了。运行结果如下图所示:
(1) 控制台的结果
(2)浏览器中的结果
从上述浏览器中输出的信息我们会发现,其实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代码文件如下所示:
<html>
<head>
<title>MySecondJsp</title>
</head>
<body>
<%
out.print("中国!");
%>
</body>
</html>
不需要在web.xml文件中进行配置,直接运行tomcat,便可访问,结果如下所示:
由此可以看出JSP也是一种servlet。在第一次访问我们的JSP时,tomcat会对这个文件进行编译,将之编译成一个servlet类,其位置在work文件夹下。在servlet举例中我们知道运行它是需要配置web.xml文件的,那jsp编译成servlet类后不需要配置web.xml文件吗?这个当然需要,只不过tomcat已经存在了一个默认的配置,该文件的是:conf文件夹下的web.xml。
到此可以看出tomcat实现了像访问servlet的一样的方式来访问JSP!具体的流程图如下所示:
对上图进行一点解释,如果是第一次调用这个jsp页面则需要从第0步顺次执行,否则只执行第5步。
JSP从本质上来说内核还是Servlet,但与Servlet不是替代关系而是一种互补的关系。 JSP适合于写显示层的动态页面,而Servlet则适合写控制层的业务控制(页面转发)。JSP往纯标签方向发展,Servlet往纯代码方向发展,他们以Servlet内核(请求响应式的工作方式)往两个方向发展。
一点补充:servlet和jsp的调用流程分别如下所示: