有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajavax。面孔。网络应用。FacesServlet在HTTP上工作?

javax。面孔。网络应用。FacesServlet。java没有如下方法

doGet(), if the servlet supports HTTP GET requests
doPost(), for HTTP POST requests
doPut(), for HTTP PUT requests
doDelete(), for HTTP DELETE requests 

它唯一的have service()方法

doGet()/doPost()/doPut()/doDelete()方法仅特定于javax。servlet。http。HttpServlet。java类

javax。servlet。http。HttpServlet。java被扩展为通过HTTP协议为j2ee web应用程序进行通信。 而javax。面孔。网络应用。FacesServlet。java还用于通过HTTP进行j2ee web应用程序通信

我的问题是JSF应用程序在javax中如何通过HTTP进行通信。面孔。网络应用。FacesServlet。java没有特定于HTTP的方法吗


共 (1) 个答案

  1. # 1 楼答案

    那些HttpServlet#doXxx()方法只是一种抽象。不使用它们并不意味着servlet不使用HTTP(此外,如果这是真的,servlet将不会首先被调用)

    如果servlet只覆盖Servlet#service()方法,那么这就意味着servlet对所有HTTP方法都有一个全局捕获点。如果有必要,它仍然可以通过^{}确定实际使用的HTTP方法。这种方法可以避免程序员在所有doXxx()方法上复制粘贴相同的代码

    如果您阅读^{} source code,您将发现下面的块,其中确定了HTTP方法(行号与JSF2.2API匹配):

    671    private boolean isHttpMethodValid(HttpServletRequest request) {
    672        boolean result = false;
    673        if (allowAllMethods) {
    674            result = true;
    675        } else {
    676            String requestMethodString = request.getMethod();
    677            HttpMethod requestMethod = null;
    678            boolean isKnownHttpMethod;
    679            try {
    680                requestMethod = HttpMethod.valueOf(requestMethodString);
    681                isKnownHttpMethod = true;
    682            } catch (IllegalArgumentException e) {
    683                isKnownHttpMethod = false;
    684            }
    685            if (isKnownHttpMethod) {
    686                result = allowedKnownHttpMethods.contains(requestMethod);
    687            } else {
    688                result = allowedUnknownHttpMethods.contains(requestMethodString);
    689            }
    690            
    691        }
    692
    693        return result;
    694    }
    

    基本上,实际的HTTP方法只与FacesServlet相关,以确定它是否是受支持的方法。如果是,则servlet将继续以相同的方式处理HTTP请求,而不管使用何种方法