Servlet接口 1、Servlet的生命周期 所谓xxx的生命周期,就是说xxx的出生、服务,以及死亡。Servlet生命周期也是如此! 与Servlet的生命周期相关的方法有: void init(ServletConfig config) void service(ServletRequest request,ServletResponse response) void destory() 1.1、Servlet的出生 服务器会在Servlet第一次被访问时创建Servlet;或者是在服务器启动时创建Servlet。 如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置<load-on-startup>1</load-on-startup>, 表示Servlet之间加载顺序。 也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。而且一个Servlet类型,服务器只 创建一个实例对象,在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig)方法。 请记住, Servlet出生后马上就会调用init(ServletConfig)方法。而且一个Servlet的一生,这个方法 只会被调用一次。这好比小孩子出生后马上就要去剪脐带一样,而且剪脐带一生只有一次。我们可以把一 些对Servlet的初始化工作放到init方法中! 1.2、Servlet服务 当服务器每次接收到请求时,都会去调用Servlet的service()方法来处理请求。服务器接收到一次 请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。正因为如此,所以我们才 把处理请求的代码写到service()方法中! 1.3、Servlet的离去 Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器 会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法,我们可以把Servlet 的临终遗言放到destroy()方法中,例如对某些资源的释放等代码放到destroy()方法中。 1.4、测试生命周期方法 编写HelloServlet.java文件,然后再去访问对应的URL地址。 public class HelloServlet implements Servlet { public void init(ServletConfig config) throws ServletException { System.out.println("Servlet被创建了!"); } public ServletConfig getServletConfig() {return null;} public String getServletInfo() {return null;} public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("hello servlet!"); } public void destroy() { System.out.println("Servlet要离去了!"); } } 在浏览器首次访问HelloServlet时,init方法会被执行,而且也会执行service方法。 再次访问时,只会执行service方法,不再执行init方法。在关闭Tomcat时会调用destroy方法。 2 Servlet接口相关类型 在Servlet接口中还存在三个我们不熟悉的类型: * ServletRequest:service() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据, 它是由服务器创建的; * ServletResponse:service()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要 使用这个对象; * ServletConfig:init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml 文件中的<servlet>元素。 2.1、ServletRequest 和 ServletResponse ServletRequest和ServletResponse是Servlet的service() 方法的两个参数,一个是请求对象,一个是响应对象, 可以从ServletRequest对象中获取请求数据,可以使用ServletResponse对象完成响应。你以后会发现, 这两个对象就像是一对恩爱的夫妻,永远不分离,总是成对出现。 ServletRequest和ServletResponse的实例由服务器创建,然后传递给service()方法。如果在service() 方法中 希望使用HTTP相关的功能,那么可以把ServletRequest和ServletResponse强转成HttpServletRequest和 HttpServletResponse。这也说明我们经常需要在service()方法中对ServletRequest和ServletResponse进 行强转,这是很心烦的事情。不过后面会有一个类来帮我们解决这一问题的。 2.2、ServletConfig ServletConfig对象对应项目中web.xml文件中的<servlet>元素。例如你想获取当前Servlet在项目 web.xml文件中的配置名,那么可以使用servletConfig.getServletName()方法获取! ServletConfig对象是由服务器创建的,然后传递给Servlet的init(ServletConfig config)方法, 你可以在init方法中使用它! * String getServletName():获取Servlet在web.xml文件中的配置名称,即<servlet-name>指定的名称; * String getInitParameter(String name):用来获取在web.xml中配置的初始化参数,通过参数名来获取参数值; * Enumeration getInitParameterNames():用来获取在web.xml中配置的所有初始化参数名称; * ServletContext getServletContext():用来获取ServletContext上下文对象。 2.3、在<servlet>元素中还可以配置初始化参数: <servlet> <servlet-name>One</servlet-name> <servlet-class>cn.itcast.servlet.OneServlet</servlet-class> <init-param> [配置了两个初始化参数,用得少] <param-name>paramName1</param-name> <param-value>paramValue1</param-value> </init-param> <init-param> <param-name>paramName2</param-name> <param-value>paramValue2</param-value> </init-param> </servlet> 在Servlet中,可以使用ServletConfig对象的getInitParameter(String name)方法来获取初始化参数, 例如:String value1 = servletConfig.getInitParameter("paramName1");//获取到paramValue1
Servlet接口
最新推荐文章于 2023-06-09 15:51:46 发布