首页 > 试题广场 >

下面有关servlet service描述错误的是?

[单选题]
下面有关servlet service描述错误的是?
  • 不管是post还是get方法提交过来的连接,都会在service中处理
  • doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
  • service()是在javax.servlet.Servlet接口中定义的
  • service判断请求类型,决定是调用doGet还是doPost方法
推荐
B
doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的
编辑于 2015-02-03 10:23:09 回复(8)
doget/dopost与Http协议有关,是在 javax.servlet.http.HttpServlet 中实现的

发表于 2016-07-27 22:14:21 回复(14)
GenericServlet 抽象类 给出了设计 servlet 的一些骨架,定义了 servlet 生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关
发表于 2015-02-01 22:52:05 回复(2)

基本功能:service方法是在servlet生命周期中的服务期,根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法

实现:默认在HttpServlet类中实现。

发表于 2014-11-21 20:45:28 回复(0)
注意以下几点:
1.service方法是在servlet生命周期中的服务期,默认在HttpServlet类中实现,根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法实现。
2.GenericServlet 抽象类给出了设计servlet的一些骨架,定义了servlet生命周期还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的。doget/dopost与Http协议有关,是在 javax.servlet.http.HttpServlet 中实现的。
3.doGet和doPost方法在HttpServlet类中实现,GenericServlet中实现了service()
4.常说所有的请求都先由service方法处理,而javax.servlet.GenericServlet接口实现了javax.servlet.Servle接口,且javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子类。只有最先定义好了的service方法才可以处理所有的请求。
发表于 2016-11-04 11:18:38 回复(2)
service()是在javax.servlet.Servlet接口中定义的, 在 javax.servlet.GenericServlet 中实现了这个接口。
而 doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的, javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子类。
所有可以这样理解, 其实所有的请求均首先由 service() 进行处理, 而在 javax.servlet.http.HttpServlet 的 service() 方法中, 主要做的事情就是判断请求类型是 Get 还是 Post, 然后调用对应的 doGet/doPost 执行。
发表于 2016-05-18 21:56:17 回复(5)
javax.servlet.Servlet 是一个接口,其中有一个方法是:
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
 也就是说service方法是在Servlet接口中定义的。javax.servlet.GenericServlet 是一个抽象类,实现了javax.servlet.Servlet接口,这个抽象类没有给出service 的具体实现:
public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
javax.servlet.GenericServlet 有一个子类 javax.servlet.http.HttpServlet, 这个就不是一个抽象类了,它实现了 service 方法
  public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        HttpServletRequest request;
        HttpServletResponse response;
        try {
            request = (HttpServletRequest)req;
            response = (HttpServletResponse)res;
        } catch (ClassCastException var6) {
            throw new ServletException("non-HTTP request or response");
        }

        this.service(request, response);
    }
this.service(request, respoinse); 执行的就是判断提交过来的请求是什么类型的,然后去调用doGet或者doPost方法。
     String method = req.getMethod();
        long lastModified;
        if (method.equals("GET")) {
            lastModified = this.getLastModified(req);
            if (lastModified == -1L) {
                this.doGet(req, resp);
            } else {
                long ifModifiedSince;
                try {
                    ifModifiedSince = req.getDateHeader("If-Modified-Since");
                } catch (IllegalArgumentException var9) {
                    ifModifiedSince = -1L;
                }

                if (ifModifiedSince < lastModified / 1000L * 1000L) {
                    this.maybeSetLastModified(resp, lastModified);
                    this.doGet(req, resp);
                } else {
                    resp.setStatus(304);
                }
            }
        } else if (method.equals("HEAD")) {
            lastModified = this.getLastModified(req);
            this.maybeSetLastModified(resp, lastModified);
            this.doHead(req, resp);
        } else if (method.equals("POST")) {
            this.doPost(req, resp);
        } else if (method.equals("PUT")) {
            this.doPut(req, resp);
        } else if (method.equals("DELETE")) {
            this.doDelete(req, resp);
        } else if (method.equals("OPTIONS")) {
            this.doOptions(req, resp);
        } else if (method.equals("TRACE")) {
            this.doTrace(req, resp);
        } else {
            String errMsg = lStrings.getString("http.method_not_implemented");
            Object[] errArgs = new Object[]{method};
            errMsg = MessageFormat.format(errMsg, errArgs);
            resp.sendError(501, errMsg);
        }

    }


