Servlet技术入门

这里写图片描述## Servlet技术(重点) ##

Servlet简介(理解)

1.什么是Servlet?
    * 看的Servlet相关的知识,查看JavaEE的文档
    * Servlet是一个接口,提供5个方法
    * 提供两个实现类,GenericServlet和HttpServlet
2.Servlet什么的作用?
    * Servlet是小的Java程序
    * 运行在WEB服务器端
    * 可以接收和响应从客户端发送过来的请求
        * 请求:从客户端访问服务器(发送一些数据,请求的内容)
        * 响应:从服务器端到客户端(把请求的内容返回给我)
3.编写Servlet
    * 实现Servlet接口
    * 继承GenericServlet或者HttpServlet

编写一个Servlet程序(掌握)

1.怎么样来编写Servlet程序,Servlet程序段配置文件
2.开发的步骤
    * 第一步:实现Servlet接口,实现5个方法。
    * 第二步:通过配置文件的方式(在web.xml)
          <!-- 编写Servlet的配置文件 -->
          <!-- 配置Servlet的基本信息 -->
          <servlet>
            <!-- 先配置Servlet的名称(自己随意的定,默认的情况下和类的名称是相同的) -->
            <servlet-name>ServletDemo1</servlet-name>
            <!-- 配置Servlet类的全路径(包名+类名) -->
            <servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
          </servlet>

          <!-- 配置Servlet的映射(Servlet怎么来访问呢) -->
          <servlet-mapping>
            <!-- 先配置Servlet的名称,和上面的名称必须是相同的 -->
            <servlet-name>ServletDemo1</servlet-name>
            <!-- 配置访问的路径(写法有很多种)  http://localhost:80/day09/servlet1  -->
            <url-pattern>/servlet1</url-pattern>
          </servlet-mapping>

    * 第三步:先把程序部署到服务器中,启动服务器,访问Servlet程序了。

Servlet生命周期(面试题)

1.生命周期:人的角度,出生,达到人生的巅峰,提供服务,死亡!!
2.Servlet实例对象:Servlet实例的创建、提供服务、Servlet实例销毁!!
3.Servlet接口中定义了三个方法
    * init(ServletConfig)               -- Servlet实例一被创建,立即调用init方法进行初始化。
        * Servlet实例什么时候被创建呢?
        * init方法调用几次呢?
    * service(request,response)     -- Servlet实例已经被创建完成了,使用service提供服务,处理从客户端发送过来的请求。
        * service调用几次?
    * destroy()                 -- Servlet实例被销毁之前,调用destroy方法(空的实现)。
        * Servlet实例什么时候销毁?
        * destroy调用几次?
4.总结
    * Servlet是第一次访问的时候创建Servlet的实例对象,创建后立即调用init方法进行初始化,init方法调用一次。
    * Servlet实例被创建之后,使用service方法提供服务,有一次请求,调用一次service方法。(servlet单例模式,创建一个新的线程)
    * Servlet实例服务器关闭的时候销毁Servlet实例,销毁之前调用destroy的方法进行一些销毁的操作。destroy调用一次。

Servlet在Tomcat服务器怎么运行的(理解)

1.看图04.

Servlet的接口和实现类之间的关系(理解)

1.关系
    * Servlet的接口,提供两个实现类,GenericServlet和HttpServlet
    Servlet接口
        |
    GenericServlet
        |
    HttpServlet
        |
    MyServlet

2.以后的开发的步骤
    * 编写一个类,继承GenericServlet,重写一些你需要的方法。
    * 在web.xml中编写配置文件。

    * 编写一个类,继承HttpServlet,重写一些方法。(基本就使用这种方式)
    * 在web.xml中进行配置

3.GenericServlet类中的init方法的关系
    * void init(ServletConfig config)   
    * void init() 

    * 总结:以后重写init方法的时候,需要重写无参数的Init方法

4.HttpServlet类中提供service方法
    * service(ServletRequest req, ServletResponse res)  
        * 定义两个变量,强转。调用service(HttpServletRequest req, HttpServletResponse resp)
    * service(HttpServletRequest req, HttpServletResponse resp) 
        * 获取的提交的方式,判断提交的方式
        * 如果是GET请求,调用doGet方法
        * 如果是POST请求,调用doPost方法

    * 了解(ServletRequest是HttpServletRequest的爹)
    * 总结
        * service方法的内部判断提交的方式,决定调用doXXX的方法。
        * 以后再开发Servlet程序,继承HttpServlet,手动的重写doGet和doPost方法,在web.xm编写配置文件。

修改Servlet开发的模板(修改一次)

1.先使用模板创建Servlet
2.修改模板的步骤
    * 先找到MyEclisp的安装的路径
    * 需要查找  plugins/com.genuitec.eclipse.wizards.xxx.jar 
    * 不要直接解压,右键 -- 选择打开方式 -- 使用压缩工具打开
    * 选择模板文件夹 -- 找到Servlet.java文件
    * 编写Servlet.java文件 -- 修改doPost和doGet的代码
    * 把Servlet.java覆盖回去
    * 重启MyEclipse就可以了

Servlet配置自动加载(理解)

1.第一次访问Servlet程序的时候,创建Servlet实例了。如果在Servlet中编写了一些代码(比较消耗时间的代码)
2.可以配置Servlet自动加载(根着服务器的启动,创建Servlet的实例对象)
3.通过配置文件配置Servlet自动加载
    * 放在<servlet>标签下。
    * <load-on-startup>值(正则数和0)</load-on-startup>
    * 值越小,优先级越高

