zoukankan      html  css  js  c++  java
  • servlet开发细节

    SUN公司定义了两个默认实现类:分别为:GenericServlet,HttpServlet(建议使用)

    HttpServlet指能够处理HTTP请求的Servlet,它在原有Servlet接口上添加了一些HTTP协议处理方法。它比Servlet接口的功能
    更为强大,因此开发人员在编写Servlet时,通常应继承这个类。

    HttpServlet在实现Servlet接口时,复写了service方法,该方法体内的代码会自动判断信用的请求方式,如GET请求,则调用
    HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此开发人员在编写Servlet时,通常只需复写doGet或
    doPost方法,而不去复写service方法

    Servlet的细节问题

    由于客户端是通过URL地址访问web服务器中的资源,所以servlet程序若想被外界访问,必须把servlet程序映射到一个url地址
    上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成
    <servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置servlet的注册
    名称和servlet的完整类名

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

    同一个servlet可以映射到多个url上,即多个<servlet=mapping>元素的<servlet-name>子元素的设置值可以是同一个servlet的注册名。
    在servlet映射到的url中也可以使用*通配符,但是只能有两种固定的格式:一种格式是"*.扩展名",另一种格式是以正斜杠(/)开头并以
    "/*"结尾。例如/*,/new/*,*.do
    问题:原则:通配匹配时
    参考的标准:1.谁的匹配度高,谁命准2.*.do的优先级最低
    当请求url/abc/a.html,"/abc/*"和"/*"都匹配,哪个servlet响应
    当请求url为"/abc"时,"/abc/*"和“/abc”,都匹配,哪个servlet响应
    当请求url为“/abc/a.do” “/abc/*”和“*.do”
    url为"/xxx/yyy/a.do"时,/*和*.do

    servlet是一个供其他java程序(servlet引擎)调用的java类,它不能独立运行,他的运行完全由servlet引擎
    来控制盒调度。
    针对客户端的多次servlet请求,通常情况下,服务器只会创建一个servle实例对象,也就是说servlet实例对象一旦创建,
    它就会驻留在内存中,为后续的其他的请求服务,纸质web容器退出/或者reload该web应用,servlet实例对象才会销毁。
    在servlet的生命周期内,servlet的inti方法只被调用一次。而对一个servlet的每次访问请求都导致servlet引擎调用一次servlet
    的service方法。对于每次访问请求,servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse
    响应对象,然后将这两个对象作为参数传递给它调用的servlet的service方法,service方法再根据请求方式分别调用doxxx方法。
    servlet单例问题
    当servlet被第一次访问后,就被加载到内存,以后该实例对各个请求服务,即在使用中是单例的。
    因为servlet是单例,会出现线程安全问题,比如:售票系统,如果不加同步机制,则会出现问题

    这里我给大家一个原则:

    1.如果一个变量需要多个用户共享,则应该在访问该变量的时候,加同步机制synchronized(对象){同步代码}

    如果一个变量不要共享,则直接在doGet()或者doPost定义,这样不会存在线程安全问题

    servlet细节5

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

    用途:为web应用写一个initServlet,这个servlet配置为启东时加载,为整个web应用创建必要的数据库表和数据。

    或者是启动一个后台线程,定时去完成某些工作,(比如每个10秒发一份电子邮件)

  • 相关阅读:
    spring boot 若依系统整合Ueditor,部署时候上传图片错误解决
    JVM学习笔记之栈区
    据说这个是可以撸到2089年的idea2020.2
    小程序监听屏幕滑动事件
    小程序bindinput和bindblur赋值延迟问题解决
    小程序文件下载并保存文件名打开
    数据结构
    Spring JPA 自定义删改
    Spring JPA 查询创建
    Spring JPA 拓展
  • 原文地址:https://www.cnblogs.com/jggz/p/3027188.html
Copyright © 2011-2022 走看看