지금 Java Web Framework를 선택 하시겠습니까? [닫은]


149

우리는 ajax, 리치 미디어 컨텐츠, 매시업, 템플릿 기반 레이아웃, 유효성 검사, 최대 html / 자바 코드 분리. Grails는 좋은 선택처럼 보이지만 스크립팅 언어를 사용하고 싶지 않습니다. 우리는 자바를 계속 사용하고 싶습니다. 템플릿 기반 레이아웃은이 웹 응용 프로그램을 기능은 비슷하지만 모양과 느낌이 완전히 다른 여러 웹 사이트에서 사용하려는 경우 주요 관심사입니다.

포털 기반 솔루션이이 문제에 적합합니까?

"Spring Roo"또는 "Play"사용에 대한 통찰력이 도움이 될 것입니다.

내가 좋아하는 유사한 게시물 발견했다 있지만 년 이상 오래되었습니다. 그 동안 상황은 확실히 바뀌 었습니다!

편집 1 : 큰 답변 주셔서 감사합니다! 이 사이트는 트렌치 프로그래머 정보를위한 최고의 단일 소스가되고 있습니다. 그러나 portal-cms duo 사용에 대한 자세한 정보가 필요했습니다. Jahia는 물건을 본다. 비슷한 것이 있습니까?


1
"스크립팅 언어를 사용하고 싶지 않습니다", 부끄러운 일인데 왜 물어봐도 될까요? Play 프레임 워크가 마음에 들면 JRuby with Rails를 사용해보십시오. 평범한 Java는 아니지만 JRuby에서 Java 클래스를 호출하는 것은 매우 쉽습니다.
누가

2
Grails (즉, Groovy)는 자바와 잘 어울리므로 두려워 할 필요가 없습니다.
Erich Kitzmueller

4
@ hbagchi : 그냥 궁금합니다. 4 개월 후, 어떤 프레임 워크를 사용 했습니까? 행복하니?
Jonik

1
이것은 '커뮤니티 위키'질문이 아니십니까?
mickthompson

11
"하지만 1 년이 넘었습니다. 그 당시에는 상황이 확실히 바뀌 었습니다!"... 오, 그렇습니다. 12 개월 이상 된 기술을 사용해서는 안됩니다. 은 총알은 그동안 확실히 발명되었습니다 ... :-)
ObiWanKenobi

답변:


146

포털 기반 솔루션이이 문제에 적합합니까?

개인적으로, 나는 큰 뚱뚱한 포털 솔루션에서 멀리 떨어져있을 것입니다 (그들은 종종 생산성 킬러입니다). Gatein에 대해 좋은 소식을 들었지만 실제 경험이 없습니다.

"Spring Roo"또는 "Play"사용에 대한 통찰력이 도움이 될 것입니다.

Spring Roo에 대해서는 Spring roo Vs (Wicket and Spring) 와 같은 이전 답변을 인터넷을 통해 읽었 지만 여전히 확신하지 못합니다 (아마도 이해하지 못합니다). 그리고, 더 중요한, 정말 스프링 소스는 Grails에와 루와 함께 무엇을하고 있는지 궁금하네요 (아니, 루 대 Grails는? - 스프링 소스는 두 개의 매우 유사한 기술을 추진하는 이유는 그들이 모두 살아남을 것입니다 저를 설득하지 않습니다).

나는 Play에 대해 많이 말할 수 없습니다. 나는 모든 사람과 같은 데모를 보았지만 실제 피드백을 읽고 싶습니다. 그때까지 기다립니다.

비슷한 게시물을 찾았습니다 (...). 그 동안 상황은 확실히 바뀌 었습니다!

예, 아니오 :) 그러나 프리젠 테이션 프레임 워크를 입력합시다. 1 년 전과 같이 귀하의 질문에 대한 단일 답변이 없으며, 그 주위에는 수십 개의 프레임 워크가 있으며 명확한 승자가 없습니다. 몇 가지만 인용하면됩니다.

  • JSF : 저를 포함 하여이 구성 요소 기반 프레임 워크에 대한 많은 회의론자가 있으므로 그것에 대해 이야기하는 가장 좋은 사람은 아니지만 ...
  • JSF 2 (+ CDI / Weld) : JSF 회의론자들은 Gavin King에 의해 "두 번째 모습을 보도록" 장려 됩니다 . 실제로 JSF 2가 특히 CDI에서 크게 개선되었다고 생각하지만 여전히 새롭습니다 (페이스 백이 없다는 것을 이해하십시오). Java EE 6을 사용하려면 확인하십시오.
  • Wicket : 더 많은 관심을 끌고있는 또 다른 구성 요소 기반 프레임 워크입니다. JSF보다 단순하고 멋진 디자인, 높은 테스트 가능성, HTML 디자이너 친화적 인 등 대부분 좋은 점이 있습니다.
  • 태피스트리 :하지 마십시오 ( 테이프 사용을 왜 중단 했습니까? 참조 ).
  • Struts 2, Spring MVC, Stripes : 액션 기반 프레임 워크. 모두 괜찮고 귀하의 요구를 충족시킬 것입니다 (개인적으로는 스트라이프와 구성 방식에 대한 규칙을 좋아합니다. 스트라이프 대 Struts2 를 참조하십시오 ).
  • GWT, Flex, Grails : 원하는 것이 아닐 수도 있습니다. 정말 Flex와 GWT의 (최신 버전)에 대해 이야기 할 수는 없지만 나는 Grails는이하는 것을 알고 있는 일부 .

실제로 Matt Raible의 프레젠테이션을 살펴볼 것을 제안합니다 . 그는 웹 프레임 워크를 비교하고, 강점과 약점을 보여주고, 사실과 숫자를 모으고, 트렌드를 보여주는 데 큰 역할을했습니다 ...

실제로 이러한 프레젠테이션을 살펴보면 적절한 프레임 워크를 찾는 데 도움이되고 (고유 한 답변은 없지만 제거로 선택을 제한 할 수 있음) 관점이 변경 될 수 있습니다.


좋은 직업, 나는 철회했다 :). +1
Adeel Ansari

자바 웹 f / ws에서 매트의 최근 촬영은 끔찍했다. 내가 스트럿을 기억한다면 실제로 훨씬 더 강력한 f / ws의 동일한 점수를 가졌다. GWT 나 Wicket에 뒤지지 않는 점수에 걸 맞는 스트럿만큼 평범한 제인으로 생각할 수있는 방법은 없습니다.
mP.

3
예, 꽤 많은 사람들이 "매트릭스"나 그 평가에 대한 논리를 좋아하지 않는다는 것을 알고 있습니다. 결국,이 매트릭스와 관련하여 바라는 것은 단순히 웹 프레임 워크를 선택하는 기술을 강조하는 것이 었습니다. 다음 블로그 게시물에서 내 등급 뒤에 논리에 대해 읽을 수 있습니다 raibledesigns.com/rd/entry/how_i_calculated_ratings_for
매트 Raible

JSF, Spring MVC, Stripes, Struts 2, Tapestry 및 Wicket 비교에 대한 Matt Raible의 발표는 실제로 매우 오래된 것입니다.
Nerrve

1
@ iberck, 나는 최근 AngularJS를 실험 해왔다. 솔직히 말해서 과장없이 모든 현재 웹 프레임 워크가 아니라고 생각합니다. 클라이언트 측의 JS 프레임 워크는 REST를 사용하여 서버에서 쉽고 효율적으로 데이터를 검색 할 수 있습니다. 시도해보세요. 세상을 뒤흔들
Muhammad Gelbana

41

나는 Spring 3과 Jquery를 잠시 동안 사용했지만 Play에 대해 듣고 샷을주었습니다. 정말 마음에 듭니다. Play는 PHP와 같은 것과 Spring과 같은 Java 프레임 워크 사이에 아주 적합합니다.

