모듈식 Java 웹 애플리케이션을 만드는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/71692

  •  09-06-2019
  •  | 
  •  

문제

저는 Java(JSP 보기가 포함된 Spring MVC)로 작은 웹 사이트를 구축 중이며 몇 가지 재사용 가능한 모듈(예: "최신 뉴스", "예정된 이벤트"...)을 만들고 포함하기 위한 최상의 솔루션을 찾으려고 노력하고 있습니다.

질문은 다음과 같습니다.포틀릿, 타일 또는 기타 기술이 있습니까?

도움이 되었습니까?

해결책

Spring MVC를 사용하고 있다면 포틀릿을 사용하는 것이 좋습니다.Spring에서 포틀릿은 전체 페이지의 일부만 담당하고 작성하기가 매우 쉽기 때문에 가벼운 컨트롤러입니다.Spring 2.5를 사용하는 경우 새로운 주석 지원의 모든 이점을 누릴 수 있으며 종속성 주입 및 Spring 사용의 기타 이점을 통해 전체 Spring 애플리케이션에 잘 들어맞습니다.

포틀릿 컨트롤러는 서블릿 컨트롤러와 거의 동일합니다. 다음은 간단한 예입니다.

@RequestMapping("VIEW")
@Controller
public class NewsPortlet {

    private NewsService newsService;

    @Autowired
    public NewsPortlet(NewsService newsService) {
        this.newsService = newsService;
    }

    @RequestMapping(method = RequestMethod.GET)
    public String view(Model model) {
        model.addAttribute(newsService.getLatests(10));
        return "news";        
    }
}

여기에서는 NewsService가 컨트롤러에 자동으로 주입됩니다.view 메소드는 JSP에서 ${newsList}로 사용할 수 있는 List 객체를 모델에 추가합니다.Spring은 메소드의 반환 값을 기반으로 news.jsp라는 뷰를 찾습니다.RequestMapping은 이 컨트롤러가 포틀릿의 VIEW 모드용임을 Spring에 알려줍니다.

XML 구성은 뷰와 컨트롤러가 있는 위치만 지정하면 됩니다.

<!-- look for controllers and services here -->
<context:component-scan base-package="com.example.news"/>

<!-- look for views here -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/news/"/>
    <property name="suffix" value=".jsp"/>
</bean>

기존 애플리케이션에 단순히 포틀릿을 포함시키려는 경우 다음과 같은 포틀릿 컨테이너를 번들로 묶을 수 있습니다. 엑소, , 또는 아파치.애플리케이션을 포틀릿 세트로 구축하려는 경우 다음과 같은 완전한 포털 솔루션을 고려할 수 있습니다. 라이프레이 포털.

다른 팁

타일은 고통스러울 수 있습니다.이전에 비해 크게 개선되었습니다(예:아무것도) 오히려 제한적입니다.

창구 JSP에 정착하지 않았다면 찾고 있는 것이 더 많을 수도 있습니다.

귀하의 애플리케이션이 실제로 웹 포털.

"재사용 가능한 구성 요소"를 원한다면 사용하십시오. JSP 태그 파일, 이는 일반 JSP와 동일하기 때문에 매우 단순하지만 매우 강력합니다.

나는 타일을 사용해 본 경험이 있으며 관련된 복잡성은 그만한 가치가 없습니다.

나는 ~의 열렬한 팬이다 GWT.이를 통해 구성 요소를 일반 Java 클래스로 작성한 다음 원하는 대로 페이지에 삽입할 수 있습니다.모든 것이 결국 Javascript로 컴파일됩니다.

예는 다음과 같습니다.

public class MyApplication implements EntryPoint, HistoryListener
{
    static final String INIT_STATE = "status";

    /**
     * This is the entry point method.  Instantiates the home page.
     */
    public void onModuleLoad ()
    {
        RootPanel.get ().setStyleName ("root");
        initHistorySupport ();
    }

    private void initHistorySupport ()
    {
        History.addHistoryListener (this);

        // check to see if there are any tokens passed at startup via the browser’s URI
        String token = History.getToken ();
        if (token.length () == 0)
        {
            onHistoryChanged (INIT_STATE);
        }
        else
        {
            onHistoryChanged (token);
        }
    }


    /**
     * Fired when the user clicks the browser's 'back' or 'forward' buttons.
     *
     * @param historyToken the token representing the current history state
     */
    public void onHistoryChanged (String historyToken)
    {
        RootPanel.get ().clear ();
        Page page;
        if (Page1.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page1 ();
        }
        else if (Page2.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page2 ();
        }
        else if (Page3.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page3 ();
        }
        RootPanel.get ().add (page);
    }
}

저는 Ajax JSF(IceFaces) 및 Liferay Portal과 관련된 포틀릿에 대한 많은 경험을 갖고 있으며 누구에게도 추천하지 않습니다. 튜토리얼을 읽을 때 모든 것이 좋아 보이고 실제로는 지옥입니다.물론 Spring MVC와 JSP를 사용하면 훨씬 더 편리하고 가벼워진다고 생각하지만 어쨌든 포틀릿은 기술을 잘 지원하지 않습니다.

이 맥락에서 "재사용 가능한 구성 요소"가 무엇을 의미하는지 100% 확신할 수는 없지만 배너, 바닥글, 탐색 링크 등과 같은 특정 공통 요소를 모든 페이지에 표시하려는 경우 다음을 살펴보십시오. 사이트메시.우리 팀은 몇 가지 국제화된 웹 애플리케이션에서 이를 성공적으로 사용했습니다.

태피스트리 재사용 가능한 구성 요소를 쉽게 만드는 데 중점을 둔 Java 웹 앱 프레임워크입니다.

저는 sitemesh를 사용했는데 표준 머리글과 바닥글로 페이지 집합을 래핑하는 데는 좋지만 여러 페이지에서, 페이지당 여러 번 사용되는 구성 요소를 만드는 데는 Tapestry가 더 좋습니다.Tapestry 구성 요소는 다른 구성 요소를 매개 변수로 사용하여 Sitemesh 스타일 래핑을 허용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top