Servlet(一)——认识Servlet

一、Servlet简介

    Servlet是Sun公司提供的一门用于开发动态Web资源的技术。

    Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:

       1、编写一个Java类,实现servlet接口。
  2、把开发好的Java类部署到web服务器中。

(按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet)


二、Servlet的生命周期(重点)

(Servlet是一个单例,只在Servlet容器中初始化一次,整个Servlet容器中只有一个Servlet对象)

Servlet程序是由Web服务器调用,Web服务器收到客户端的Servlet访问请求后:

   ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。

 ②装载并创建该Servlet的一个实例对象。

 ③调用Servlet实例对象的init()方法。

 ④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。

 ⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。




三、Servlet接口实现类

    sun公司给Servlet接口定义了两个默认实现类,分别为:GenericServlet、HttpServlet。

    HttpServlet只能够处理HTTP请求的Servlet,它在原有的Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。

     HttpServlet在实现Servlet接口时,复写了service方法,该方法体内的代码会自动判断用户的请求方式,如为get请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法,所以在编写Servlet时,通常只需要复写doGet或doPost方法,而不需要复写service方法。

Java ee eclipse的项目中创建servlet文件,如下:



web.xml中会自动生成:

<servlet>
    <description>
    </description>
    <display-name>Servlet1</display-name>
    <servlet-name>Servlet1</servlet-name>
    <servlet-class>com.zl.servlets.Servlet1</servlet-class>
</servlet>
<servlet-mapping>

    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/Servlet1</url-pattern> 
</servlet-mapping>



四、Servlet中使用配置和注解两种方式

4.1、使用配置方式

<servlet>       //注册Servlet
    <servlet-name>Servlet1</servlet-name>        //Servlet的注册名称
    <servlet-class>com.zl.servlets.Servlet1</servlet-class>       //Servlet的完整类名
</servlet>

<servlet-mapping>          //映射一个已注册的Servlet的一个对外访问路径
    <servlet-name>Servlet1</servlet-name>     //指定Servlet的注册名称
    <url-pattern>/ss</url-pattern>     //Servlet的对外访问路径,可以随便写一个
</servlet-mapping>

Servlet访问URL映射配置:

      <servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。

     由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。

    一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径。

    同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。


4.2、使用注解方式

@WebServlet("/ss")      //映射名前斜杠不能掉!!!

Servlet版本在3.0及以上,jdk在1.6及以上才可以使用注解方式!!!

@WebServlet("/ss")
public class Servlet1 extends HttpServlet {
    ......
}


五、Servlet与普通Java类的区别

    Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。

    针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。

     在Servlet的整个生命周期内,Servlet的init( )方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service( )方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service( )方法,service( )方法再根据请求方式分别调用doXXX方法。后面会讲解Servlet的生命周期这个问题



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值