javaweb学习笔记(五)-Servlet初识

  跳过Http协议ヾ(o・ω・)ノ,上课笔记如下:

  Servlet快速入门:(1)写一个java程序实现Servlet接口或者继承实现Servlet接口类(2)将编译好的带包的.class放到WEB-INF/classes下以外,还要配置web应用的 web.xml注册Servlet。

  Servlet的生命周期:Servlet第一次被访问在内存中创建对象,在创建后立即调用init()方法进行初始化,对每次请求用service(req,res)方法处理请求,此时会用Request对象封装请求信息,并用Response对象(最初是空的)代表响应信息,传入service方法里使用,当service方法处理完后,返回服务器服务器根据Response中的信息组织响应消息返回给浏览器。响应结束后servlet并不销毁,一直留在内存中等待下一次请求。直到服务器关闭或web应用被移除虚拟主机,servlet对象销毁前调用destroy方法善后。

  通常我们只需要直接继承HttpServlet。

Servlet细节:

  (1)一个可以对应多个,从而一个Servlet可以有多个路径来访问

  (2)url-partten中的路径可以使用*匹配符号进行配置,但是要注意,只能是/开头/*结尾或*.后缀这两种方式

    ~由于*的引入,有可能一个路径被多个urlpartten匹配,这是优先级判断条件如下:

    哪个最像找哪个

    *.后缀永远匹配级最低

  (3)可以配置可以用来指定启动顺序

  (4)缺省Servlet:如果有一个Servlet的url-partten被配置为了一根正斜杠,这个Servlet就变成了缺省Serlvet.其他Servlet 都不处理的请求,由缺省Servlet来处理.

  其实对于静态资源的访问就是由缺省Servlet来执行

  设置404页面500页面等提示页面也是由缺省Servlet来执行

  通常我们不会自己去配置缺省Servlet

        (5)线程安全问题
    由于默认情况下Servlet在内存中只有一个对象,当多个浏览器并发访问Servlet时就有可能产生线程安全问题
    解决方案:
      加锁--效率降低
      SingleThreadModel接口 -- 不能真的防止线程安全问题
      最终解决方案:在Servlet中尽量少用类变量,如果一定要用类变量则用锁来防止线程安全问题,但是要注意锁住内容应该是造成线程安全问题的核心代码,尽量的少锁主内容,减少等待时间提高servlet的响应速度.

ServletConfig --代表当前Servlet在web.xml中的配置信息

  String getServletName()  -- 获取当前Servlet在web.xml中配置的名字
  String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值
  Enumeration getInitParameterNames()  -- 获取当前Servlet所有初始化参数的名字组成的枚举
  ServletContext getServletContext()  -- 获取代表当前web应用的ServletContext对象

ServletContext --代表当前web应用

  1,作为域对象可以在整个web应用范围内共享数据。

  2,用来获取web应用的初始参数。

  3,实现Servlet的转发--重定向:302+Location(两次请求两次响应)。请求转发:服务器内不进行资源流转(一次请求一次响应)。

  4,getRealPath方法--在这个方法中传入一个路径,这个方法的底层会在传入的路径前拼接当前web应用的硬盘路径从而得到当

前资源的硬盘路径,这种方式即使换了发布环境,方法的底层也能得到正确的web应用的路径从而永远都是正确的资源的路径。


你可能感兴趣的:(学习笔记)