Объясните: Как Java работает как веб-приложение?

Хорошо, я знаю, что это неопределенный вопрос, и я ожидаю неопределенного/основного ответа.

Я хорошо разбираюсь в PHP MVC-фреймах и как работает процесс работы с страницами. Я очень заинтересован в изучении Java, и я считаю, что единственный способ научиться этому - это сделать. Однако после чтения страницы после страницы после страницы она становится более запутанной, когда я читаю.

Я запускаюсь в GWT (front end), Hibernate (соединение ORM?), Spring Архитектура, Spring Roo (что это?), JBoss (sendlet), JPA (ORM), POJO (a стиль использования обычных java-объектов с orm?), Maven?

Мой основной вопрос: как все это сочетается? Мне нравится идея использования фреймворка, потому что он хорошо работал в прошлом с PHP. Как использовать эту функциональность с помощью java? Предположим, я хотел создать веб-приложение с реляционным хранилищем данных. Как проверить подлинность Java, инициировать сеанс и обслуживать страницы с динамическим контентом? Каков процесс?

При ответе, пожалуйста, не говорите "придерживайтесь того, что вы знаете" (как я видел на других страницах), потому что меня очень интересует Java, и я пытаюсь учиться.

Ответы

Ответ 1

Я полностью вас слышу - слишком много акронимов поддерживалось по мере развития Java EE.

Я попытаюсь привести объяснение Java - это язык Java EE (Java Enterprise Edition) - это общий термин, используемый для инкапсуляции всех технологий Java, которые помогают создавать корпоративное/веб-приложение с Java

Итак, типичное веб-приложение с Java выглядит следующим образом:

Фронтальный конец

  • Используйте JSP или JSF для обработки и обработки на стороне сервера (JSP и JSF предлагать возможность определять свой пользовательский интерфейс с использованием тегов на основе HTML и сервера, которые легко связываться с вашей Java Beans). Однако они имеют тенденцию смешивать пользовательский интерфейс с бэкэнд, если он не реализован правильно
  • вы также можете использовать простой HTML и любые инструментальные средства на стороне клиента для рендеринга (такие как jquery, dojo, extjs или flex) и извлекать данные с сервера Java EE.
  • вы можете даже смешивать два (использовать клиентскую инфраструктуру в JSP для достижения лучшего из них) или использовать набор инструментов, такой как GWT, который предлагает богатство на стороне клиента с помощью javascript с API Java и простоту доступа к вашему java beans

Средний уровень

  • Java Servlets предлагают базу для всей обработки на стороне сервера с помощью Java EE (сервлеты предлагают сохранение сеанса, обработку запросов HTTP, обработку ответа) и обычно выгружают бизнес-обработку модели bean, которая может быть POJO или spring bean. Сервлеты - это программы Java, которые вы пишете и выполняете в так называемом контейнере Java EE. Популярные контейнеры - tomcat, IBM websphere, BEA Weblogic

Чтобы помочь реализовать хорошую архитектуру MVC, на вершине Servlets есть несколько фреймворков и инструментов:

  • Struts2 и spring MVC являются примерами таких фреймворков
  • Чтобы упростить реализацию веб-сервисов, помощь Restlet/Jersey с помощью веб-сервисов на основе REST, поддержка JAX-WS/APache Axis с использованием веб-служб на основе SOAP.

Интеграция с базой данных/постоянным хранилищем

  • Вы можете использовать JDBC в своей POJO или другой модели bean для доступа к БД с использованием Java.
  • Или поочередно используйте одну из фреймворков, таких как Hibernate, чтобы упростить взаимодействие с бэкэндом базы данных

Приложение Sun petstore - хорошее место, чтобы начать изучать, как фигуры подходят друг другу.

http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eedocs-419425.html#7522-petstore-1.1.2-oth-JPR

Построение и развертывание

  • Ant и Maven - это инструменты, используемые для создания вашего приложения и управления зависимостями.
  • приложение упаковывается как WAR или EAR файл и может быть удалено в любой контейнер Java EE для его развертывания. После его развертывания доступ к нему можно получить с помощью URL
  • Такие инструменты, как Eclipse, Netbeans, Oracle JDeveloper предлагают интегрированные среды разработки для локального развертывания и тестирования.