Servlet配置访问路径(掌握)

1.学习Servlet的访问的路径怎么来配置?怎么样来访问?(url-pattern配置)
2.学习url-pattern的配置写法
    * 完全路径匹配     /web/servlet5                  访问:http://localhost/day09/web/servlet5
    * 目录匹配      /web/*                      访问:http://localhost/day09/web/xxx
    * 扩展名匹配 不能以/开头  *.do  *.jsp *.html      访问:http://localhost/day09/web/xxx.do

3.优先级
    * 完全路径匹配 > 目录匹配 > 扩展名匹配
    * web.xml的配置文件中,可以配置多个Servlet程序。(/demo5      /*     *.do)    http://localhost/day09/demo5

Servlet开发中WEB阶段的路径问题(掌握)

1.相对路径和绝对路径(WEB阶段的路径问题),学习会路径的写法(看Tomcat服务器的路径)
2.搭建环境
    * 在WebRoot目录下创建aa.html的文件,访问ServletDemo6
        <h3>相当路径写法</h3>
        <!--  
            访问aa.html       http://localhost/day09/aa.html
            访问ServletDemo6      http://localhost/day09/servlet6
        -->
        <a href="servlet6">aa.html</a> <br/>
        <a href="./servlet6">aa.html</a> <br/>
    * 在WebRoot目录下创建bb的文件夹,在bb文件夹下创建了bb.html的文件,访问ServletDemo6
        <h3>相对路径</h3>
        <!--  
            访问bb.html           http://localhost/day09/bb/bb.html
            访问ServletDemo6      http://localhost/day09/servlet6
        -->
        <a href="../servlet6">bb.html</a>

3.WEB开发中编写绝对路径
    * 复杂的写法
        * <a href="http://localhost/day09/servlet6">bb.html</a>
    * 简便的写法
        * <a href="/day09/servlet6">bb.html</a>
        * /不能省略,必须要写的

4.绝对路径分成两种绝对路径
    * 客户端绝对路径
        * 编写的绝对路径包含项目名称的。
        * 写法:/day09/servlet6
    * 服务器端绝对路径
        * 不用编写项目的名称
        * 写法:/servlet6

ServletConfig对象(掌握)

1.在init(ServletConfig config),把配置文件的信息赋值给ServletConfig对象。就可以通过ServletConfig获取到配置文件相关的信息。
2.方法
    * String getServletName()                   -- 获取的是<servlet-name>标签的文本的内容
    * (掌握)String getInitParameter(String name)              -- 获取的初始化参数
    * (掌握)Enumeration getInitParameterNames()       -- 获取的初始化参数
    * (掌握)ServletContext getServletContext()            -- 获取的是ServletContext对象

ServletContext对象(掌握)

1.ServletContext的简介
    * 一个WEB的项目,只有一个ServletContext对象。
    * 在WEB的项目中,所有的资源共享这一个ServletContext对象。
    * ServletContext与天地同寿!!!
        * Tomcat服务器在启动的时候,创建ServletContext对象,服务器关闭的时候,ServletContext销毁了。

2.怎么获取到ServletContext对象?
    * ServletConfig对象可以获取到ServletContext对象。
    * GenericServlet中提供了方法,获取到ServletContext对象。

域对象(概念)

1.域对象:在JavaWEB中学习4个域对象。掌握的有3个。
2.作用
    * 进行数据的传递!!!
    * 这些个域对象的域的作用的范围是不同!!
    * ServletContext域对象(作用的范围整个WEB的项目)
3.方法
    * setAttribute(String name,String value);
    * getAttribute(String name)
    * removeAttribute(String name)

ServletContext对象的作用和方法(掌握)

1.作用和方法
    * 读取全局的初始化参数
        * String getInitParameter(String name)                  -- 获取全局的初始化参数
        * Enumeration getInitParameterNames()           -- 获取全局的初始化参数
    * 实现数据的共享(向ServletContext域对象中存取值)
        * void setAttribute(String name, Object object)         -- 项ServletContext存入值
        * Object getAttribute(String name)                  -- 从ServletContext取值
        * void removeAttribute(String name)                 -- 从ServletContext移除值
    * 读取资源的文件
        * InputStream getResourceAsStream(String path)      -- 传入文件的路径,获取该文件的输入流
        * String getRealPath(String path)                   -- 传入文件的路径,获取的是该文件的绝对磁盘路径

获取全局的初始化参数

1.全局初始化参数的配置
      <!-- 配置全局的初始化参数 -->
      <context-param>
        <param-name>username</param-name>
        <param-value>美美</param-value>
      </context-param>

2.获取全局的初始化参数
    * 全局的初始化参数被所有的Servlet共享,都能获取!!

实现数据的共享

1.ServletContext域对象中被WEB中所有的资源共享!!
2.模拟的例子,编写一个CountServlet,用来计数。再编写另外一个ShowServlet,显示访问的数量的!!

读取资源的文件

1.学习方法就OK了!!
    * 读取资源的文件
        * InputStream getResourceAsStream(String path)      -- 传入文件的路径,获取该文件的输入流
        * String getRealPath(String path)                   -- 传入文件的路径,获取的是该文件的绝对磁盘路径

2.读取db.properties文件
3.ServletContext域对象中获取文件的路径的写法
    * 写服务器端的绝对路径,不包含项目名称!!!

猜你喜欢

转载自blog.csdn.net/weixin_41384583/article/details/78819269