选项 B 说  doGet/doPost 是在 javax.servlet.GenericServlet 中实现的,实际上人家连 service 都还是抽象方法呢,更不用说去实现 doGet/doPost方法了,这些方法是在 HttpServlet 类中实现的
发表于 2019-09-08 08:51:27 回复(2)
doGet和doPost方法在HttpServlet类中实现,GenericServlet中实现了service()
发表于 2015-10-23 21:15:17 回复(3)
请求过来 由 service 方法处理, 再选择调用doGet或doPost方法
Servlet接口是在javax.servlet.Servlet定义
声明周期等是在javax.servlet.GenericServlet中实现
发表于 2015-08-26 22:42:56 回复(0)
Servlet生命周期分为三个阶段:   1,初始化阶段  调用init()方法   2,响应客户请求阶段  调用service()方法   3,终止阶段  调用destroy()方法 所以要区分这里的service方法之于做数据库处理的service对象。
发表于 2017-10-21 09:10:53 回复(0)
doGet/doPost在servlet.http.HttpServlet中实现
发表于 2015-09-08 10:47:39 回复(0)
doGet和doPost方法在HttpServlet类中实现,GenericServlet中实现了service()
发表于 2016-01-27 16:30:02 回复(0)
vcc头像 vcc
doGet和doPost方法在HttpServlet类中实现,service方法在GenericServlet类中实现
发表于 2018-02-24 22:45:36 回复(0)
doGet/doPost 在 javax.servlet.http.HttpServlet  中
发表于 2022-04-15 20:07:28 回复(0)
经典继承javax.servlet.http.HttpServle 后重写 doGet/doPost方法
发表于 2021-08-18 17:27:52 回复(0)
注意以下几点: 1.service方法是在servlet生命周期中的服务期,默认在HttpServlet类中实现,根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法实现。 2.GenericServlet 抽象类给出了设计servlet的一些骨架,定义了servlet生命周期还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的。doget/dopost与Http协议有关,是在 javax.servlet.http.HttpServlet 中实现的。 3.doGet和doPost方法在HttpServlet类中实现,GenericServlet中实现了service() 4.常说所有的请求都先由service方法处理,而javax.servlet.GenericServlet接口实现了javax.servlet.Servle接口,且javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子类。只有最先定义好了的service方法才可以处理所有的请求。
发表于 2021-01-21 08:40:49 回复(0)
GenericServlet 抽象类 给出了设计 servlet 的一些骨架,定义了 servlet 生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关
发表于 2017-11-06 20:40:23 回复(0)
doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的
不管是post还是get方法提交过来的连接,都会在service中处理
在HttpServlet中,service判断请求时是get还是post,然后根据方式调用doXXXX()方法
 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);
        }
    }

发表于 2016-03-16 22:59:42 回复(0)
我之后一定要去系统的学一下这个网络中的类,一直不成体系,一直错
发表于 2023-09-17 07:33:20 回复(0)
javax.servlet.GenericServlet是抽象类,没有具体方法实现
发表于 2022-02-27 11:40:07 回复(0)

doGet和doPost方法的实现是在HttpServlet类中完成的,并通过覆盖这些方法来处理对应类型的HTTP请求。

在HttpServlet类中,doGet和doPost等方法都是被定义为protected类型的,仅供子类继承并覆盖使用。这些方法的具体实现会根据请求方法的类型来执行相应的业务逻辑。

以doGet方法为例,其在HttpServlet类中的定义如下:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     //do something
}

在实际使用中,开发者通过继承HttpServlet类并覆盖doGet/doPost等方法,来自定义Servlet的行为逻辑。当对应的HTTP请求发生时,容器会自动调用对应的doGet/doPost方法来执行开发者定义的业务逻辑。

例如,下面的代码片段展示了一个简单的实例:

public class MyServlet extends HttpServlet {  
     protected void doGet(HttpServletRequest request, HttpServletResponse  response) 
         throws ServletException, IOException {  
         response.setContentType("text/html");  
         PrintWriter out = response.getWriter();  
         out.println("<html>");  
         out.println("<head>");  
         out.println("<title>MyServlet</title>");  
         out.println("</head>");  
         out.println("<body>");  
         out.println("<h1>Hello World!</h1>");  
         out.println("</body>");  
         out.println("</html>");  
     }  
}

这个Servlet会在接收到一个HTTP GET请求时,回复一个HTML响应,包含了一个"Hellow World!"的标题。开发者通过继承了HttpServlet,并覆盖了doGet方法,来实现对GET请求的自定义处理逻辑。当发生GET请求时,容器会自动调用doGet方法来执行程序逻辑,生成对应的HTML响应并返回给客户端。

发表于 2023-05-10 10:05:46 回复(2)