Хорошей частью Java EE является то, что вы можете выбирать компоненты, которые хотите использовать для создания веб-приложения.

Ответ 2

Проблема Java заключается в том, что она довольно старая и есть TONS фреймворков и пакетов, которые выполняют аналогичные действия, как и другие пакеты. Однако в самом ядре есть Servlet, который указывает, как Java ведет себя как сервер по протоколу HTTP.

С этим базовым строительным блоком существует множество веб-фреймворков, таких как Struts, и Spring MVC, которые создают уровни функциональности, используя множество хороших шаблонов разработки OO, таких как Fiters, Delegates, Factoryories, MVC и т.д. чтобы разработчик мог собрать приложение, которое принимает веб-запросы в качестве входных данных и возвращает веб-ответ в качестве вывода.

Эти структуры часто основываются на других инфраструктурах или пакетах, чтобы предоставить разработчикам приложений больше возможностей на разных уровнях приложения. Это включает в себя такие вещи, как ORM (например, Hibernate), чтобы разговаривать с реляционными базами данных или просматривать структуры компоновки, такие как Tiles или Velocity, чтобы помочь собрать HTML-страницу в качестве части ответа.

Есть много других сокращений и инструментов и слоев, которые создаются вокруг веб-фреймворков, но в сущности, это всего лишь инструменты программирования, которые имеют встроенную полезную функциональность и просто нужно использовать.

Если вы ищете более упакованную структуру разработки веб-приложений, которая является более сплоченной и не делает вас такими же потерянными, вы можете взглянуть на Grails. Он находится в Groovy, но он очень близок к Java с точки зрения языка и фактически основывается на множестве других инструментов, которые вы слышали.

Сам Grails основывается на Spring и Spring MVC, а также Hibernate, поэтому он использует те же технологии, что и другие более чистые Java-фреймворки, но он абстрагирует уродливые подробности, поэтому вам не нужно беспокоиться о них, если вы этого не хотите. Затем вы можете объединить дополнительные функции, такие как аутентификация/безопасность, через plugins. Если вы хорошо разбираетесь в основанных на PHP MVC-инфраструктурах и как они работают с точки зрения архитектуры, вы будете чувствовать себя как дома в аналогичной среде MVC, например, Grails или Spring MVC. Руководство пользователя Grails является отличным местом для start, а остальная часть documentation тоже хороша.

Если вы новичок в языке Java, я бы настоятельно предложил сделать несколько небольших приложений (а не веб-приложений, просто простых), чтобы изучить язык и ознакомиться с тем, как все работает. Java очень отличается от PHP, поскольку PHP объединяет множество базовых функциональных возможностей в язык, тогда как Java имеет довольно разреженный язык с большей частью широко используемой функциональности, поступающей из библиотек.

После того, как вы хорошо понимаете язык Java, я бы сразу перешел к структуре Grails, и я сначала пропустил все детали сервлетов и ORM и Hibernate и т.д., потому что вам не нужно знать все это, и есть так много, что он может мешать реально понять вещи.

Затем, как только вы начнете создавать приложение с Grails, вы постепенно получите более глубокое понимание технологии, которую использует Grails, чтобы делать более сложные и мощные вещи. Постепенно вы проделаете свой путь в Spring и Hibernate и создадите понимание того, как вещи собраны под обложками, но вы можете делать реальные вещи быстрее, так как вам не нужно все это знать с самого начала и может быстро сделать веб-приложения в Grails просто работать, особенно с пониманием шаблона архитектуры MVC в отношении приложения, отвечающего на веб-запрос.

Ответ 3

Вау, это не только открытый вопрос, но он может содержать страницы и страницы ответов. Я работал в php ~ 7 лет назад без рамки, поэтому я попытаюсь указать вам некоторые начальные направления и сравнить мой опыт (который устарел и без рамки!)

Вам нужен сервер приложений, как ваш сервер Apache для вашего веб-приложения Java, например Tomcat, Jboss или Glassfish. Эти серверы обрабатывают динамический контент.

В верхней части сервера у вас есть веб-фреймворки, которые вы упоминали GWT, Spring и Spring Roo. Spring Roo похож на Rails, но на Java. GWT изо всех сил и напишет ваш код html/javascript на основе вашего Java-кода.

