Servlet

Servlet:

           一、定义: 运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。

          、作用:通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

            、执行过程:

        Servlet

                       重点:这个斜杠/等价于:http://localhost:8080/工程名/          到这个位置的Url。

       四、生命周期:

                 实例化-->初始化-->服务->销毁:对应的方法

                   [email protected]、实例化:第一访问

                public ServletDemo1() {
System.out.println("实列化");

                    [email protected]、初始化:客户端第一次访问时调用,该方法。只会执行一次。

                    @Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("-----------------初始化方法---------------");
config = arg0;

}

                    [email protected]、客户端每一次访问都会执行一起该方法。

                    @Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("------------服务:-------------"+"这个Servlet的名字:"+config.getServletName()+"获得配置信息"+config.getInitParameter("encoding"));

}

                [email protected]、在服务器中卸载工程。或者正常的关闭服务器。刚方法就运行。

                @Override
public void destroy() {
System.out.println("-----------销毁方法-----------");


}

        注意:创建时间以及初始化方法。可以改变。需要在xml中配置:

                   改变:配置后随着服务器的启动而实例化和初始化。

                     <servlet>
  <servlet-name>ServletDemo1</servlet-name>
  <servlet-class>com.ServletDemo.ServletDemo1</servlet-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>GBK</param-value>
  </init-param>

  <load-on-startup>2</load-on-startup>

    <!-- 这个Servlet随着服务器的启动而实例化,初始化。2表示创建的优先级,自然数就行 -->

  </servlet>     

            五、三种实例化方式

                1、实现javax.servlet.Servlet接口(第一个案例就是。)

            

                2、继承javax.servet.GenericServlet类(适配器模式)

                适配器设计模式:(当我们想要使用,某个接口中的特定的方法,而该接口中有很多的方法,我们就设计一个间类来实现这个接口,而我们只需要继承这个类就行。这样我们就不需要去实现所有的方法。就能调用我们真正想要实现的方法。通常这个中间类叫做转换器,转接头。)  

            抽象类GenericServlet实现了Servlet, ServletConfig,这两个接口。

                重要方法:

                            getInitParameter("");

                            getServletContext()

                             getServletConfig()

                            只有一个抽象方法service()。

                            并没有重写service()方法,而是接着抽象。

           和抽象方法: public abstract void service(ServletRequest req,ServletResponse res)
            3、继承javax.servlet.http.HttpServlet类(模板方法设计模式)
                重点:这是我们开发中常用的。
                httpServlet是一个抽象类继承了GenericServlet,一个没有抽象方法的抽象类。
                
                    重要方法:

                                          doGet();

                                           doPost();  

                                          两个Service()方法:

            

                    public void service(ServletRequest req, ServletResponse res) 

                            public void service(HttpServlet request,HttpResponse response)

                 服务器访问,到Servlet的响应过程:

                            服务器扫描Xml找到HttpServlet的实现类,创建实例:

                                        javax .servlet.Servlet servlet = new HttpServlet();

                                        实例化,初始化等待被客户端访问。

                                        客户端访问:

                                                   1、 调用ServIce()方法:这个service是从父类继承下来的方法{

                                                                                            由多肽的知识就知道,这儿调用的只能是

                                                                                            从父类继承下来的service。

                                                                                }

                                                   2、执行自己的Service方法。

                                                   3、根据请求的方式,调用相应的方法:我们常用的DoGet(),DoPost()。

                                               注意:这儿通过Service我们已经得到最重要的两个对 象:    HttpRequest,HttpResponse。

         六、映射问题

                        1.一个Servlet可以在Xml中配置多个,ServletMapping。

                         2.两种固定格式:

                                    通配符*,例如*.do

                                    (/)正斜杠:

                          3、优先级问题:

                                       绝对匹配-->  /开头匹配 --> 扩展名方式匹配

       七、线程安全问题

                              避免使用全局变量。