Java Servlet介绍与实例

什么是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.

  1. // ==================== Program Description ==========================  
  2. // 程序名称: HelloWorldServlet.java  
  3. // 参考网址: http://www.8isp.cn/news.jsp?id=165  
  4. // 程序目的: 编写最简单的Servlet程序,熟悉其过程  
  5. // ==============================================================  
  6. import javax.servlet.*;  
  7. import javax.servlet.http.*;  
  8. import java.io.*;  
  9. public class HelloWorldServlet extends HttpServlet {  
  10.  public void service(HttpServletRequest req, HttpServletResponse res) throws IOException{  
  11.  res.setContentType("text/html");  
  12.  PrintWriter out = res.getWriter();  
  13.  out.println("<html><head><title>Hello World!</title></head>");  
  14.  out.println("<body>");  
  15.  out.println("<p><img src="images/build_bea_web.gif" mce_src="images/build_bea_web.gif" align=right>");  
  16.  out.println("<h1>Hello World!</h1></body></html>");  
  17.  }  
  18. }  

将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文件的路径名就可以了。

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值