В Spring Вы можете определить объекты, которые будут использоваться в ваших формах, а затем, когда они будут отправлены, весь объект будет передан обратно, чтобы было меньше работы. Я помню дни получения большого количества $_POST [], и я благодарен, что не должен этого делать при использовании spring. Существует Spring Безопасность, которую вы можете использовать для auth.

Веб-фреймворки настроены для подключения к базе данных, а затем есть абстракция базы данных ORM, Hibernate. В PHP я использовал EZSQL для абстракции, которая не содержала почти количества функций Hibernate. Hibernate имеет крутую кривую обучения, но стоит учиться.

Для динамического графического интерфейса вы, вероятно, захотите изучить JSP, но может заинтересоваться изучением JSF.

Если бы я был вами, я бы выбрал сервер приложений, возможно, tomcat, а затем веб-фреймворк, с которым я мог бы поиграть, лично я бы пошел с spring. Структура, вероятно, будет иметь примеры динамического GUI, поэтому вы получите jsp/jsf. Затем, возможно, добавьте ORM и инструмент сборки для внешней сборки из вашей среды IDE, например Maven, Ant или Gradle.

Ответ 4

Первое, что я хотел бы предложить вам начать, учитывая знание протокола http, - это технология JSP. Хотя, вероятно, вы, вероятно, будете использовать некоторую инфраструктуру, например JSF2, важно начать с JSP, чтобы хорошо понимать технологию и как ее использовать для обработки запросов и ответов (это, конечно, мое скромное мнение).

Как только вы знакомы с JSP и, скажем, JSF 2.0 (вы можете найти множество документов по этой теме), следующим шагом будет попытка установить соединение с источником данных. В технологии Java EE существует спецификация JPA (Java Persistence API). JPA - это просто спецификация ORM (что, грубо говоря, отображение модели java объекта с набором таблиц DB)

После того, как ваше веб-приложение работает с некоторыми базовыми страницами и некоторые операции с БД, вы можете обеспечить безопасность своего приложения, внедряя некоторые механизмы безопасности.

этот является очень хорошей ссылкой и отправной точкой для всех этих тем и многое другое. Это длинный путь, и вам потребуется некоторое время. Но, поверьте, это того стоит!

Удачи!

Ответ 5

Есть несколько очень зрелых java-библиотек, каждая из которых нацелена на очень небольшую потребность в веб-приложении. Это означает, что многим учебникам по этой теме придется выбирать библиотеки для каждой потребности. Для кого-то, только начинающего с вашей позиции, это, вероятно, отстой.

Наивно, тогда я искал "java full stack framework" и нашел: Полная структура стека для Java

Преимущество полной структуры стека заключается в том, что вам не нужно выбирать каждый компонент. Структура имеет сильные (возможно, жесткие) мнения о том, как выполняется ORM, как делается шаблон, как отображаются URL-адреса для функций или действий и т.д.

Что касается вашего списка технологий и сокращений:

GWT - структура из google, которая фокусируется на интерфейсе. Плохо сказано, напишите свои функциональные возможности переднего плана в Java и волшебным образом преобразитесь в javascript.

Hibernate (соединение ORM?) - yep, хранить и загружать объекты в вашем приложении.

Spring Архитектура - Spring довольно близка к полнотекстовой структуре, но у нее не так много жестких мнений о вещах. Вы можете поменять шаблоны двигателей, поменять ORM и т.д. Неплохая структура. Возможно, вы захотите просто следовать учебнику по Spring (см. Ниже на Roo) и использовать компоненты, предложенные в учебнике. Просто знайте, что вы можете найти что-то другое позже, которое заполняет конкретную нишу.

Spring Roo (что это?) - Spring Roo принимает Spring и становится самоуверенным (используйте то, что мы говорим). Это позволяет уменьшить количество кода с вашей стороны, поскольку он обеспечивает код, который объединяет различные компоненты. Он все еще позволяет довольно гибко, когда вы хотите что-то изменить. Бонус, он поставляется с хорошим учебником.

JBoss (sendlet) - Обычно я думаю о JBoss как о контейнере приложений. Поскольку спецификация Java EE немного сложнее, чем простой CGI - там нужно много всего, что нужно настроить веб-сервером (загрузка классов, загрузка файлов конфигурации, соединение crap вместе) - JBoss делает это. Альтернативами являются Tomcat или Jetty.

