javaWeb中servlet开发(3)——Servlet生命周期

生命周期:是一个程序的存在周期,servlet由于是受容器的管理,所以容器来决定其生命周期

1、servlet生命周期

2、servlet生命周期对应的方法

 3、servlet生命周期代码

public class LifeCycleServlet extends HttpServlet{
    public void init() throws ServletException{
        System.out.println("** 1、Servlet初始化 --> init()") ;
    }
    public void doGet(HttpServletRequest req,HttpServletResponse resp)
              throws ServletException,IOException{
        System.out.println("** 2、Servlet服务 --> doGet()、doPost()") ;
    }
    public void doPost(HttpServletRequest req,HttpServletResponse resp)
              throws ServletException,IOException{
        this.doGet(req,resp) ;
    }
    public void destroy(){
        System.out.println("** 3、Servlet销毁 --> destory()") ;
        try{
            Thread.sleep(3000) ;
        }catch(Exception e){}
    }/*
    public void service(ServletRequest req,
                             ServletResponse res)
                      throws ServletException,
                             IOException{
        System.out.println("************ 服务 **************") ;
    }
    */
}

一个基本生命周期编译后,就可以在web-INF/web.xml中进行映射配置。下面直接在根目录下配置

<servlet>
        <servlet-name>life</servlet-name>
        <servlet-class>com.alice.servlet.LifeCycleServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>life</servlet-name>
        <url-pattern>/LifeServlet</url-pattern>

访问路径为:

 4、取得初始化配置信息

public class InitParamServlet extends HttpServlet {
    private String initParam = null ;    // 用于保存初始化参数
    public void init() throws ServletException{
        System.out.println("*****************") ;
    }

    public void init(ServletConfig config) throws ServletException{
        System.out.println("#######################") ;
        this.initParam = config.getInitParameter("ref") ;    // 接收的初始化参数名称暂时为ref
    }

    public void doGet(HttpServletRequest req,
                     HttpServletResponse resp)
              throws ServletException,
                     IOException{
        System.out.println("** 初始化参数:" + this.initParam) ;
    }
    public void doPost(HttpServletRequest req,
                     HttpServletResponse resp)
              throws ServletException,
                     IOException{
        this.doGet(req,resp) ;
    
    }



}

之后,要做web.xml中配置

<servlet>
        <servlet-name>initparam</servlet-name>
        <servlet-class>com.alice.servlet.InitParamServlet</servlet-class>
        <init-param>
            <param-name>ref</param-name>
            <param-value>www.baidu.cn</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>initparam</servlet-name>
        <url-pattern>/InitParamServlet</url-pattern>
    </servlet-mapping>

如果一个servlet中覆写了两个init()方法,只有在web.xml中配置了参数的初始化方法才可以起作用。

一般来说,取得初始化参数在一些系统架构中经常使用的。

5、取得其他内置对象

5.1 取session对象

servlet本身提供的只有request和response对象,要想取得session对象,则只能依靠request对象,因为session本身属于http协议范畴,而且在每次发生请求时,服务器都会自动为客户端设置一个cookie,session中要使用cookie机制,cookie又只能通过request取得,那么自然地session也只能通过request取得。

public class HttpSessionDemoServlet extends HttpServlet {
	public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
		HttpSession ses = req.getSession() ;
		System.out.println("SESSION ID --> " + ses.getId()) ;
		ses.setAttribute("username","李李") ;	 // 设置session属性
		System.out.println("username属性内容:" + ses.getAttribute("username")) ;
	}
	public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
		this.doGet(req,resp) ;
	}
}

  

之后进行web.xml进行配置

<servlet>
		<servlet-name>sessiondemo</servlet-name>
		<servlet-class>
			com.alice.servlet.HttpSessionDemoServlet
		</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>sessiondemo</servlet-name>
		<url-pattern>/HttpSessionDemoServlet</url-pattern>
	</servlet-mapping>

 5.2 取application对象

public class ServletContextDemoServlet extends HttpServlet {
	public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
		ServletContext app = super.getServletContext() ;
		System.out.println("真实路径:" + app.getRealPath("/")) ;
	}
	public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
		this.doGet(req,resp) ;
	}
}

  

<servlet>
        <servlet-name>applicationdemo</servlet-name>
        <servlet-class>
            com.alice.servlet.ServletContextDemoServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>applicationdemo</servlet-name>
        <url-pattern>/ServletContextDemoServlet</url-pattern>
    </servlet-mapping>
原文地址:https://www.cnblogs.com/snowwang/p/6103179.html