容器全盘控制着servlet的一生,它会创建请求和响应对象,为servlet分配或创建一个新的线程,并调用servlet的service()方法,把请求和响应对象的引用作为参数传递给servlet。service()方法根据客户发出的HTTP方法(GET/PUT/POST等),确定要调用那个servlet方法。
容器怎样调用servlet?
1)容器首先加载servlet类;
2)创建servlet对象,这个构造方法什么都不作。我们不必重载它,若要初始化的话,可以重载init()方法;
3)执行init()方法;一个servlet一生只调用一次init()方法。此方法调用完成后,容器会创建或分配一个线程来调用service()方法。也就是说servlet能接受任何请求前,必须通过init()方法。
4)执行service()方法;决定具体调用那一个方法。
5)执行destroy()方法;
部分接口/类说明:
1)Servlet 该接口共定义了5个方法。其中包括与生命周期相关的带有参数的init()方法: init (ServletConfig config)和getServletConfig (),使servlet可以通过这个方法获取启动信息。所有的servlet都必须实现这些方法。我们可以继承 GenericServlet 编写普通的servlet,或者继承 HttpServlet
编写HTTP servlet。
2) ServletConfig 容器建立的servlet配置对象,用于在初始化阶段向servlet提供信息。每个servlet都有这个对象,通过它servlet可以访问web.xml中该类的一些配置信息,还可以访问 ServletContext。
3) GenericServlet 抽象类,实现了 Servlet, ServletConfig, java.io.Serializable。是普通的,与协议无关的servlet。该类可由servlet直接继承,实现service(ServletRequest req, ServletResponse res) ,但我们更常用的是继承 HttpServlet来编写servlet。
GET与POST的区别:
相同点:都能发出请求参数
区别:GET发出的数据量受服务器限制,而POST无限制;GET发送加载URL后,而POST在请求体中,GET方式无请求体。GET请求可以建立书签,而POST不可以。GET是幂等的,执行多次而不会产生不好的作用,而POST是非幂等的。在查询时,我们应当用GET方式。
请求和响应
如果您想得到请求中参数的原始字节,可以使用getInputStream()方法。
响应的两种方式:PrintWriter writer = response.getWriter();ServletOutputStream out = response.getOutputSteam();
setContentType("text/html")==SetHeader("content-type","text/html");
sendRedirect()的参数:有两种;分别是有"/"和没有"/"。有:表示会建立一个相对于web应用本身的路径。若没有,容器会在当前的应用路径上追加上路径。