Java Servlet 介绍与实例

来源:互联网 发布:淘宝助理 导入csv 编辑:程序博客网 时间:2024/05/16 10:36

什么是Servlet
在Web服务器端加载并运行的Java应用程序
具体运行在Servlet引擎管理的JVM上。
Servlet容器负责Servlet和用户的通信以及调用Servlet的方法。
Servlet和用户的通信采用请求/响应模式。
用于以动态响应客户机请求形式扩展Web服务器(Web Container)的功能。

Servlet是开发服务器端应用程序的一个很好选择, Servlet与JSP结合使用,能提供更强大的服务器端功能。

 

三种基本的Servlet引擎
大多数的J2EE服务器,如:BEA WebLogic,WebSphere Application, JBoss等。
具有内置Servlet容器的Web服务器,如:Tomcat。
使用Servlet引擎插件的产品,如JRun、 Apache Web服务器、Microsoft IIS等,这些产品都需要安装Web插件来集成Java运行时环境

 

工作原理

Servlet 处理请求的过程

  1. 用户从客户机将HTTP请求发送给Web服务器。
  2. Web容器实例化Servlet,并创建线程。
  3. Web服务器将该请求发送给Servlet。
  4. Servlet处理该请求。
  5. Servlet将响应发送给Web服务器。
  6. Web服务器将响应转发送给客户机。

Servlet被发来的第一个请求激活,然后继续运行于后台,以线程形式处理请求,速度非常快,直到Servlet被修改时才再次加载。
一个Servlet在同一时刻只有一个实例,并且它在Sevlet的使用期间将一直保留。

多线程处理多请求

Servlet的生命周期
(1)初始化阶段
    在下列情形下Web容器装入Servlet,创建一个Servlet实例,调用Servlet的init()方法对Servlet实例初始化:

  • Servlet容器启动时。
  • 在Servlet容器启动后,客户首次向Servlet发出请求。
  • Servlet的类文件被修改后,重新加载。

(2)服务阶段
   如果容器接收到对此Servlet的请求,那么它根据配置文件Web.xml中URL与Servlet映射关系将请求转发至此Servlet的service()方法。 service()方法中调用doGet()或doPost()。


(3)终止阶段

   实例被销毁,通过调用Servlet的destory()方法来销毁Servlet,关闭数据库连接、中断后台线程等。

 

实例1.

将HelloWorldServlet .java编译后得到.class文件,

将HelloWorldServlet.class文件拷贝到intall_dir/webapps/ROOT/WEB-INF/classes中,

打开intall_dir/webapps/ROOT/WEB-INF/路径下的web.xml文件,在<web-app>...</web-app>之间添加如下内容:

<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorldServlet/*</url-pattern>
</servlet-mapping>

保存web.xml 文件,注意,备份修改前的web.xml

重新启动Tomcat 服务器,在地址栏输入http://localhost:8080/HelloWorldServlet 访问HelloWorldServlet .class 即可。

注意:如果Tomcat已经启动,需要重启Tomcat

 

目录结构如下所示:

 

程序解释:

这个程序用service()方法实现对客户端的响应。在这个响应中,首先是调用了setContextType("text/html")设置响应内容类型。因为要发送文本,用getWriter( )方法获得了PrintWriter对象,第15~18行就是发送给客户端的信息,一个字符串"Hello World",一个几乎在每种语言中都要出现的程序。我们并没有显式地关闭PrintWriter对象,Servlet引擎会自动地关闭它,这样会提高性能

 

可能出现的问题

编译时提示servlet包不存在

产生这些错误的原因是Java编译器没有找到javax.servlet包中的类。

要解决这个问题,我们需要让Java编译器知道Servlet API库所在的位置。Tomcat在其发行版中已经包含了Servlet API库,是以JAR文件的形式提供的,这个JAR文件的完整路径名是:
%CATALINA_HOME%/lib/servlet-api.jar

(不知为何,我把上面的路径加进去仍不能成功,改为全路径就可以了,C:/Program Files/Apache Software Foundation/Tomcat 7.0/lib)
我们只需要在系统的CLASSPATH环境变量下添加这个JAR文件的路径名就可以了。

 

注意,修改系统变量后需要重启电脑