servlet

servlet 是server applet 缩写,服务端程序,applet是运行于客户端浏览器上的小程序。servlet 没有main方法,运行于服务端,创建和销毁都是由servlet 容器(tomcat,netty等)来管理。

public class HelloWorld extends HttpServlet {
	
	@Override
	public void init() throws ServletException {
		System.out.println("-------servlet init ---------");
		super.init();
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("-------servlet init  with paramenter config---------"+ config);
		super.init(config);
	}

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("-------servlet service ---------");
		PrintWriter pw = resp.getWriter();
		pw.println("hello world");
		pw.close();
//		super.service(req, resp);
	}

	@Override
	public void destroy() {
		System.out.println("-------servlet destroy ---------");
		super.destroy();
	}



}

  web.xml 中配置:

  <servlet>
  		<servlet-name>helloServlet</servlet-name>      //servlet的注册名称
  		<servlet-class>com.servlet.HelloWorld</servlet-class>
  </servlet>
  <servlet-mapping>
  		<servlet-name>helloServlet</servlet-name>
  		<url-pattern>/123Hello</url-pattern>          //对外访问的路径
  </servlet-mapping>

  

  在lib中导入 servlet-api.jar , 启动tomcat , 输入:

信息: Server startup in 857 ms
-------servlet init with paramenter config---------org.apache.catalina.core.StandardWrapperFacade@6bfd67ba
-------servlet init ---------        // 这句话是执行有参的init 方法  super.init(config);  输出的 ,有参的init 方法会去执行 无参的init 方法。

-------servlet service ---------

浏览器访问 http://localhost:8080/jspstudy/123Hello , 则执行service方法页面, 继续输出 -------servlet service --------- , 

PrintWriter 对象并向浏览器输出: hello world 。

当停止tomcat 时, 执行 destroy 方法: 输出
-------servlet destroy ---------

客户端发送http请求,到达tomcat内置的web服务器,web服务器转发给servlet容器,servlet容器接到请求后,加载servlet,产生servet实例后,向实例传递表示请求的 HttpServletRequest 对象和 表示响应的 HttpServletResponse 对象,
servlet实例 使用 HttpServletRequest 对象 得到客户端的请求信息,一个servlet处理完后,可能会转发到另外的servlet,servlet 都处理完成后,通过 响应对象 返回给客户端。

init 和 destroy 方法只会被执行一次。每次客户端请求都会执行 service 方法。在 tomcat被启动后,并不会执行init方法,即tomcat 启动后,并不会实例化servlet ,只有servlet 被访问了,才执行init 方法。
原文地址:https://www.cnblogs.com/z360519549/p/9925255.html