JPA (ORM). Да, это общий набор интерфейсов, который могут реализовать различные поставщики сериализации. Это может быть база данных, это может быть что-то другое. Но идея состоит в том, что ваш код для хранения и извлечения объектов будет выглядеть одинаково.

POJO (стиль использования обычных java-объектов с orm?) - Возможно, в контексте. "Обычные старые объекты Java" хороши для любой библиотеки. Иногда структура может потребовать, чтобы вы наследовали свои классы из определенного класса, например Model или Controller, для правильной работы (также HTTPServlet). Это плохо, потому что он ограничивает ваш собственный иерархический дизайн классов и делает ваш собственный код менее гибким. Следовательно, вещи, которые работают с POJO, считаются лучшими.

Maven - Maven - это инструмент, который помогает управлять зависимостями. Без него у java есть своя черта DLL. Библиотека A зависит от версии 1.1 библиотеки B, но библиотека C зависит от версии 1.5 библиотеки B. Ох, хард, время для чтения учебника по загрузчикам классов. Не беспокойтесь слишком много, хотя любой учебник по java-приложениям, скорее всего, скажет вам, что вам нужно для загрузки и использования.

Ответ 6

Я предлагаю вам эти ключевые слова Google и искать некоторые книги и учебные пособия.

Maven является инструментом для управления вашими проектами Java и артефактами (JAR, WARs и т.д.). Сначала я начал изучать Maven, чтобы у вас была основа для создания ваших проектов Java. Он также обрабатывает ваше управление зависимостями: вы просто указываете, какие JAR файлы вам нужны в вашем приложении, а Maven загрузит их для вас.

JPA (Java Persistence API) обрабатывает объектно-реляционное сопоставление ваших объектов. Вы можете писать POJO (простые старые Java-объекты) и сопоставлять их с таблицами базы данных.

Hibernate - поставщик JPA (т.е. реализация JPA). Обычно вам не нужно иметь дело с Hibernate, поэтому большую часть времени вы можете напрямую использовать JPA. Вы просто настраиваете поставщика JPA в файле конфигурации persistence.xml.

CDI (Инъекция контекста и зависимостей) см. описание. CDI "прокладывает" компоненты вашего приложения вместе.

Springframework запускается как платформа, предлагающая возможности Injection Dependency, но сегодня это намного больше. Вам может быть интересен модуль WebMVC spring. Вы можете писать контроллеры и представления (например, с помощью JSP).

Servlet API Сервлет действует как маленький сервер, обрабатывает HTTP-запрос и генерирует ответ. Вы можете написать свои собственные сервлеты или использовать веб-фреймворк, чтобы выполнить эту работу, например spring DispatcherServlet или Java Server Faces или любую другую инфраструктуру.

JSP - это технология написания шаблонов для ваших HTML файлов. Файлы JSP скомпилируются в классы Java и могут содержать HTML-код, JSP-специфический XML-код и Java-код. Пример:

<ul>
    <c:forEach items="${countries}" var="country">
        <li>${country}</li>
    </c:forEach>
</ul>

отображает список стран, где ${countries} может быть коллекцией объектов страны (или строк в этом случае).

JSF (Java Server Faces) - еще одна структура для создания веб-приложений, использующая JSP и/или XHTML для определения представлений и поддержки beans для внутренней части. Я бы начал учиться с JSP вместо JSF, это легче изучить.

Большинство фреймворков являются частью портфеля стандартов JavaEE. Для работы с CDI вам нужен либо сервер приложений (например, JBoss AS), либо, по крайней мере, сервер с контейнером сервлетов (например, Apache Tomcat или Jetty) в сочетании с Spring.

Spring и Hibernate не являются стандартными, но в настоящее время они реализуют многие стандартные API.

** EDIT: ** вы также можете узнать об Аннотации в Java-коде. Они существуют со времен Java 5 и широко используются в качестве альтернативы конфигурации на основе XML.


Итак, мое предложение состоит в том, что вы начинаете изучать Maven (не обязательно, вы также можете управлять своим проектом вручную), затем spring и JSP, чтобы иметь возможность создать простое веб-приложение, а затем JPA/Hibernate, чтобы сделать ваши данные стойкий.

