Какой наилучший способ создать модульное веб-приложение java [закрыто]
-
09-06-2019 - |
Вопрос
Я создаю небольшой веб-сайт на Java (Spring MVC с представлениями JSP) и пытаюсь найти наилучшее решение для создания и включения нескольких повторно используемых модулей (например, "последние новости", "предстоящие события" ...).
Итак, вопрос заключается в следующем:Портлеты, плитки или какая-то другая технология?
Решение
Если вы используете 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";
}
}
Здесь служба новостей будет автоматически введена в контроллер.Метод view добавляет в модель объект List, который будет доступен как ${newsList} в JSP.Spring будет искать представление с именем news.jsp на основе возвращаемого значения метода.RequestMapping сообщает 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>
Если вы хотите просто встроить портлеты в свое существующее приложение, вы можете создать контейнер портлетов, например Экзо, Солнце, или Апач.Если вы хотите создать свое приложение в виде набора портлетов, возможно, вам захочется рассмотреть полномасштабное портальное решение, такое как Портал Liferay.
Другие советы
Плитка может причинять боль.Значительное улучшение по сравнению с тем, что было раньше (т.е.ничего), но скорее ограничивающий.
Калитка возможно, это больше то, что вы ищете, если только вы не остановились на 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 web app framework с акцентом на простое создание повторно используемых компонентов.
Я использовал sitemesh, и он хорош для обертывания набора страниц стандартными верхними и нижними колонтитулами, но Tapestry лучше подходит для создания компонентов, которые используются на многих страницах, возможно, много раз на странице.Компоненты Tapestry могут принимать другие компоненты в качестве параметров, что позволяет переносить стиль Sitemesh.