2014년 9월 22일 월요일

[심심풀이]RequestProcessor 클래스[자바JSP/Servlet/JDBC/MiPlatform/XPlatform/교육/JSP/서블릿강좌/Spring교육잘하는곳/자바,JSP/spring/교육추천/JSP/JDBC실무교육]

RequestProcessor 클래스 

ActionServlet의 process메소드는 아래와 같습니다. 

protected void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
        RequestUtils.selectAllication(request, getServletContext()); 
        getApplicationConfig(request).getProcessor().process(request, response); 


이 과정이 수행된 후 다음 단계에서는 org.apache.struts.action.RequestProcessor의 process 메소드가 호출 됩니다. 

------------------------------------------- 
RequestProcessor의 확장 메소드 
------------------------------------------- 

processMultipart : 멀티파트 요청을 래핑 
processPath : 매핑을 선택 하는데 사용 할 경로 컴포넌트 정의 
processLocale : 만약 요청이 들어 온다면 현재 사용자의 지역을 선택 
processContent : 요청안의 ContentType을 결정 
processNoCache : 이 모듈이 사용 가능 하다면 요청내의 Cache가 없는 헤더를 설정 
processPreprocess : 범용 전처리 훅으로서의 기능 
proceeMapping : 이 요청을 위한 매핑을 정의 
processRoles : 이 액션을 수행 하기 위한 특별한 Role을 검사 
processActionForm : 이 매핑을 위한 ActionForm 빈을 생성 하거나 얻음 
processPopulate : 요청으로부터 ActionForm 을 구성 
processValidate : 요청과 연관된 ActionForm 빈을 처리 
processForward : 이 매핑에 정의된 포워드를 처리 
processInclude : 이 매핑에 정의된 인클루드 처리 
processActionCreate : 이 요청을 처리하기 위한 Action 인스턴스를 생성 하거나 취득 
processActionPerform : 이 요청을 처리하는 Action 인스턴스를 호출, ActionForward를 반환 
processActionForward : 반환된 ActionForward 인스턴스를 처리 


------------------- 
process 메소드 
------------------- 

위에서 간단히 설명한 모든 확장 메소드는 모두 process 메소드에서 차례대로 호출 됩니다. process 메소드는 HttpServletRequest를 처리 하고 이에 대응 하는 HttpServletResponse 객체를 생성 합니다. 

디폴트 RequestProcessor는 앞에서 정의한 확장 메소드들을 호출함으로서 이러한 작업을 수행 합니다. 

응답을 생성 하기 위해 processActionForward는 일반적으로 요청을 JSP 페이지 또는 다른 리소스로 전송 합니다. 그러나 process가 종료 될 때 응답을 반드시 끝내도록 API에서 정의 합니다. 

아래에 RequestProcessor 클래스의 process 메소드의 내용과 자세한 설명이 있습니다. 


/* RequestProcessor의 process 메소드 */ 

