锁定老帖子 主题:貌似简单的面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-24
max.h.chen 写道 也不一定只加载一次,要看servlet的运行模式,如果使用了线程安全模式则一个线程绑一个实例,那就不只一次了,一般是对象池管理了,不过通常都不会这样用。
我上面说的是对同一个实例来说。如果你要创建多个新实例必然会有多次加载,但这样肯定会增加系统开销,因为是一对一的关系,比起一对多效果如何可想而知。 |
|
返回顶楼 | |
发表时间: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); } } ......... |
|
返回顶楼 | |
发表时间:2007-05-24
貌似简单 实际也不难
|
|
返回顶楼 | |
发表时间:2007-05-24
同意LS,非常基础的问题,不明白这个,你怎么做web
|
|
返回顶楼 | |
发表时间:2007-05-24
基础的东西.MS LZ只知道用...
|
|
返回顶楼 | |
发表时间:2007-05-25
很难吗?相当基础的问题了
servlet的单线程模型完全是多此一举,已经不建议使用,可以不用考虑 我认为一个java程序员如果连servlet都不会写,那是怎么都说不过去的 |
|
返回顶楼 | |
发表时间:2007-05-25
会不会写是一回事
知不知道原理是另外一回事 |
|
返回顶楼 | |
发表时间:2007-05-26
ddandyy 写道 前面还行 第4个根本就没看过
-_- 另外看这题怎么这公司根本不用框架的说 第四题可是搞Java公司必考题目。《Head First Jsp/Servlet》看看,这本书将JSP和Servlet内部机制讲的再详细不过了。再想深入就看源代码吧,特别使JBoss和Tomcat的源代码。 |
|
返回顶楼 | |
发表时间:2007-05-27
学Servlet就是培养基础。
|
|
返回顶楼 | |
发表时间: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. |
|
返回顶楼 | |