论坛首页 招聘求职论坛

貌似简单的面试题

浏览 20597 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-24  
max.h.chen 写道
也不一定只加载一次,要看servlet的运行模式,如果使用了线程安全模式则一个线程绑一个实例,那就不只一次了,一般是对象池管理了,不过通常都不会这样用。



我上面说的是对同一个实例来说。如果你要创建多个新实例必然会有多次加载,但这样肯定会增加系统开销,因为是一对一的关系,比起一对多效果如何可想而知。
0 请登录后投票
   发表时间:2007-05-24  
抛出异常的爱 写道
你写的代码更麻烦。。。。爬到N层父类之上去看一个过滤器,。。。

恶梦。

PS:客户请求的时候Servlet怎么工作。
1这题问的是有几种生命周期。。。你写的还少。。。
2你写的不是他想要的答案。。。
3.。。。
4.。。。
楼上你有很多servlet经验,但是这种面试题是有标准答案的。。。


1:生命周期由Servlet接口定义,里面的方法就是生命周期,可见
http://java.sun.com/webservices/docs/1.6/api/javax/servlet/Servlet.html

2:

Server创建一个Servlet的实例

  Server调用Servlet的init()方法

  一个客户端的请求到达Server

  Server创建一个请求对象 //由HTTP信息创建ServletRequest对象

  Server创建一个响应对象

  Server激活Servlet的service()方法,传递请求和响应对象作为参数

  service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息 //此分根据GET,POST的不同传给不同的doXXX。

  service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法

  对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。





ps:下面源代码是我复制过来的
.......
/**
     *
     * Receives standard HTTP requests from the public
     * <code>service</code> method and dispatches
     * them to the <code>do</code><i>XXX</i> methods defined in
     * this class. This method is an HTTP-specific version of the
     * {@link javax.servlet.Servlet#service} method. There's no
     * need to override this method.
     *
     *
     *
     * @param req the {@link HttpServletRequest} object that
     * contains the request the client made of
     * the servlet
     *
     *
     * @param resp the {@link HttpServletResponse} object that
     * contains the response the servlet returns
     * to the client
     *
     *
     * @exception IOException if an input or output error occurs
     * while the servlet is handling the
     * TRACE request
     *
     * @exception ServletException if the request for the
     * TRACE cannot be handled
     *
     * @see javax.servlet.Servlet#service
     *
     */

    protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
    {
String method = req.getMethod();

if (method.equals(METHOD_GET)) {
    long lastModified = getLastModified(req);
    if (lastModified == -1) {
// servlet doesn't support if-modified-since, no reason
// to go through further expensive logic
doGet(req, resp);
    } else {
long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
if (ifModifiedSince < (lastModified / 1000 * 1000)) {
    // If the servlet mod time is later, call doGet()
                    // Round down to the nearest second for a proper compare
                    // A ifModifiedSince of -1 will always be less
    maybeSetLastModified(resp, lastModified);
    doGet(req, resp);
} else {
    resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}
    }

} else if (method.equals(METHOD_HEAD)) {
    long lastModified = getLastModified(req);
    maybeSetLastModified(resp, lastModified);
    doHead(req, resp);

} else if (method.equals(METHOD_POST)) {
    doPost(req, resp);
   
} else if (method.equals(METHOD_PUT)) {
    doPut(req, resp);
   
} else if (method.equals(METHOD_DELETE)) {
    doDelete(req, resp);
   
} else if (method.equals(METHOD_OPTIONS)) {
    doOptions(req,resp);
   
} else if (method.equals(METHOD_TRACE)) {
    doTrace(req,resp);
   
} else {
    //
    // Note that this means NO servlet supports whatever
    // method was requested, anywhere on this server.
    //

    String errMsg = lStrings.getString("http.method_not_implemented");
    Object[] errArgs = new Object[1];
    errArgs[0] = method;
    errMsg = MessageFormat.format(errMsg, errArgs);
   
    resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
}
    }
.........
0 请登录后投票
   发表时间:2007-05-24  
貌似简单 实际也不难
0 请登录后投票
   发表时间:2007-05-24  
同意LS,非常基础的问题,不明白这个,你怎么做web
0 请登录后投票
   发表时间:2007-05-24  
基础的东西.MS LZ只知道用...
0 请登录后投票
   发表时间:2007-05-25  
很难吗?相当基础的问题了
servlet的单线程模型完全是多此一举,已经不建议使用,可以不用考虑
我认为一个java程序员如果连servlet都不会写,那是怎么都说不过去的
0 请登录后投票
   发表时间:2007-05-25  
会不会写是一回事
知不知道原理是另外一回事
0 请登录后投票
   发表时间:2007-05-26  
ddandyy 写道
前面还行  第4个根本就没看过
-_-

另外看这题怎么这公司根本不用框架的说


第四题可是搞Java公司必考题目。《Head First Jsp/Servlet》看看,这本书将JSP和Servlet内部机制讲的再详细不过了。再想深入就看源代码吧,特别使JBoss和Tomcat的源代码。
0 请登录后投票
   发表时间:2007-05-27  
学Servlet就是培养基础。
0 请登录后投票
   发表时间:2007-05-31  
servlet-2_4-fr-spec.pdf
p24-p25

For a servlet not hosted in a distributed environment(thedefault),the servlet container must use only one instance per servlet declaration.However,for a servlet implementing the SingleThreadModel interface,the servlet container may instantiate multiple instances to handle a heavy request load and serialize requests to a particular instance.

注意:
The SingleThreadModel Interface is deprecated in this version of the specification.
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics