2014-05-16 2 views
0

저는 자바 배경에서 왔으며 몇 년 전부터 웹 개발에 종사하고 있습니다. 처음부터 웹 개발을 배우지 않았으므로 기술은 성장했지만 깨끗하고 견고하지는 않습니다. 내가 말하는 자바 웹 애플리케이션은 약 8 살이며 웹 개발 전문가가 아닌 개발자가 만든 것입니다. 결과 : 그들은/당신이하지 말아야 할 많은 것들을했습니다. 앞으로 몇 년 안에 우리의 응용 프로그램을 혁신하고 싶기 때문에 나는 깨끗한 전략/아키텍처를 찾고자합니다.Java 웹 응용 프로그램 아키텍처 토론

우리 시스템은 다음과 같이 작동합니다. 서버 (웹 서버 아님)는 완전히 다른 구조로 많은 다른 객체를 저장하고 데이터웨어 하우스 시스템을 기반으로 많은 데이터 분석을 수행합니다. 소켓을 통해 클라이언트가 서버에 연결됩니다. 하나의 클라이언트는 j2ee 웹 클라이언트입니다. 우리는 서블릿, 액션, JSP, Beans를 가지고 있습니다 ... 우리는 서버로 옮겨 질 클라이언트에서 많은 비즈니스 로직을 가져야합니다. 우리의 소프트웨어는 매우 구성 가능하며 꽤 커졌습니다. 뷰가 계산 된 데이터, 상태 등으로 극적으로 변경 될 수 있기 때문에 JSP가 너무 많아서 스크립틀릿이 너무 복잡하여 좋지 않습니다. 내가 생각 무엇

:

  • 모든 제어 액션/비즈니스 로직은 서버로 이동합니다.
  • 서버는 메타 데이터가있는 데이터를 다시 전송하므로 클라이언트는 유효성 검사를 수행하지 않고도보기를 빠르게 관리 할 수 ​​있습니다. (예 : 메타 태그 'invalid')
  • 서블릿과 서버 사이의 클라이언트는 Freemarker 또는 Mustache.java와 같은 템플릿 엔진의 도움으로 HTML 코드를 생성합니다.
  • 이 HTML 코드는 DOM 노드를 대체, 채우기 또는 추가하는 데 응답합니다.
  • Ajax 요청을 사용합니다.

이 접근 방식에 대해 어떻게 생각하십니까? 약점이나하자에 대한 암시가 있습니까? 서블릿 대신 웹 서비스를 사용하는 것이 합리적일까요?

지금은 프레임 워크를 찾고있는 것이 아닙니다 (하지만 언급해야 할 것이 있으면 잠시만 기다려주십시오.)하지만 앞으로 사용하고 싶은 일반 아키텍처에 대해서는 찾으십시오.

미리 알려 주시면 감사하겠습니다.


현재 구조에 대한 설명이 약간 혼란스러워 보입니다. 두 번째 시도 : 우리의 소프트웨어는 비 웹 응용 프로그램으로 시작되었습니다. 우리는 데이터, 계산 등을 관리하는 서버를 가지고 있습니다 ... 연결된 클라이언트는보기를 렌더링하고 사용자 상호 작용을 가져옵니다. 약 8 년 전에 우리 회사는 클라이언트 용 웹 응용 프로그램을 개발하기로 결정했습니다. 클라이언트의 인스턴스 (서버에 대한 연결을 유지함)는 세션에 저장되며 서블릿, JSP 등에서 액세스 할 수 있습니다. 따라서 웹 서버는 실제로 우리 시스템에서 클라이언트의 일부입니다.

도움이 되었기를 바랍니다.

+0

"서블릿과 서버 간의 클라이언트"는 무엇입니까? "우리 시스템은 다음과 같이 작동합니다 : 서버 (웹 서버가 아님) ..."? 웹 서버와 서버 사이에 "클라이언트"가 있어야하는 웹 서버가 아닌이 서버는 무엇입니까? 당신은 정말로 이것을 설명 할 필요가 있습니다. – developerwjk

+0

나는 포스트를 편집 했으므로 더 이상 혼란스럽지 않기를 바랍니다. – user1071828

답변

0

가정용 TCP/IP 서버가 실제로 반환하는 것과 처리해야 할 번거 로움에 따라 네 가지 방법이 있습니다. 모든 세부 사항을 알지 못하면 가장 잘 알지 못합니다.

