JavaWeb学习笔记(二)——Servlet

一、Servlet简介

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

二、Servlet的运行过程

Servlet 的主要功能在于可以交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:

1、客户端发送请求至服务器端。

2、服务器通过请求的 URI 信息找到对应项目下的 web.xml 文件,根据配置信息确定要调用的 Servlet

3、检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第5步,否则,执行第4步。

4、装载并创建该Servlet的一个实例对象,调用Servlet实例对象的init()方法。

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

6、Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求。

7、服务器将响应返回给客户端。

三、Servlet的编写

1、在开发工具中创建web项目,创建普通的 java 类并继承 HttpServlet

2、重写 service 方法

3、在 service 方法中编写逻辑代码

4、在WEB-INF 文件夹下的 web.xml 文件中配置 servlet

四、web.xml 文件中的URL映射配置

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

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

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

<servlet>
    <servlet-name>Servlet的注册名称</servlet-name>
    <servlet-class>Servlet的完整类名</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Servlet的注册名称</servlet-name>
    <url-pattern>Servlet的对外访问路径</url-pattern>
</servlet-mapping>

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

五、Servlet的生命周期

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

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

  init方法是对Servlet进行初始化的一个方法,会在Servlet第一次加载进行存储时执行。destory方法是在servlet被销毁时执行,也就是服务器关闭时。

  如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法。

 

六、service、doGet和doPost的区别

1、service 方法:

      不管是get 方式还是post 方式的请求,如果Servlet 类中有service 方法,则优先调用Service 方法。

2、doGet 方法:

      在没有service 方法的情况下,如果是get 方式的请求,则调用此方法处理请求。

3、doPost 方法:

      在没有service 方法的情况下,如果是post 方式的请求,则调用此方法处理请求。

注意:如果在重写的service方法中调用了父类的service方法(super.service(arg0, arg1)),父类的 service 方法会根据请求方式调用相应的doGet和doPost方法执行。所以,一般情况下是不在重写的service中调用父类的service方法的,避免出现405错误。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值