Servlet详解——学习笔记(一)

来源:互联网 发布:网页制作三剑客软件 编辑:程序博客网 时间:2024/06/05 15:41

此为是我接触Java web的第一篇博客,希望能坚持下来。本文主要是解释Struts框架中的Servlet技术,希望能让大家对Servlet有更好的理解。


       在JSP应用中,Servlet是一种独立于平台和协议的服务器端的Java应用程序,能够生成动态的Java web页面,采用“请求----响应”模式提供web服务。Servlet担当了web浏览器或其他HTTP客户程序请求和HTTP服务器上的数据库或应用程序之间的中间层。与传统的从命令行启动的Java应用程序不同,Servlet是由web服务器加载的,而web服务器必须包含支持Servlet的JVM。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。


一、Servlet的优点(主要针对CGI)

(1)高效。在Servlet中,每个请求由一个轻量级的java线程处理(而不是重量级的OS进程)。

(2)方便。它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头,处理Cookie、跟踪会话状态等,这样方便coder的工作。

(3)功能强大。例如Servlet能够直接与web服务器交互,而普通的CGI程序则不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。

(4)可移植性好。

(5)节省投资

Servlet的持久性主要分为初始化、请求处理、终止这几个阶段,JSP的本质是Servlet,coder编写的JSP页面由Web容器编译成对应的Servlet。当Servlet在容器中运行时,Servlet实例的创建及销毁等都不是由coder决定的,而是由web容器进行控制。

二、Servlet的生命周期分为四个阶段
(1)创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建。(默认)
(2)调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次
(3)响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的。
(4)在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象。

三、Servlet创建时机:
(1)第一个请求到来的时候创建
(2)在web.xml中<servlet>标签下添加<load-on-startup>2</load-on-startup>,则在服务器启动的时候就创建 标签体是正数的时候,启动服务器,即创建servlet 并且当多个<servlet>标签都定义了这个时,数字小的先加载

四、Servlet与Applet的异同

Applet与Servlet的相同之处在于它们不是独立的应用程序,没有main()方法。它们不是由coder调用,而是由另外一个应用程序(容器)调用,它们都有一个生存周期,包含init()和destroy()方法;不同之处在于Applet具有好的用户界面(AWT),与浏览器一起,在客户端运行,Servlet则没有图形界面,运行在服务器端。

五、Servlet开发体验

Servlet通常被称为服务器端小程序,是运行在服务器端的程序,功能是处理并响应客户端的请求。Servlet是一个特殊的Java类,此Java类必须继承于HttpServlet,每一个Servlet可以响应客户端的请求。

Servlet为我们提供下列方法以响应客户端的请求:

  • doGet:用于响应客户端的GET请求
  • doPost:用于......................POST请求
  • doPut:................................PUT请求
  • doDelete:..........................DELETE请求
通常Java web应用中的客户端的请求只有两种,分别为GET和POST,Servlet为了响应这两种请求,必须重写doGet和doPost方法。如果响应4种请求,需重写4个方法。在大多数情况下,Servlet对于所有请求的响应都是完全一样的,这样就可以重写一个方法来代替上面4种方法,此时只需重写service()即可响应客户端的所有请求。此外,在HttpServlet中还包含了如下两方法:

  • init(Servlet config):创建Servlet实例时,调用该方法初始化Servlet资源。
  • destory():销毁Servlet实例时,自动调用该方法回收资源
通常无需重写上面两方法,除非需要要在初始化Servlet时完成某些资源的初始化,才重写init方法,重写该方法,首先要重写该方法的第一行调用super.init(config),该方法调用HttpServlet的init方法;销毁Servlet之前先完成某些资源的回收,比如关闭数据库连接,才重写destory方法。不用为Servlet类编写构造函数,如需对类进行初始化,应将此操作放入init方法中。

初次练习:

package jweb;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class HelloServlet extends HttpServlet{    public void init(ServletConfig config) throws ServletException    {        super.init(config);    }    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException    {        response.setContentType("text/html; charset=GB2312");        PrintWriter out = response.getWriter();        out.println("<html>");        out.println("<head><title>Hello - Servlet</title></head>");        out.println("<body>");        out.println(" Hello World <br>");        out.println("</body>");        out.println("</html>");        out.close();    }    public String getServletInfo()    {        return "com.sdc.www.HelloServlet Infomation.";    }    public void destory()    {    }}

将文件保存为HelloServlet.java,上面是一个很简单的servlet程序,只是简单的输出一个Hello world,注意,用javac编译时,一定要将环境建好:即将Tomcat中的servlet-api.jar文件复制到JDK文件夹的“jre\lib\ext”中,然后编译成.class文件(使用javac HelloServlet.java来编译,会生成HelloSevlet.class文件)。
四、配置tomcat
配置tomcat,启动tomcat,在tomcat的webapps目录下新建一个文件夹,名字可以随便,我这里my_example
目录结构
webapps
      |-------my_example
                       |-------WEB-INF
                       |                |-----------classes
                       |                |-----------web.xml
                       |-------index.html


其中classes文件就是放刚刚生成HelloServlet.class文件,由于上面的代码是包含在包jweb中,所以是放在classes/jweb/HelloServlet.class
配置web.xml,是Servlet对外可见
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
    <description>Examples</description>
    <display-name>Examples</display-name>
     <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>jweb.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
   <servlet-name>HelloServlet</servlet-name>
   <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping> 
</web-app>


这样我们就可以通过http://localhost:8080/my_example/HelloServlet来访问了.



0 0
原创粉丝点击