WEB资源


在http协议中,规定了请求和响应双方,客户端和服务器端与web相关的资源。


* 静态资源


    html js css


* 动态资源


    servlet/jsp





Servlet



Servlet其实是一个Java程序,运行在web服务器上,用于接收和响应客户端的http请求。


更多的是为了配合动态资源来做。当然静态资源也需要用到Servlet,只不是Tomcat里面定义好了一个DefaultServlet。




Servlet初步



1.编写一个web工程,要有一个服务器。


2.在WebCountent在创建html文件。



3.测试运行web工程


    1.新建一个类,实现Serclet接口


       

package servlet;

        import java.io.IOException;
        
        import javax.servlet.Servlet;
        import javax.servlet.ServletConfig;
        import javax.servlet.ServletException;
        import javax.servlet.ServletRequest;
        import javax.servlet.ServletResponse;
        
        public class HelloServlet implements Servlet{
        
            @Override
            public void destroy() {
                // TODO Auto-generated method stub
                
            }
        
            @Override
            public ServletConfig getServletConfig() {
                // TODO Auto-generated method stub
                return null;
            }
        
            @Override
            public String getServletInfo() {
                // TODO Auto-generated method stub
                return null;
            }
        
            @Override
            public void init(ServletConfig arg0) throws ServletException {
                // TODO Auto-generated method stub
                
            }
        
            @Override
            public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
                System.out.println("Hello Servlet!");
            }
            
        }




    2.配置Servlet,告诉服务器,我们的应用有多少个Servlet


        在webContent/WEB.INF/web.xml里面写以下内容


       

<?xml version="1.0" encoding="UTF-8"?>
        <web-app version="3.0"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
          <display-name>HelloWeb</display-name>
          <welcome-file-list>
              <welcome-file>index.html</welcome-file>
              <welcome-file>index.htm</welcome-file>
              <welcome-file>index.jsp</welcome-file>
              <welcome-file>default.html</welcome-file>
              <welcome-file>default.htm</welcome-file>
              <welcome-file>default.jsp</welcome-file>
          </welcome-file-list>
          
          <!-- 向Tomcat报告,我这个应用里面有servlet,名字叫做...,具体的路径是... -->
          <servlet>
              <servlet-name>HelloServlet</servlet-name>
              <servlet-class>servlet.HelloServlet</servlet-class>
          </servlet>
          
          <!-- 注册Servlet的映射,servlet-name:找到上面注册的具体servlet,url-pattern:在地址栏上的path -->
          <servlet-mapping>
              <servlet-name>HelloServlet</servlet-name>
              <url-pattern>/a</url-pattern>
          </servlet-mapping>
          </web-app>

    3.右键WEB工程,选择Run As --> Run on Web,等待tomcat开启,出现先前创建的html文件现实的内容。在地址栏输入

 http://localhost:8090/HelloServlet/a

Hello Servlet!即成功。



Servlet执行过程



URL:

http://localhost:8090/HelloServlet/a


1.找到Tomcat应用


2.找到web项目


3.找到web.xml,然后在里面找到url-pattern,有没有哪一个pattern的内容是/a


4.找到servlet-mapping中的那个servlet-name【HelloServlet】


5.找到上面定义的servlet元素中的servlet-name


6.找到下面定义的servlet-class,然后开始创建该类的实例


7.继而执行该servlet中的service方法




Servlet通用写法



        Servlet (接口)

            |

            |

        GenericServlet

            |

            |

        HttpServlet (用于处理Http的请求)


定义一个类,继承HttpServlet  复写doGet 和 doPost



   

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doGet(req, resp);
        System.out.println("get-------");
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
        System.out.println("post-------");
    }




Servlet生命周期

  •  init方法

    

        在创建该Servlet实例时,就执行该方法

        一个Servlet只会初始化一次,所以init只会执行一次

        默认情况下是:初次访问Servlet,才会创建实例



  •  service方法


        只要客户端来了一个请求,就执行这个方法

        该方法可以执行多次,一个请求,对应一次service方法的调用

    



  •  destroy方法


        Servlet销毁的时候,就会执行此方法

        1.该项目从tomcat中移除

        2.正常关闭tomcat就会执行shutdown




让Servlet创建实例的时间提前



1.默认情况下,只有初次访问Servlet的时候才会执行init()方法。有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至一些比较耗时的逻辑。


2.在配置的时候,使用load-on-startup元素来制定,给定的数字越小,启动的时机就越早,一般不写负数,从2开始即可。