내가 놀이에 대해 가장 좋아하는 것은 :

  • 플레이 응용 프로그램을 처음부터 쉽게 얻을 수 있기 때문에 Spring을 사용하여 화면에 간단한 crud 응용 프로그램을 얻으려면 코딩 및 구성을 수행해야합니다 (Spring 3은 훨씬 쉬워졌습니다).
  • 스프링 보안은 대단하지만 복잡합니다. Play의 보안 모듈은 매우 간단하며 아마도 응용 프로그램의 90 %를 필요로합니다.
  • 서블릿 기반 프레임 워크를 사용하여 전체 재배포 작업을 수행하는 대신 코드를 변경하고 브라우저에서 새로 고침을 수행하여 PHP와 같은 변경 사항을 볼 수 있습니다.
  • 대부분의 경우 오류 메시지가 멋지게 표시되고 암호가 아닙니다. 여전히 오류 처리 작업이 필요합니다
  • Play 플러그인 플러그인은 매우 간단합니다.
  • 객체 지속성은 인 메모리 데이터베이스와 JPA가 프레임 워크와 함께 제공되므로 외부 객체 지속성 도구를 구성하지 않기 때문에 매우 훌륭하게 수행됩니다. 인 메모리 데이터베이스에서 실제 RDBMS로 이동하는 것은 구성 파일의 한 줄 변경입니다.
  • MVC 설정이 잘 완료되었습니다. 도메인 오브젝트를 작성하기 위해 확장 한 모델 클래스는 JPA 엔티티 관리자와 통합됩니다. 그들은 단지 POJO가 아닙니다.
  • URL을 컨트롤러에 매핑하는 것은 간단하고 유연하며 모두 하나의 "라우트"파일에 있습니다.
  • 프로젝트를 만들 때마다 Play는 모든 jar 종속성을 처리하고 Play에는 프로젝트를 식화 (또는 원하는 IDE)하여 원하는 IDE로 직접 가져올 수있는 유틸리티가 있습니다.

내가 싫어하는 것

  • 문서가 아직 완성되지는 않았지만 문서화되지 않은 많은 기능이 여전히 존재합니다.
  • 프레임 워크는 서버이므로 각 응용 프로그램에 포트를 지정해야합니다. 누군가가 가상 호스트 플러그인을 사용하고 있다고 생각하지만 아직 동작하지는 않습니다.
  • 젊고 프로젝트는 훌륭하고 기술은 훌륭하지만 더 많은 개발자가 필요합니다. 나는 그것에 시간을 할애하고 싶습니다, 우리는 볼 수 있습니다.

17

나를위한 최고의 선택은 Wicket 입니다. 마크 업과 자바 코드의 명확한 분리. 구성 요소를 작성하고 사용하기 매우 쉽습니다. 사용하기 쉬운 Ajax, 테스트 가능성. 페이지 / 구성 요소로 바로 디버깅 할 수 있으며 JSF 구현에서 암호 오류 메시지를 얻지 못합니다.)

성능 측면 에서 좋은 비교 개찰구 <-> JSF도 있습니다


4
+1 상속, 다형성 및 구성으로 순수한 OOP 방향은 말할 것도 없습니다. 또한 XML 구성 파일은 무료입니다!
Xavi López

3
사람들이 제안한 프레임 워크가 마음에 들지 않기 때문에 사람들이 여기에 의견을 내리는 것을 평가합니다. Wicket의 답변뿐만 아니라 거의 모든 사람들이 다운 투표권을 갖습니다.
bert

13

나를위한 3 가지 선택은 (알파벳순)입니다.

그들:

  • 좋은 아약스 지원
  • GWT와 같은 응용 프로그램이 아닌 실제 웹 사이트를 만들 수 있습니다.
  • 안정적이고 잘 문서화되어 있으며 널리 사용됩니다.
  • MVC
  • 순수한 자바
  • 미들웨어로서 Spring과의 쉬운 통합

17
JSF가 "실제 웹 사이트 만들기"에 사용될 수 있다고 어떻게 주장 할 수 있을지 모르겠습니다. POST 사용을 강제하는 모든 프레임 워크는 이와 관련하여 즉시 손실됩니다.
Stefan Tilkov

3
JSF로 "실제 웹 사이트"를 개발했으며 아무런 문제없이 사용했습니다. 또한 POST를 사용하면 무언가를 게시 할 때만 강제로 사용됩니다. 항상 간단한 GET 탐색을 자유롭게 사용할 수 있습니다. 이론적으로 리소스를 수정하는 경우 GET을 사용하는 것이 잘못 되었습니까?
Bozho

게다가, 당신은 JSF를 제안하기 위해 파스칼을
하향 조정해야합니다

3
공격은 아니지만 수년 전에 보았던 '물건'목록처럼 들리므로 나는 그것을보고 놀랐습니다. 내 경험상, 대부분은 그 실수에서 벗어나게되었습니다. 나는 당신이 이미 이것에 전문가라면 그들이 훌륭한 선택이 될 것이라고 생각하지만, 전문가가 프로젝트를 떠난 후 인수 해야하는 O & M 프로그래머에게는 걱정이 될 것입니다. 아무도 더 이상 IMO를 배우지 않습니다.
Manius

1
이 주석 줄은 실제로 약간 유쾌합니다. JSF는 물론 웹 사이트에 완벽하게 사용될 수 있으며 GET 및 POST에 대한 일급 지원을 제공합니다. 현재 상황에 가장 적합한 것을 사용하십시오. 실제로 Bozho가 나타내는 것처럼, 리소스를 수정하면 GET을 사용하지 않으면 자유롭게 사용할 수 있습니다.
Arjan Tijms


10

다른 답변과 달리 인기있는 웹 프레임 워크의 단점 (IMHO)을 강조하고 싶습니다.

JSF2- 출시 및 이미 오래되었습니다. 여전히 몇 가지 뉴스 / 기사 / 블로그 게시물 / 경험 만 있습니다. 나는 회의적이다. jsf 2를 완벽하게 지원하는 Richfaces / Icefaces의 다음 주요 릴리스를 계속 기다리고 있습니다. 현재 알파 빌드 만 다운로드 할 수 있습니다.

Struts 2- 스트럿에 여전히 의존하고 있고 대부분의 코드를 리팩토링하려는 경우에만 좋은 것 같습니다. 그렇지 않으면 :하지 마십시오.

GWT- 단일 페이지와 java-> javascript 접근 방식이 마음에 들지 않습니다. 하나의 세션-여러보기 / 창을 쉽게 얻을 수 있는지 확실하지 않습니다. 저에게이 프레임 워크는 대규모 사용자에게 단일 창 리치 인터넷 응용 프로그램에 사용해야합니다.

Wicket- 훌륭한 접근 방법이지만, 조금 장황하고 문서가 너무 적습니다 (액션 북의 좋은 개찰을 제외하고는 1.3에 불과합니다). 또한 저에게는 큰 프로젝트가 부족합니다. 그리고 나는 현재 개찰구의 도로가 어디로 가고 있는지 또는 이미 막 다른 길로 갔는지 알 수 없습니다.

Spring MVC- 아직 시도하지 않았지만이 프레임 워크를 올바르게 사용하려면 클래스 경로에 많은 항아리 (스프링 엉망)를 포함시켜야합니다. 그리고 JSP (대부분의 프로젝트에서)에 의존합니다. 그리고 순수한 MVC 프레임 워크 만 얻게됩니다. 다른 모든 것 (ajax 및 기타)은 구현 / 통합되어야합니다.

Stripes- 작고 훌륭하게 설계된 MVC 프레임 워크이지만 문서화, 커밋 / 커밋, 릴리스, 산업 지원, 메일 링리스트 활동이 너무 적습니다.

또한 내가 당신에게 (그리고 나에게도) 옵션 일 수있는 주요 프레임 워크를 놓친 경우 (나는 의도적으로 태피스트리를 나갔습니다) 궁금합니다.


이것을 처리하는 가장 좋은 방법은 Python 웹 프레임 워크가 수행 한 것과 비슷하다는 것을 알았습니다. 최고에서 선택 및 선택. 예 : Spring + JAX-RS
Adam Gent

