Servlet开发详解

时间:2023-03-08 19:46:28

一、Servlet简介

Servlet是sun公司提供的一门用于动态web资源的技术

sun公司在其API中提供了一个Servlet接口,用户若想开发一个动态web资源,需要完成两个步骤:

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

二、Servlet的运行过程

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

  1. web服务器首先检查是否已经装载并创建了该Servlet的实例对象,如果是,则直接执行第4步,否则执行第2步
  2. 装载并创建Servlet的一个实例对象
  3. 调用Servlet实例对象的init()方法
  4. 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表Http响应消息的HttpServletResponse对象,然后调用Servlet的service方法,并将请求和响应对象作为参数传进去。
  5. web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destory方法

三、Servlet运行图

四、Eclipse开发创建Servlet

五、Servlet开发细节

  • Servlet访问URL映射设置

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

  <servlet>
   <!-- servlet-name是指servlet名字 -->
<servlet-name>ServletDemo1</servlet-name>
   <!-- servlet对应的类的完整类名 --> 
<servlet-class>com.atguigu.servlet.ServletDemo1</servlet-class>
</servlet>   <!-- 映射一个已经注册servlet的对外访问路径 -->
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/servletDemo1</url-pattern>
</servlet-mapping>
  • Servlet访问URL使用*通配符映射
  • Servlet与普通java类的区别

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

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

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

  • 缺省Servlet

如果某个Servlet的映射路径仅仅为一个 /  ,那么这个Servlet就成为当前web应用程序的缺省Servlet

  <servlet>
<servlet-name>ServletDemo2</servlet-name>
<servlet-class>com.atguigu.servlet.ServletDemo2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

在tomcat的安装目录\conf\web.xml文件中,注册一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,这是一个缺省Servlet

    <servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

当访问tomcat中的某个静态HTML和图片时,实际上就是在访问这个缺省Servlet.

  • Servlet的线程安全问题