Java Servlet 介绍与实例

    技术2022-05-20  34

    什么是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 处理请求的过程

    用户从客户机将HTTP请求发送给Web服务器。Web容器实例化Servlet,并创建线程。Web服务器将该请求发送给Servlet。Servlet处理该请求。Servlet将响应发送给Web服务器。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.

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

    将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文件的完整路径名是:

    转载请注明原文地址: https://ibbs.8miu.com/read-2219832.html

    最新回复(0)