На мой взгляд, обучение spring намного проще, чем изучение всех API JavaEE, поскольку spring неплохо документально.

Ответ 7

Одна из приятных вещей в GWT заключается в том, что вы правильно настроите свой клиентский код на Java со всеми его преимуществами, и если у вас есть код сервера, который также может быть на Java, и вы можете поделиться некоторыми из них исходный код, даже если front-end заканчивается как JavaScript.

Ответ 8

Чтобы создать базовое веб-приложение Java, просмотрите этот учебник, так как он объяснит основные основополагающие технологии со стандартной платформой Java EE и как развить с ними что-то реальное.

http://netbeans.org/kb/docs/javaee/ecommerce/intro.html

Он продемонстрирует стандартные веб-технологии Java, такие как EJB, сервлеты, JSP, JPA и способы использования Netbeans для вашей среды IDE.

Большинство новичков очень поражены тысячами различных технологий и платформ с инфраструктурой Java EE. Java обслуживает очень "открытый источник" типа сообщества, а это означает, что у вас есть много разных вариантов и дорожных карт о том, как вы можете создавать приложения. Это очень отличается от того, что говорят о мире .NET, где все довольно просто и есть очень чистый путь резака для печенья.

Как только вы узнаете об этих основополагающих принципах, пройдя учебник, вы поймете, что такое инфраструктура Java EE. После того, как вы поймете эти основы, вы можете начать узнавать о Maven или Spring и о том, как эти технологии могут помочь вам в создании лучших приложений, и вы сможете принимать более обоснованные решения.

GWT - инструменты веб-интерфейса. Некоторые конкурирующие технологии: Spring, JSF, Wicket

Hibernate - сопоставление ORM для баз данных. Конкурирующая технология: JPA

Spring Архитектура - веб-платформа. Конкурирующая технология: JSF, Wicket, GWT

Spring Roo - стиль стиля MVC Spring.

JBoss - хостинг приложений. Конкурирующие технологии: Glassfish, Tomcat

JPA - сопоставление ORM для баз данных. Конкурирующая технология: Hibernate

POJO - Обычный объект Java. Просто простой объект.

Maven - Maven - это способ управления библиотеками или зависимостями, которые использует ваш проект. Там центральный сервер, на котором размещаются многие из этих библиотек, и если вам когда-либо понадобится импортировать новый, который будет использоваться в вашем проекте, он будет таким же простым, как поиск по серверу, а затем скопировать и вставить параметры конфигурации, которые они предоставляют вам в документе XML называемый POM файлом или pom.xml

Ответ 9

Ответ на Vijay выше в значительной степени. Я расскажу о нескольких моментах.

Большинство "fameworks", которые вы упоминаете, spring, roo (это всего лишь способ работы с spring), gwt, struts и т.д., работают над "Java EE". Java EE - термин Sun (теперь оракула) для "стандартного" способа работы с веб-приложениями. Java EE также включает в себя гораздо больше корпоративных продуктов, таких как EJB, JMS, JMX, которые вам действительно не нужно беспокоиться, если вы не делаете очень высокого уровня.

JSP - это часть, которая будет вам наиболее знакома, исходя из PHP, это способ встраивания кода внутри HTML-страницы.

Сервлеты - это средний уровень, где создаются соединения с базой данных и происходит логика приложения. Как оказалось, JSP преобразуются в сервлеты во время компиляции.

Все объекты Java EE запускаются внутри "контейнера сервлетов" или "сервера приложений". Это большая разница между java и php. Ваш выбор здесь, как правило, Tomcat, JBoss или Jetty.

Maven - это система сборки, которая помогает вам управлять сторонними файлами jar (библиотеки) и компилирует и запускает ваши тестовые коды. У него есть плагины для развертывания вашего кода в tomcat/jboss/jetty.

POJO означает "Обычный старый объект Java". Большинство современных фреймворков пытаются защитить вас от сложностей того, что происходит под капотом, и позволить вам работать с "POJOS". Это вступает в игру при работе с чем-то вроде spring или спящего режима. Вы также можете увидеть выражение "java bean", которое является стандартным способом определения "pojos", который только устанавливает соглашение о том, как назвать методы getter/setter и конструкторы.

Я бы посоветовал получить книгу о начале работы с JSP/Servlets и начать там.