细说Servlet Servlet细节

来源:互联网 发布:网络买卖 编辑:程序博客网 时间:2024/05/18 00:51

                                                                                                                                  Servlet细节

1.客户端是通过URL地址访问web服务中的资源,所以Servlet程序若想被外界访问,必须把Servlet映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。

 

 

2.<servlet>元素用于注册servlet,包含两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet完整的类名(附上包名)

 

 

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

 

4.一个已注册的Servlet可以映射到多个不同的URL。多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名,只需<url-pattern>不同。

 

 

5.当映射一个Servlet的时候,可以多层,比如<url-pattern>/servlet/index.html</url-pattern>,后缀名是html不一定就是html,可能是假象,只认名。

 

 

6.在Servlet映射到的URL中也可以使用*通配符,只能有两种固定格式,一种是“*.扩展名”,另一种是正斜杠    /   开头并以    /*     结尾。

              在匹配的过程中,参考的标准如下:

                           1.谁的匹配度高,谁就被选中

                            2.*.do的优先级最低

 

7.Servlet的单例问题:当Servlet被第一次访问后,就被记载到内存,以后该实例就对各个请求服务,即在使用中是单例的。

因为Servlet是单例的,所以会出现一个线程安全问题,例如一个售票系统:只有两张票可是卖出了三张,不加同步机制会出现问题。

 

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

               2.如果一个变量不需要共享,则将该变量直接在doGet()或者doPost()中定义即可,这样不会存在线程安全问题。

           

补充:面试题:Servlet在使用中会不会出现线程安全问题?

                           答:Servlet在访问中会出现线程安全问题,这时候我们可以通过加上syncronized(对象) {    //同步代码    }来防止线程并发。

 

 

 

8.Servlet是一个供其它程序(Servlet引擎[web服务器tomcat])调用的java类,它不能独立运行,它的运行完全有Servlet引擎来控制和调度。

 

 

 

9.睡觉觉喽,明天待续