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 方法。