플러그인 아키텍처를 사용하는 Java 웹 애플리케이션이 있습니다. 나는 누군가가 서블릿을 추가 할 수있는 솔루션을 가지고 있는지 알고 싶습니다. 웹 앱이 실행되는 동안 서블릿 매핑에 serlvet 매핑이 필요합니까? 클래스가/WEB-INF/classes 폴더에 추가 될 수 있고 웹 응용 프로그램을 다시 시작하지 않고 서블릿으로 활성화 될 수 있다는 아이디어가 있습니다. 같은 성격으로, 사용자가 "플러그인"을 제거하기로 결정하면 코드가 servletconfig에서 클래스를 제거하게하십시오.servlet에 서블릿을 동적으로 추가하십시오 .Config
답변
이를 수행하기위한 표준 Servlet API는 없습니다.
Tomcat에서이 작업을 수행 할 수 있습니다. 귀하의 webapp에서 개체를 얻을 수 있도록 마스터 서블릿 (다른 하나를 만드는 서블릿)은 ContainerServlet
을 구현해야합니다. 당신이 당신의 클래스 파일을 설치 한 후에는
Context context = (Context) wrapper.getParent();
Wrapper newWrapper = context.createWrapper();
newWrapper.setName(name);
newWrapper.setLoadOnStartup(1);
newWrapper.setServletClass(servletClass);
context.addChild(newWrapper);
context.addServletMapping(pattern, name);
이러한 호출은 즉시 서블릿을 작성, 다음과 통화를 할 수 있습니다. 이 정보를 유지하는 방법을 찾아야합니다. web.xml을 업데이트하거나 자신의 파일에 쓸 수 있습니다.
실행중인 응용 프로그램에 클래스를 추가하거나 제거하는 것은 어렵습니다. 상용 솔루션으로는 JRebel을 참조하십시오.
사용자가 매우 오랫동안 실행중인 대화/세션이없는 경우 웹 앱을 다시 시작하면 알 수 없을 정도로 빨리 시작할 수 있습니다. 이것이 당신을 위해 그것을한다면, 문제는 꽤 쉽게됩니다.
Tomcat을 실행한다고 가정하면 reloadable=true
으로 서버를 구성 할 수 있으며 web.xml
을 webapps
디렉토리에 던질 때마다 앱이 다시 시작됩니다. WEB-INF/classes
디렉토리에 새 클래스를 추가 한 다음 web.xml
을 업데이트하면 정상적으로 작동합니다. 이러한 클래스가 사용 중이면 클래스 제거가 어려울 수 있습니다. 주어진 서블릿 클래스로 더 이상 라우팅되지 않는 web.xml
을 처음 배포 한 다음 2 단계 프로세스를 수행하여 클래스 사용자가 사라질 때까지 기다린 다음 클래스를 삭제하고 업데이트 된 web.xml
을 다시 배포하십시오.
나는 동적으로 그렇게 할 수 있다고 생각하지 않지만 사전 구성된 필터를 사용하여 서블릿을 활성 또는 비활성으로 만들 수 있습니다. 필터가 데이터베이스 나 파일 시스템에서 동적으로 변경할 수있는 값을 확인하고 서블릿이 "꺼져"있는 경우 요청을 다시 라우팅하는 방법을 알려줍니다.
나는 사용자에게 일종의 피드백을주지 않고 서블릿을 끄는 것이 무례 할 것이라고 생각한다.
- 1. 동적으로 링크 버튼을 추가하십시오.
- 2. 동적으로 jQuery Datepicker를 추가하십시오.
- 3. 컨트롤을 목록보기에 동적으로 추가하십시오.
- 4. 캔버스에 이미지를 동적으로 추가하십시오.
- 5. C# MenuStrip에 ToolStripMenueItems를 동적으로 추가하십시오.
- 6. Asp.Net의 DataGrid에 동적으로 확인란을 추가하십시오.
- 7. 은색에 사각형 컨트롤을 동적으로 추가하십시오.
- 8. 동적으로 HTML 양식에 입력을 추가하십시오.
- 9. 동적으로 페이지를 WPF 마법사에 추가하십시오.
- 10. 테이블 행에 데이터를 동적으로 추가하십시오.
- 11. 기존 개체에 속성을 동적으로 추가하십시오.
- 12. 동적으로 Flex의 DataGrid에 열을 추가하십시오.
- 13. iphone의 TableView에서 행을 동적으로 추가하십시오.
- 14. 동적으로 대화 상자에 버튼을 추가하십시오.
- 15. 동적으로 객체에 대한 속성을 추가하십시오.
- 16. New-> Servlet에 대해 프로젝트를 선택할 수 없습니다.
- 17. WebDAV Servlet에 대한 인증 구현
- 18. 동적으로 VB.NET에서 Div 테이블 행을 추가하십시오.
- 19. 모듈의 메소드를 클래스의 특정 인스턴스에 동적으로 추가하십시오.
- 20. 동적으로 HTML 양식에 추가 입력란을 추가하십시오.
- 21. Sencha Touch의 TabBar에 항목을 동적으로 추가하십시오.
- 22. 익명 사용자에 대해 주체/권한을 동적으로 추가하십시오.
- 23. Reporting Services : 서버 보고서에 필터를 동적으로 추가하십시오.
- 24. 동적으로 Click 이벤트를 asp 버튼에 추가하십시오.
- 25. 안드로이드 동적으로 뷰에 horizontalscrollbar 및 verticalscrollbar를 추가하십시오.
- 26. 동적으로 데이터 행을 * .rpt 파일에 추가하십시오. (C#)
- 27. Ajax를 사용하여 GridView 테이블을 페이지에 동적으로 추가하십시오.
- 28. div의 끝에 동적으로 생성 된 dijit을 추가하십시오.
- 29. Silverlight - MVVM을 사용하여 동적으로 캔버스에 타원을 추가하십시오.
- 30. 효율적인 어댑터를 사용하여 ListView에 항목을 동적으로 추가하십시오.
완벽하고 많은 감사드립니다. – BigBadOwl