GWT에 대한 귀하의 의견이 잘못되었습니다. 하나의 큰 것보다는 많은 개별 페이지를 갖는 것이 매우 쉽습니다. 다른 "액션"을 시작하려면 다른 페이지에 대한 링크를 삽입하십시오.
mP.

또한 여러 창 (또는 탭)에 대해 이야기하고 있습니다. 동일한 세션을 동시에 사용하여 둘 이상의 창을 동시에 사용할 수 있습니까?
MRalwasser

1
+1 왜이 게시물에 2 개의 부정적인 목소리가 있었습니까? 이와 같은 회의적인 의견은 긍정적 인 의견과 마찬가지로 중요합니다 (그렇지 않은 경우). 그리고 이것들은 건설적인 것 같습니다.
Piotr Sobczyk

8

JAX-RS로 큰 성공을 거두었습니다 . 서블릿 및 포틀릿 사양 이외의 JSR 사양 및 여러 구현이있는 유일한 Java Web Framework입니다 (이것은 나쁜 일이 될 수 있음).

Java에서 나쁘고 좋은 점 중 하나는 프레임 워크를 선택하고 일치시킬 수 있다는 것입니다 (파이썬 에도이 기능 / 문제가 있습니다). 모든 계란을 한 바구니에 넣을 필요가 없기 때문에 좋습니다.

일반적인 Java 웹 애플리케이션 스택 레시피는 다음과 같습니다.

자바 스크립트 / 플래시 + 요청 / 응답 처리 + 의존성 주입 + 지속성

자바 스크립트 : JQuery, 프로토 타입, Dojo

요청 / 응답 : Spring MVC, Stripes 및 내가 좋아하는 JAX-RS (Jersey, Apache CXF)

의존성 주입 : Spring, Guice

지속성 : JPA (Hibernate, Google App 스토리지), Hibernate, JDO 등

또한 AspectJ를 사용하여 Java를 "빠르게"줄이는 데 큰 성공을 거두었습니다. Spring의 @Configurable과 AspectJ의 ITD 믹스 인을 사용하면 Rails를 Domain 객체와 같이 얻을 수 있습니다 (이것은 실제로 Roo가하는 일이지만 Roo는 필요하지 않습니다).


4
나는 동의한다. 자체 스택을 설정하는 데 시간이 더 걸리지 만 원하는 것을 정확하게 얻을 수 있습니다. 현재 jQuery, Jersey, Spring 및 JPA2를 사용하고 있습니다. JAX-RS는 응답 내용을 완벽하게 제어 할 수 있기 때문에 훌륭합니다.
Brian DiCasa

6

나는 줄무늬 가 실제로 효과적이고 놀랍도록 가벼움을 발견 했습니다 .... struts 보다 더 가벼운 것을 목표로합니다 . 풀 타임 웹 개발자 인 친구들로부터 JSF가 귀찮게 할 가치가 없다고 들었습니다. 비록 직접적인 경험은 없지만 예제로 뒷받침 할 수는 없습니다 (!).


5

Play와 동일한 원칙을 따르는 RESThub를 살펴보십시오 ! 그러나 Maven 3 / Spring 3 / Jersey / jQuery와 같은 일부 엔터프라이즈 급 프레임 워크 / 도구를 재사용하여 구현됩니다.

RESThub는 풀 스택 툴킷이지만 서버 측 MVC 또는 서블릿 기반 프레임 워크가 없기 때문에 다른 프레임 워크와 비교할 때 매우 파괴적입니다. 대신 JAX-RS (REST) ​​웹 서비스를 사용하는 jQuery UI 기반 GUI와 EmbeddedJ 기반 Javascript 템플릿 시스템을 사용합니다.

서버는 상태가 없으며 HTML5 sessionStorage를 사용하여 세션을 클라이언트 측에 유지합니다. 이 접근 방식은 RIA 및 확장 성을위한 설계입니다.

일부 데모 애플리케이션이 제공됩니다 (건설중인 경우에도).


3