옵션 1 (단독 TCP/IP 서버를두고, 오직 웹 어플리케이션을 재개발) : 더 많거나 적은 즉석 데이터베이스 서버로 자체 개발 한 TCP/IP 서버의

  1. 생각하고, 그대로 둡니다. 즉, 전혀 건드리지 않을 것입니다.

  2. 응용 프로그램 논리를 webapplication에두고 JSP에서 Servlet으로 옮깁니다. 기본적으로 로직 (서블릿)에서 뷰 (JSP)를 분리하기 위해 웹 응용 프로그램 부분을 다시 작성하십시오.

  3. HTML 템플릿에 JSP를 사용하고 논리가있는 서블릿에 Ajax 요청으로 채 웁니다. (또는 사용자가 주소 표시 줄에 .jsp를 보지 않고 요청 속성을 설정하고 JSP로 전달하는 컨트롤러로 서블릿을 사용하십시오.) 서블릿은 일반 서블릿과 동일한 방법으로 자체 개발 된 TCP/IP 서버에 액세스합니다 데이터베이스 서버에 액세스합니다.

옵션 2 (모두 같은 단지 웹 어플리케이션을 하나에 시스템 통합을 재 설계) :

  1. 이동 자체 개발 한 TCP에서 모든 코드/웹 응용에서 서블릿에 IP 서버 및 제거하기 자체 개발 한 TCP/IP 서버 두 대의 서버가 필요 없습니다. 이 혼란을 재 작성하는 데 시간을 투자한다면, 그것을 하나의 시스템으로 다시 작성하십시오.

  2. 응용 프로그램 논리를 webapplication에두고 JSP에서 Servlet으로 옮깁니다. 기본적으로 로직 (서블릿)에서 뷰 (JSP)를 분리하기 위해 웹 응용 프로그램 부분을 다시 작성하십시오.

  3. HTML 템플릿에 JSP를 사용하고 논리가있는 서블릿에 Ajax 요청으로 채 웁니다. , 옵션 3 (cronjobs와 TCP/IP 서버를 교체,

을 (또는. 사용자가 어느 주소 표시 줄에 .jsp로 보지 않고, JSP를 앞으로 요청 속성을 설정 및 컨트롤러로 서블릿을 사용) 또는)이 웹 어플리케이션을 구동하기 위해 DB를 채 웁니다 : (오히려) 클라이언트에 의해 호출해야 뭔가 이상

  1. 변경 자체 개발 한 TCP/서버의 백그라운드에서 계속 실행 뭔가에 IP 서버를. C# .net으로 작성된 Windows 서비스 나 cronjob을 사용하여 Linux에서 예약 된 Java 콘솔 프로그램 세트 일 수 있습니다. 그것은 웹 응용 프로그램에서 사용할 수있는 일종의 데이터베이스를 채 웁니다.

  2. 웹 응용 프로그램 만 해당 데이터베이스를 읽게 만듭니다. 더 이상 서버에 액세스 할 필요가 없습니다.

  3. 등보기 및 로직의 분리에 대한

    같은 물건,

옵션 4 (웹 서비스와 TCP/IP 서버 교체) :

  1. 이 함께 자체 개발 한 TCP/IP 서버 교체를 웹 서비스 또는 웹 서비스 집합.

  2. 옵션 1과 동일합니다.

  3. 옵션 1과 동일하지만 구식 TCP/IP 서버가 아닌 서블릿에서 웹 서비스에 액세스하는 경우는 예외입니다.

+0

와우. 자세한 답변을 주셔서 감사합니다. – user1071828

+0

서버가 너무 커서 세 명의 개발자가 다시 작성하는 데 약 2 년이 걸리기 때문에 옵션 1을 선택하게됩니다. 지금은 웹 애플리케이션 측면에 초점을 맞추고 있으며, 앞으로는 더 적은 로직을 포함하게 될 것입니다. 그것은 기본적으로 서버에 대한 인터페이스가 될 것입니다. 내 문제는 JSP를보고 그들이 우리를 이끌었던 곳을 봅니다. if/els, switch ...로 채워져 있습니다. 그래서 우리는 우리의 어플리케이션에서 약 100 개의 다른 JSP를 가지고 있습니다. 나는 JSP에서 그 복잡성을 제거하고 싶다. 그래서 내 접근 방식 (서블릿 HTML) 어리석은? – user1071828

+0

Servlet의 전체 페이지를 out.print()하면 나쁜 생각입니다. 특히 자바 스크립트를 포함해야하는 경우 JSP보다 더 복잡해집니다. 당신은 당신의 눈을 떠올리게하는 많은 이스케이프 된 따옴표로 끝날 것입니다. 하지만 Dj를 채우기 위해 Ajax 요청에 HTML 스 니펫을 반환하는 Servlet을 가지고있는 것처럼 HTML의 작은 스 니펫에는 의미가 있습니다. – developerwjk

관련 문제