Javaee

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)