2008-09-16 5 views
6

Я строю небольшой веб-сайт в Java (Spring MVC с представлениями JSP), и я пытаюсь найти лучшее решение для создания и в том числе нескольких модулей многократного использования (например, «последние новости», "Предстоящие События"...).Каков наилучший способ создания модульного веб-приложения Java

Итак, вопрос: портлеты, плитки или какая-либо другая технология?

ответ

4

Если вы используете Spring MVC, то я бы рекомендовал использовать портлет. Весной портлеты - это просто облегченные контроллеры, поскольку они отвечают только за фрагмент всей страницы и очень просты в написании. Если вы используете 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 добавляет объект List к модели, который будет доступен как $ {newsList} в JSP. Spring будет искать представление с именем news.jsp на основе возвращаемого значения метода. Команда RequestMapping сообщает Spring, что этот contoller предназначен для режима VIEW портлета.

Конфигурации 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> 

Если вы хотите, чтобы просто вставить портлет в существующих приложениях, то вы можете связать портлет контейнер, такие как eXo , Sun, или Apache. Если вы хотите создать приложение в виде набора портлетов, вам может потребоваться рассмотреть полномасштабное решение портала, например Liferay Portal.

+0

thnx для полезного ответа, есть ли у вас опыт работы с портлетами MVC Spring? Некоторые учебники, руководства? Может быть, может порекомендовать сервер портала? – moriarty 2008-09-16 14:12:23

2

Плитки могут быть болью. Огромное улучшение по сравнению с тем, что было раньше (т. Е. Ничего), а скорее ограничение.

Wicket может быть больше того, что вы ищете, если только вы не остановились на JSP.

+0

Можете ли вы прокомментировать, почему «плитки могут быть болью»? – 2009-02-03 18:04:15

0

Tapestry - это веб-приложение для веб-приложений Java с акцентом на простое создание многоразовых компонентов.

Я использовал sitemesh, и это полезно для упаковки набора страниц в стандартные верхние и нижние колонтитулы, но Tapestry лучше для создания компонентов, которые используются на многих страницах, возможно, много раз на странице. Компоненты гобеленов могут принимать другие компоненты в качестве параметров, что позволяет обертывать стиль Sitemesh.

+0

Хм, Гобелен выглядит многообещающим ... они имеют хорошие скринкасты ... http://tapestry.apache.org/tapestry5/screencast.html Будет ли проверить это, Thnx много. – moriarty 2008-09-16 13:01:30

1

Я большой поклонник 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); 
    } 
} 
0

Я не уверен на 100%, что означает «многоразовые компоненты» в этом контексте, но если вы хотите, чтобы на каждой странице отображались определенные общие элементы, такие как баннер, нижний колонтитул, навигационные ссылки и т. Д., Тогда смотрите не дальше SiteMesh. Моя команда успешно использовала его в нескольких интернационализированных веб-приложениях.

2

Я не рекомендую использовать портлеты, если ваше приложение действительно не является web portal.

Если вы просто хотите, чтобы «многоразовые компоненты» использовали JSP tagfiles, они были мертвыми, но очень мощными, поскольку они такие же, как обычные JSP.

У меня был опыт использования плиток, и сложность, связанная с этим, просто не стоит.

1

У меня был большой опыт работы с портлетами в сочетании с Ajax JSF (IceFaces) и Liferay Portal, и я бы не рекомендовал их никому - все хорошо выглядит при чтении учебника и настоящего ада на практике. Конечно, я думаю, что они намного удобнее и легки с Spring MVC и JSP, но в любом случае портлеты не поддерживают технологию imho.

Смежные вопросы