作者tkcn (小安)
看板java
标题Re: [问题]有关Servlet和container的问题
时间Sat Jan 14 15:45:05 2012
※ 引述《shorttime (乡民)》之铭言:
: 关於servlet和container,
: 我在网路上有看到相关描述:
: During initialization stage of the Servlet life cycle,
: the web container initializes the servlet instance
: by calling the init() method.
: Each request is serviced in its own separate thread.
: The Web container calls the service() method of the servlet
: for every request.
: The service() method determines the kind of request being made
: and dispatches it to an appropriate method to handle the request.
: Finally, the Web container calls the destroy() method that takes
: the servlet out of service.
: (来源出处:http://en.wikipedia.org/wiki/Java_Servlet )
: 我有3个基本问题想请教大家一下,
: 问题一:
: 假设我有一个servlet的程式,
: 程式码如下:
: import java.io.*;
: import javax.servlet.*;
: import javax.servlet.http.*;
: public class HelloServlet extends HttpServlet {
: public void doGet(HttpServletRequest request,
: HttpServletResponse response)
: throws IOException, ServletException {
: PrintWriter out = res.getWriter();
: out.println("Hello, world!");
: out.close();
: }
: }
: 那....在container的程式内部,
: 是不是会执行"类似"下列这些动作呢?
: HelloServlet servlet = new HelloServlet();
: servlet.init();
: servlet.servlet();
: servlet.destroy();
这要看 "类似" 到什麽地步了 :p
当然同样是会有 "建立" HelloServlet 实体的步骤,
另外 3 个 method call 也确定存在。
不过实际的过程比较复杂,
首先是 container 根本不知道你 "未来" 会写一个叫作 HelloServlet 的类别,
它如何 "事先" 写出 new HelloServlet() 这样的 code 呢?
所以这部份是用 Reflection 动态载入并建立实体。
另外 Servlet 也有使用 pool 的概念,
当 pool 中还存在对应的物件时,就不需要重新建立一个新的。
总地来说,Constructor 和那 3 个 method 确实都会被呼叫。
: 问题二:
: 从上述的HelloServlet程式码是不是可以看出,
: HelloServlet是直接使用HttpServlet的service(),init()和destroy(),
: 而没有对这两个method做任何override和overload的动作呢?
你这里需要问的只有 overriding,而答案确实是如你所说。
: 问题三:
: 请问....HttpServlet的service(),init()和destroy()完整程式码内容,
: 在哪个网站可以查的出来吗?
: 因为我想藉由程式码的内容得知,
: 一个servlet的程式做初始化,处理request,做destroy的详细动作.
: 还麻烦各位不吝惜指教一下,
: 谢谢!
以 Tomcat 而言,它的 source code 是可以自由下载的,
http://tomcat.apache.org/download-60.cgi
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.78.231
1F:推 shorttime:非常谢谢您~~ 01/14 16:56