java 一个servlet会同时处理多个请求; 同一个servlet可能会有多个实例;

为什么?service方法重写的时候第一行加super()是不是会根据post和get分流到doPost()和doGet()... 为什么?service方法重写的时候第一行加super() 是不是会根据 post和get分流到doPost()和doGet() 展开
 我来答
说十做九
2014-11-06
知道答主
回答量:18
采纳率:0%
帮助的人:16.1万
展开全部

servlet只有一个实例,处理请求是线程级别的



    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);

}

    }

这是servic方法,会根据get,post方法进行判断
HHPpeace888
推荐于2017-09-08 · TA获得超过565个赞
知道小有建树答主
回答量:529
采纳率:66%
帮助的人:367万
展开全部
1、servlet是单例的,只有一个对象。

2、super()是调用父类的方法,不是什么分流
追问
我把action和servlet搞混了,servlet的继承类重写 service方法第一行写 super() 会不会先跳到dopost或者doget并且自动重定向或者转发? 让我的方法体无法执行?
追答
1、会哦,亲,这是可以的哈!
2、这是servlet的生命周期的问题哦。
3、调用了service方法之后,会自动的去调用doget或者dopost方法。
4、有时候你提交的是get方法,但是调用了post方法或者反过来,这样会出错,你可以在doget方法里调用dopost,加上this.doPost();调用这个类的doPost方法,或者在doPost方法里加上doGet(),这样不管你提交的是get或者post方法都可以。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式