public void process(HttpServletRequest request, 
                        HttpServletResponse response) 
        throws IOException, ServletException { 

        /* 
                  만약 HttpServletRequest가 POST 방식이며 contentType이 multipart/form-data인 경우 
                  새로운 Request Wrapper를 만듭니다. 요청이 GET 방식이고 contentType이 multipart가 
                  아니면 기본 Request를 반환하며 애플리케이션에서 다중 파일 업로딩 기능을 
                  지원하지 않으면 multipart 기능을 고려하지 않아도 됩니다. 
                */ 
        request = processMultipart(request); 

        // 요청의 URI에서 경로를 추출하여 반환 합니다. 이 정보는 Action을 선택하는데 이용 
        String path = processPath(request, response); 
        if (path == null) { 
            return; 
        } 
        
                
        if (log.isDebugEnabled()) { 
            log.debug("Processing a '" + request.getMethod() + 
                      "' for path '" + path + "'"); 
        } 

        //요청의 Locale을 결정, 생성된 Locale 객체를 HttpSession에 저장                
        processLocale(request, response); 

        // 요청의 contentType(Default는 text/html)과 Encoding을 결정 
        processContent(request, response); 

                /* 
                nocache 속성이 true로 되어 있는지 확인하기 위해 호출됨 
                만약 true라면 cach되는 것을 막기 위해 response 객체에 
                적절한 응답헤더를 set 해야 합니다. 
                헤더 파라미터는 Pragma, Cache-Control, Expires등이 있습니다. 
                예) response.setHeader(Pragma, No-Cache); 
                    response.setHeader(Cache-Control, No-Cache); 
                        response.setHeader(Expires, 1); 
                */ 
        processNoCache(request, response); 

        /* 
                        범용 전처리 후크로서 기본적으로 true를 반환, 하지만 이클래스의 서브 클래스는 
                        이 메소드를 오버라이딩 해서 처리를 계속 할지의 여부를 결정하는 로직을 구현 할 수 
                        있습니다. Action을 호출 하기전에 사용자가 유효한 세션을 가지고 있는지등을 
                        확인 할 수 있는 좋은 위치 입니다.이 메소드가 true를 반환하면  처리를 계속하며 
                        false인 경우 멈춥니다. 
                */ 
        if (!processPreprocess(request, response)) { 
            return; 
        } 
        
        this.processCachedMessages(request, response); 

        
        // 요청에서 사용 할 ActionMapping 객체를 생성, 매핑정보가 없으면 오류 메시지를 보낸다. 
        ActionMapping mapping = processMapping(request, response, path); 
        if (mapping == null) { 
            return; 
        } 

        // 사용자가 요청을 처리할 권한을 가지고 잇는지등을 검사, 기본적으로 
                // 자바의 표준 보안 API를 사용하며 애플리케이션 나름대로의 보안 원칙에 입각해 
                // 해당 부분을 구형 할 수도 있습니다. 그러기 위해서는 processRoles를 오버라이드 합니다. 
                // 이렇게 함으로서 애플리케이션 기반 보안을 위해 적용 가능 합니다. 
                // 기본적으로 isUSerInRole() 메소드를 배경으로 ACtionMapping에 의해 정의된 롤들을 실행하며 
                // 유저가 특정 롤안에 있으면 접근이 허용 됩니다. 
                // 표준 컨테이너 기반 시스템은 URL 패턴과 그 패턴에 일치하는 기소스에 접근하는 롤을 정의하도록 
                // 합니다. 
        if (!processRoles(request, response, mapping)) { 
            return; 
        } 

        //ActionMapping에 ActionForm이 설정되어 있는지 확인 
        ActionForm form = processActionForm(request, response, mapping); 

                // ActionForm이 매핑 설정되어 있다면 요청 파라미터로 부터 값을 가지고 와서 ActionForm 인스턴스에 저장 
        processPopulate(request, response, form, mapping); 

                //설정 파일에서 action 요소의 validate 속성이 true로 되어 있다면 ActionForm의 validate() 
                // 메소드를 호출 
        if (!processValidate(request, response, form, mapping)) { 
            return; 
        } 

                /* 
        설정 파일의 action 태그에 forward나 include 속성이 있다면 RequestDispatcher의 
                forward(), include() 메소드를 호출 합니다. 즉 설정 파일에 이러한 forward나 
                include가 설정 되어 있으면 처리는 여기까지로 종료 되고 해당 URI로 이동 
                */ 
        if (!processForward(request, response, mapping)) { 
            return; 
        } 
        
        if (!processInclude(request, response, mapping)) { 
            return; 
        } 


        // 요청을 처리하기 위해 Action 인스턴스를 얻거나 생성 
        Action action = processActionCreate(request, response, mapping); 
        if (action == null) { 
            return; 
        } 

        // 앞에서 생성한 Action인스턴스의 execute() 메소드를 호츌 
        ActionForward forward = 
            processActionPerform(request, response, 
                                action, form, mapping); 

                // 위에서 생성한 ActionForward가 리턴하는 것을 처리, 해당 URL로 포워드 
        processForwardConfig(request, response, forward); 
    }


 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-271961
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111440
53 [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… 오라클자바…03-151197
52 [주말주간]C#, ASP.NET마스터 오라클자바…01-311359
51 [평일,기업100%환급]SQL기초에서 Schema Object까지 오라클자바…01-311139
50 [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 오라클자바…01-311046
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191359
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111192
47 [평일야간,주말주간]JAVA,Network&JSP&Spring,MyBatis,Hibernate 오라클자바…01-031696
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-271961
45 [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… 오라클자바…12-191462
44 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) 오라클자바…12-141428
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111440
42 [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 오라클자바…12-091158
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011354
40 [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… 오라클자바…12-011519
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011021

댓글 없음:

댓글 쓰기