JSF는 훌륭한 프레임 워크이지만 JSF 1.2는 출시 이후 몇 년 동안 비전이 부족했습니다. JSF 2.0은 유망 해 보이며 ajax 지원, Facelets, Annotation 지원 및 기본 규칙 (XML이 적음), 1.2보다 쉬운 구성 요소 빌드와 같은 JSF 1.2에 추가 된 많은 새로운 기능이 있습니다.

DI 지원이 필요한 경우 Spring 과도 잘 통합됩니다.


2

나는 봄 추천을 두 번째로 할 것입니다. 나는 거대한 팬 GWT가 아니며 Java-> Javascript 크로스 컴파일러가 아직 없다고 생각합니다. 서버에서 스프링을 사용하고 클라이언트에서 jQuery를 사용하는 AJAX 앱을 개발 중입니다. 기술적으로 jQuery에 대한 "즉시"지원은 없지만 스프링 MVC AjaxView를 구현하는 것은 간단하지 않으며 약 25 줄의 코드가 필요합니다.


2

공연에 약간 늦었지만 Vaadin 에 대해 언급 해야 합니다 . 프로그래밍은 컴포넌트 기반 접근 방식을 사용하여 Java로만 수행됩니다. 클라이언트-서버 통신은 데이터 전송보다 사용자 상호 작용에 관한 것이며 모든 비즈니스 로직은 서버에 있습니다.


1
vaadin을 사용합니다. 복잡한 응용 프로그램을 만드는 데 좋지 않습니다.
Radan


1

나는 당신이 찾고있는 것이 Jahia에 가까운 것이라고 생각합니다. GWT, 매시업, 미디어 컨텐츠 등을 지원합니다.

http://www.jahia.org/cms/lang/en/home/Jahiapedia/Jahia_Templates http://www.jahia.net/downloads/jahia/jahia6.0.0/readme/index.html


좋아 보인다! 이 오픈 소스 / 기업용 무료입니까? 이것이 널리 사용됩니까?
코스모스

모든 기본 사항이 포함 된 커뮤니티 버전과 일부 추가 사항이 포함 된 엔터프라이즈 버전이 있습니다. 여기를 확인하십시오. jahia.com/jahia/Jahia
Syed M Shaaf



0

총알 이상의 가치가있는 것은 플레이어 기반 RIA 프레임 워크입니다. 전의. Adobe Flex + Java (물론 이것은 "사이트"가 실제로 "사이트"인지 아니면 "애플리케이션"과 같은지에 따라 다소 연결될 수 있습니다. Flex에서 블로그 사이트를 작성하지 않을 것입니다.)

아약스,

AJAX-as-a-buzzword 의미에서 Flex는 일반적으로 AMF ( AJAX 앱에서 사용하는 프로토콜 보다 효율적인 이진 프로토콜)를 사용하지만 Flex를 사용하여 AJAX 작업을 엄격하게 수행 할 수도 있습니다. 따라서 Flex는 AJAX를 지원하지만 "AJAX보다 낫다"도 지원합니다.

리치 미디어 콘텐츠, 매시업,

Flex가 Flash '가상 머신'플랫폼에서 실행되므로 추가 할 필요가 거의 없다고 생각합니다.

템플릿 기반 레이아웃

이것이 정확히 무엇인지 확실하지 않지만 Flex mxml처럼 들립니다.

확인,

물론 지원하기를 원한다면 사용자 지정 작업을하기로 결정할 수도 있습니다. 좋은 점은 원하는만큼 정교하게 만들 수 있다는 것입니다.

최대 HTML / Java 코드 분리

Flex / Silverlight / JavaFX와 같은 '가상 머신'개발 방식을 사용하면 더 이상 분리 할 수 ​​없습니다. 이것은 단지 프리젠 테이션 코드는 서버 측 로직 및 데이터 액세스 계층과 분리 할 수 있도록하지 않습니다 - 그것은 보장 그들이 분리하고있다. 개발 환경을 '가상화'하면 브라우저 간 호환성, 일관된 대상 플랫폼, 새로운 브라우저 또는 새로운 브라우저 릴리스에 대한 걱정없이 애플리케이션 깨짐, 자바와 같은 디버깅 기능 최고,보다 전문적이고 인상적인 최종 제품 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.