Javaee

作者: HJJ_3c00 | 来源:发表于2018-06-15 14:26 被阅读0次

    web服务器作用:将本地资源共享给外部访问。

    DNS解析:用户在浏览器输入域名,首先回去本地host文件(本地DNS解析),如果找不到再去运行商哪里进行DNS解析。

    servlet是线程不安全的

    Servlet的多线程并发问题

                  注意: servlet对象在tomcat服务器是单实例多线程的。

                  因为servlet是多线程的,所以当多个servlet的线程同时访问了servlet的共享数据,如成员变量,可能会引发线程安全问题。

                  解决办法:

                                1)把使用到共享数据的代码块进行同步(使用synchronized关键字进行同步)

                                2)建议在servlet类中尽量不要使用成员变量。如果确实要使用成员,必须同步。而且尽量缩小同步代码块的范围。(哪里使用到了成员变量,就同步哪里!!),以避免因为同步而导致并发效率降低。

                         Servlet学习:

                                 HttpServletRequest  请求对象:获取请求信息

                                 HttpServletResponse响应对象:设置响应对象

                                 ServletConfig对象    servlet配置对象

                                 ServletContext对象;servlet的上下文对象

    servlet生命周期

    得到用户请求地址,解析web.xml中对应的地址,通过地址的到对应的servlet类地址,通过反射实例化该servlet,创建完servlet对象后会调用intit()方法,然后进去service(),service()用来判断用户的请求类型,并执行请求类型对应的方法(doGet()、doPost()....),销毁servlet对象时调用destory(),一般是停止服务器或者重新部署服务器的时候销毁servlet对象。只调用一次。

    servlet类是单例的,所以只实例化一次。

    Servlet重要的四个生命周期方法

    构造方法: 创建servlet对象的时候调用。默认情况下,第一次访问servlet的时候创建servlet对象只调用1次。证明servlet对象在tomcat是单实例的。

    init方法: 创建完servlet对象的时候调用。只调用1次。

    service方法: 每次发出请求时调用。调用n次。

    destroy方法: 销毁servlet对象的时候调用。停止服务器或者重新部署web应用时销毁servlet对象。只调用1次。

    伪代码演示servlet的生命周期

                  Tomtcat内部代码运行:

                                1)通过映射找到到servlet-class的内容,字符串:com.itmayiedu.a_servlet.FirstServlet

                                2)通过反射构造FirstServlet对象

                                                   2.1得到字节码对象

                                                   Classclazz = class.forName("com.itmayiedu.a_servlet.FirstServlet");

                                                   2.2调用无参数的构造方法来构造对象

                                                   Objectobj = clazz.newInstance();    ---1.servlet的构造方法被调用

                                3)创建ServletConfig对象,通过反射调用init方法

                                                   3.1得到方法对象

                                                   Methodm = clazz.getDeclareMethod("init",ServletConfig.class);

                                                   3.2调用方法

                                                   m.invoke(obj,config);             --2.servlet的init方法被调用

                                4)创建request,response对象,通过反射调用service方法

                                                   4.1得到方法对象

                                                   Methodmm=clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);

                                                   4.2调用方法

                                                   m.invoke(obj,request,response);  --3.servlet的service方法被调用

                                5)当tomcat服务器停止或web应用重新部署,通过反射调用destroy方法

                                                   5.1得到方法对象

                                                   Methodm = clazz.getDeclareMethod("destroy",null);

                                                   5.2调用方法

                                                   m.invoke(obj,null);            --4.servlet的destroy方法被调用

    相关文章

      网友评论

          本文标题:Javaee

          本文链接:https://www.haomeiwen.com/subject/wqaleftx.html