Servlet的简单介绍

1. Servlet的由来
Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1) 编写一个Java类,实现servlet接口。
2) 把开发好的Java类部署到web服务器中。

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


2.Servlet容器

      Servlet容器也叫Servlet引擎,是Web服务器或者应用服务器的一部分,用户在发送请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的请求,Servlet不能独立运行,必须被部署到Servlet容器中,由容器实例化和调用Servlet的方法,Servlet容器在Servlet的生命周期内包含和管理Servlet
  2)  对比CGI
      1. Servlet是单实例多线程的运行方式,每个请求在一个独立的线程中运行,提供服务的Servlet实例只有一个
      2. Servlet 具有可升级性,能响应更多的请求,因为servlet容器使用一个线程而不是操作系统进程,线程占用的资源要小
      3.Servlet使用标准的API,被更多的web服务器所支持。
      4.Servlet使用java语言编写,拥有更多的java程序语言的优点
      5.Servlet可以访问java平台丰富的类库,使得各种应用的开发更为容易
      6.Servlet容器给Servlet提供额外的功能。
  3)  Tomcat
      Tomcat是一个免费的开源代码的Servlet容器,是Apache软件基金会的一个顶级项目,由Apache,SUN和其他一些公司及个人共同开发而成,由于SUN的参与与支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现。Tomcat支持Servlet2.5

      Tomcat的安装
        1.安装jdk,并且配置环境变量 path,CLASSPATH,JAVA_HOME
2.解压tomcat即可
      Tomcat的目录结构
       bin 存放启动和关闭Tomcat的脚本文件
conf 存放Tomcat服务器的各种配置文件,server.xml web.xml等
lib 存放Tomcat服务器和所有web应用程序需要访问的JAR文件
logs 存放Tomcat的日志文件
temp 存放Tomcat运行时产生的临时文件
webapps 当发布web应用程序时,通常把Web应用程序的目录及文件放到这个目录下
work Tomcat将JSP生成的Servlet源文件和字节码文件存放到这个目录下

3. Servlet的创建方式
1) 实现Servlet接口
2) 继承GenericServlet抽象类
3) 继承HttpServlet抽象类
4. Servlet生命周期以及工作原理

1)生命周期

1 加载和实例化
        Servlet容器负责加载和实例化Servlet,当Servlet容器启动时,或者是在容器检测到这个Servlet来响应第一个请求时,创建Servlet实例。

2初始化阶段   调用init()方法

3 响应客户请求阶段 调用service()方法

4 销毁阶段  调用destroy()方法

5.Servlet何时被创建:
1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例。
2,当web.xml文件中如果<servlet>元素中指定了<load-on-startup> 子元素时,Servlet容器在启动web服务器时,将                                 按照顺序创建并初始化Servlet对象
<load-on-startup>num</load-on-startup>
当num值为0或者大于0时,表示容器在应用启动时就加载这个servlet。
当num值小于0或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高。 

6.Servlet工作原理
Servlet依赖于ServletRequest和ServletResponse接口,这两个接口负责为Servlet接受和发送信息。 HttpServlet也类似。当某个Servlet第一次被请求时,服务器(Servlet容器)会生成该Servlet并调用它的init()方法, 再调用其service()方法处理请求【通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应】处理结束后该Servlet会常驻于容器中,下一个请求则不再 重新生成Servlet,而是直接调用常驻的Servlet对象的service()方法。服务器停止时,会调用该Servlet的destroy()方法。因此,在Servlet的一个生命周期中,init()和destroy()仅会被调用一次, 而service()则会被调用多次。

7. 配置初始化参数
在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。

配置:
<servlet>
  <servlet-name>basic</servlet-name>
  <servlet-class>com.briup.prep.day01.BasicServlet</servlet-class>
  <init-param>
  <param-name>username</param-name>
  <param-value>licy</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>basic</servlet-name>
    <url-pattern>/BasicServlet</url-pattern>
  </servlet-mapping>
获取:
String password = getServletConfig().getInitParameter("username");

web.xml中与Servlet配置相关的元素
    <servlet-name>指定Servlet的名字,这个名字在同一个Web应用程序中必须是唯一的
    <servlet-class>指定Servlet类的完整限定名
    <description>为Servlet指定一个文件描述 
    <display-name>为Servlet指定一个简短的名字
    <icon> 为Servlet指定一个图标,在某些图形化界面工具中用于表示该Servlet
    <init-param>定义Servlet的初始化参数,该标签必须包含<param-name><param-value>可以包含零个或者多个<description>
<description> 为初始化参数提供一个文本描述
<param-name> 定义初始化参数的名字
<param-value> 定义初始化参数的值
    <load-on-startup>  
    指定当web应用程序启动时,Servlet被加载的次数,元素的内容必须是一个整数,如果这个值是负数,或者没有设定该值,Servlet容器将在客户端首次请求这个Servlet时加载它;如果这个值是正数或0,容器将在web应用程序部署时加载和初始化这个Servlet,并且先加载值小的,后加载值大的Servlet。

    <servlet-mapping>  在Servlet和URL样式之间定义一个映射
<servlet-name>servlet的名字,必须为<servlet>元素中声明过的名字
<url-pattern>    指定对应于Servlet的URL路径


    <context-param>定义上下文的初始化参数,该标签必须包含<param-name><param-value>
可以包含零个或者多个<description>
<description> 为初始化参数提供一个文本描述
<param-name> 定义初始化参数的名字
<param-value> 定义初始化参数的值

8. ServletContext对象
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过config.getServletContext()方法获得ServletContext对象。
1) 多个Servlet通过ServletContext对象实现数据共享
ServletContext context = this.getServletConfig().getServletContext();//获得ServletContext对象
   context.setAttribute("data", data);  //将data存储到ServletContext对象中
2) 获取WEB应用的初始化参数
<!-- 配置WEB应用的初始化参数 -->
      <context-param>
          <param-name>url</param-name>
          <param-value>jdbc:mysql://localhost:3306/test</param-value>
     </context-param>
  3) 用servletContext实现请求转发
  context.getRequestDispatcher("/login.jsp").forward(request, response);
  4) 使用servletContext读取资源文件
  InputStream is = context.getResourceAsStream("/WEB-INF/init/db.properties");
System.out.println(is);
Properties prop = new Properties();
prop.load(is);
String name = (String) prop.getProperty("name");
String gender = prop.getProperty("gender");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值