Вы наверняка слышали о том, что сайты можно делать на PHP, Python и довольно не плохие сайты. Но как же Java? Да на java тоже можно делать очень даже офигенные сайты, а если быть точней то используют java для разработки крупных ресурсов. В этом уроке я покажу как создать простое web-приложение на java.
Что нам потребуется для создания web-приложения?
1) Любой сервер приложений в нашем случае это будет Tomcat 7.0.
2) Верная и надежная Intellij IDEA.
3) Желание создать своё первое WEB-приложение.
Шаг 1
Создаем обычный Maven проект, назовем его MyFirstWebProject. Структура проекта следующая:
Шаг 2
Теперь разберем что такое Servlet? Servlet – это Java-интерфейс, реализация которого расширяет функциональные возможности сервера. Servlet взаимодействует с клиентами посредством принципа запрос-ответ за частую это запросы GET, POST по протоколу HTTP/HTTPS. Для создания сервлета нам нужно подключить зависимости в Maven.
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <version>5</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency>
А также не забудьте указать:
<packaging>war</packaging>
это говорит Maven-у что собирать надо в WEB проект, по умолчанию он собирает jar.
Теперь нужно добавить 2 плагина который позволяет откомпилировать и собрать проект в war архив.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin>
Полный листинг pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>MyFirstWebProject</groupId> <artifactId>MyFirstWebProject</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <version>5</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
Теперь создадим класс MyServlet который унаследуем от HttpServlet.
@WebServlet("/s") public class MyServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { super.doPost(request, response); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("Hello Word"); } }
Как вы видите тут есть два метода doPost и doGet, как я уже упоминал сервлеты взаимодействуют с клиентом по средством запрос-ответ, так вот в основном это GET и POST. Внимание! Главное не допускать такую ошибку, что всего есть два метода GET/POST их на самом деле 9, это OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT, PATCH. И так рассмотрим эти методы методы: Как вы уже поняли метод doPost принимает и отправляет посредством запроса POST, doGet по средством запроса GET. У обоих методов есть входящие параметры типы которых – HttpServletRequest и HttpServletResponse. HttpServletRequest request
– это запрос со стороны клиента; HttpServletResponse response
– это ответ со стороны сервера.
Аннотация @WebServlet(“/s”) указывает на то что данный сервлет будет доступен по адресу <URL>/s.
Шаг 3
Не забываем, что метод GET срабатывает когда мы просто заходим по URL на страничку, а пост чаще всего используется при передачи данных с формы, но при условии что метод передачи данных формы указан POST. Создадим “Hello Word”:
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("Hello Word"); }
response.setContentType("text/html")
– в этой строке мы говорим про то что отображать мы будем страничку как html. PrintWriter out = response.getWriter()
– тут мы создаем врайтер который поможет нам осуществить ответ с сервера. out.println("Hello Word")
– ну и отправляем ответ с сервера клиенту.
Шаг 4
Теперь соберите проект в Maven:
Шаг 5
Установка и настройка Tomcat 7.0.
1. Идем сюда http://tomcat.apache.org/download-70.cgi и качаем Tomcat 7.0.
3. Настроить Intellij IDEA что бы деплоить приложение на сервер с нее.
В Startup Page – указываем стартовую страничку загрузки в нашем случае это localhost:8080/s (где s это наш про аннотированиый сервлет).
Дальше заходим во вкладкуDeployment:
И выбираем ваш собранный проект, лежит он в корне проекта в папке target/<name>.war
4. Запускаем:
Шаг 6
Завяжем на наш сервлет jsp страничку.
Для этого мы должны создать в папке src/main/webapp нашу страничку, в нашем случае это index.jsp.
И теперь с помощью метода GET отправим на нее тот же текст “<h1>Hello World!</h1> <p>It JSP.<p>”
Вот так будет выглядеть наш метод сервлета doGet():
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); String varTextA = "Hello World!"; request.setAttribute("textA", varTextA); String varTextB = "It JSP."; request.setAttribute("textB", varTextB); RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); dispatcher.forward(request, response); }
С помощью RequestDispatcher мы отправляем наш response request клиенту.
А так будет выглядеть index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title></title> </head> <body> ${textA} ${textB} </body> </html>
С помощью конструкции ${<var>} мы принимаем данные с сервера.
После этого вы получите ту же по виду страничку, только это уже будет не сервлет отображать а jsp.
Для получения углубленных знаний по Java проходите наш курс «Программирование на языке Java для начинающих», а также читайте серию статей «Spring Data JPA. Работа с БД»: часть 1, часть 2 и часть 3
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
94 комментариев к статье "WEB приложение на Java"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Статья из серии “Как нарисовать сову” – вначале рисуем два овала, а потом дорисовываем всё остальное…
Распишите по подробнее шаг 1.
Что именно вас интересует в шаге 1? Если создание Maven проекта то там есть ссылка на уже ране написанный урок по этой теме.
было бы не плохо еще в начале объяснить где эти депенденси лежат, и как их можно обновить случае необходимости
ато у меня чето не находит такую версию http://floomby.ru/s1/bW3UEF/full/
Для вас тут http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/3.1.0, но на том же сайте можно найти и другие, это центральный Maven репозиторий.
уже разобрался, видимо проблема была в том что у меня не был включен автоимпорт
я правильно понял что мавен по дефолту должен сам загружать нужные библиотеки из своего репозитория указанные в депенденси?
Верно, именно так.
Если все делать по написанному, то даже собрать проект не получается. Было бы хорошо, если бы можно было скачать работающий проект со всеми исходниками.
Вверху страницы есть кнопка “СКАЧАТЬ”, там все исходники.
Привет, хорошая статья.
Не знаю что кому не нравиться, все норм описано. Если не хватает знаний по чему-то, то их нужно пополнять с поисковиков, так как автор не может знать кто чего не знает. Статья конкретная, мне понравилось.
Спасибо :)
+
НЕ получается собрать проект стопорюсь на И выбираем ваш собранный проект, лежит он в корне проекта в папке target/.war У меня просто нет этого файла та и папок меньше чем в скачанном с сайта примера. В чем может быть проблема???
Обновил в уроке 4-й Шаг, Выполните его и думаю все будет.
Спасибо за ответ но не совсем понятно. Можно поподробней ))
Вы собрали ваш проект с помощью Maven?
Нет просто непонятно как добраться до тех настроек clear и install которые указаны на картинке в 4 шаге
Справа есть кнопка Maven, посмотрите 4 Шаг я обновил картинку.
Да все супер. Теперь все получилось. Быстрей бы Ваш курс вышел бы. )) Надеюсь он будет захватывать такие же темы а не только java core как в основном в других курсах.
У меня по умолчанию была скрыта кнопка “Maven Projects”. Чтобы её открыть надо выбрать в меню пункт View –> Tool Window –> Maven Projects
Чтобы закладка всегда показывалась: View –> Tool Buttons
Все очень коротко и ясно) Хочу еще =)
ЗЫ: Шаг 6: Для этого мы должны создать в папке src/webapp нашу страничку -> ошибка src/main/webapp
Спасибо, исправил.
спасибо.. приятно понять всю картину.. Написано доходчиво и кратко, продолжайте в том же духе. Я так понял автор использует сервлеты версии 3.0. Хотелось бы узнать, в реальных проектах используются они или более старой версии 2.5?
И вам спасибо, что учитесь с нами :) Да Servlet 3,0 используются но только в новых проектах так как старые трудоемко переписывать на эту версию.
Еще такой вопрос, как дебажить веб-приложения? Поставил брекпоинт на doGet() когда выполняю запрос по этому HttpServlet ничего не происходит.
Нужно запускать server-side в debug режиме тогда вы сможете дебажить.
Спасибо!
Включительно по 5 шаг все работает, выводит Hello world, сделал все как в 6 шаге и уже не работает, ошибка 404 не найден index.jsp
Спасибо за внятное объяснение материала!
Здравствуйте, Александр! Подскажите пожалуйста, почему после запуска проекта он выдает мне ошибку 404, The requested resource (/s) is not available? Хотя я скачала ваши исходники, только сервер у меня Jboss.
Здравствуйте! Попробуйте проверить с каким контекст неймом вы деплоите, у меня в Idea стоял /s возможнол вы с другим задеплоили. Если не разберётесь, то напишите в группу ВК или мне лично помогу.
К чему все эти депенденси? Особенно javaee-api?
Шаг 4 – не понятен. Где искать это меню? И какой смысл в мавене, если все равно сначала собираем, потом деплоим и все руками?
Ну там вже все стрелками показано :) В идеи справа есть вертикальные кнопки, на одной из них написано maven, вам туда ;)
Большое вам спасибо.
Отличная статья и очень полезный сайт в целом.
После того как подключил зависимости в maven все равно не видит servlet. Подскажите, что делать
Разобрался
Как?
Было бы неплохо написать пример интеграции JPA и AJA. с добавлением элемента в базу и чтением элементов от туда.
‘javax.servlet:javax.servlet-api:3.0.1”’ not found
я скачал javaEE 7 JDK и указал в идеи к нему путь. но не находит. идея предлагает скачать. вот качаю 129 мб какието файлы с репозитория. это нормально или все библиотеки должны автоматически найтись? спасибо
Сделал все как в мануале, не работает! Колупал, колупал – заработало! Поделюсь опытом, может быть, у кого-то такая же проблема. При собирании проекта мавеном выдавало 2 варнинга.
Первый исправил добавив явное указание версии плагина:
…
maven-compiler-plugin
2.3.2
Долго искал как создаются директории:
– src/java/servlets для sources;
– src/resources для resources;
– src/webapp для webapp – *.jsp, *.xhtml, *.html;
Потому что по умолчанию при создании нового maven-проекта, нет папочки “webapp” и нигде на сайте про это не написано (не нашел).
Может кому-нибудь поможет -> Project Structure -> Modules -> “+” -> Web
Спасибо за уроки!
Доброго время суток. Не знаю в чем проблема, но у меня почему-то “${textA}
${textB}” так и выводятся. Хотя я их создаю в сервлете. Может что то знаете в чем может быть проблема.
та же проблема
Здравствуйте, подскажите пожалуйста, как сделать так, что бы все выше написанное заработало, при условии, что доступ в сеть идет через прокси сервер? Пробовал через settings в мавен прописывать условия подключения(порт, проксю), но все равно выдает ваше подключение не защищено.
Ваш вариант решения этой задачи буде немного попроще чем тот вариант который мне предлагали ранее.
Добрый день! Все классно написано, но у меня в конце не получилось подключить jsp
Т.е. если мы после того как в сервлете передаем строки в index.jsp
1. я пересобрал проект при помощи maven (clean + install)
2. запустил tomcat
3. выдало ошибку HTTP Status 500 – java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
Саша, ты молодец. Не копируешь без-думно всякую ерезь с просторов а пишешь свое. Я уже год занимаюсь Java, и очень много еще белых пятен в понимании. А тво стать иногда очень прям по душе приходятся. Ты правильно делаешь. Рассказывая все для дурака. Умный человек лишний раз что то прочтет повторит, а глупый хоть понять сможет. Я пока отношу себя ко вторым, и очень важно иногда сделать прям по шагам не упуская , мелочей -который как многие авторы полагают , человек который занимается Java и так знает. Короче молодец, продолжай в том же духе. Статьи твои читать люблю. Сайт и видео блог в закладках))
Спасибо) НАдеюсь запущу новую версию сайта и буду более активно писать статейки.
Нет абсолютно никакой разницы, что делать проект самому, что пробовать импортировать скачанный. На 6 шаге всегда вылетает HTTP Status 500 – java.lang.ClassNotFoundException: org.apache.jsp.index_jsp. Как это решается?
Пробовал свой сервлет писать,все с идеи прекрасно запускается и в мазиле отображается. Захотел сделать свой проект,начал делать все по статье,даже без добавления жсп, не запускается мазила.Поробовал руxками через http://localhost:8080/ добавить и запустить. Такая же ошибка:
http://gyazo.com/3a4a63dc7612195be8159fc177bb4eed
Без понятия что и где не так.
Поменяйте томкат с 8го на 7й. Мне помогло.
Было тоже самое, пока не перечитал это: Для этого мы должны создать в папке src/main/webapp нашу страничку, в нашем случае это index.jsp Надо чтобы структура папок была такой же. И Tomcat версии 7.
Некорректно отобразились ссылки на скрины:
http://i11.pixs.ru:/storage/3/8/2/Untitledpn_4578645_16647382.png
http://i11.pixs.ru:/storage/3/8/3/Untitled1p_2723521_16647383.png
Огромное спасибо автору, за его бесценный труд!! У меня вопрос по поводу плагинов maven-war-plugin где должен лежать файл немного непонятно?
Все сделал по примеру, неработает:
[INFO] Final Memory: 9M/245M
[INFO] ————————————————————————
[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format : or :[:]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoGoalSpecifiedException
Почему так?
UTF-8
Где то не написал UTF-8?? Проверил – в pom.xml есть.
Вернее даже так (не пойму что за фигня, ведь мне нужно это только для того чтобы по-тренить фронт-энд – JSTL)
MyServlet.java – все красное, вот ссылка на скрин: http://hkar.ru/ADVE
Добрый день, потому что надо импортировать модули, подчеркнутые красным. щёлкните мышью по “красному” слову и нажмите Alt + Tab, далее разберётесь сами)
Вроде б избавился от ошибок, (был дубликат, я недосмотрел), теперь билдит норм, но http://localhost:8080/s все равно не работает!! почему?
Хороший туториал
Спасибо большое очень понятная статья)))
Подскажите, как запустить данный пример на сервере Glassfish?
Очень хорошая и полезная статья
зй
Добрый день! Прошу помощи, сделал данный пример на ноутбуке, все отлчино получилось. Пытаюсь создать данный проект на ПК, и на
этапе pom/ файла мавен подсвечивает красным версии 3.0-alpha-1
javaee-web-api
6.0
maven-war-plugin
2.1.1
пробовал ставить другие, не помогает. Даже перенес работающий проект с ноубука, открыл на пк, и все равно подсвечивает. Подскажите в чем проблема может быть? Спасибо
пропиши их руками
Отличный мануал! Да возникают сложности со сборкой проекта. Но после 5 минут тыкания, можно понять как правильно его собирать.
Спасибо за труд!
Очень внятный туториал. В гугле похожего описанного до мелочей не нашел. Я сам то почти нуль в джаве, а эту статью понял. Спасибо что пишите так что даже чайники как я понимают!
Александр, спасибо за ваш труд!
Спасибо, было понятно и полезно
HTTP Status 404 – /s
type Status report
message /s
description The requested resource is not available.
Apache Tomcat/9.0.0.M8
Делал проект пошагово, скачал Ваш, ошибка одни и та же в итоге
Написано: Запрашиваемый ресурс недоступен.
@WebServlet(“/s”) у Вас так?
По такому адресу http://localhost:8080/s обращаетесь в браузере?
У васшего пользователя, который запусил IDEA или Tomcat и делает деплой war файла нету прав доступа на запись в папку Tomcat\webapps.
Переустановите Tomcat в папку C:\Tomcat и проблема будет решена. =)
Наконец-то хоть где-то нашелся ответ! У меня Tomcat был распакован в program files и тоже была ошибка 404. Скопировала папку на C:/Tomcat и заработало. Я уже думала, что даже helloWorld мне не по силам
Проверьте, чтобы Tomcat обращался непосредственно к файлу MyFirstWebProject.war, а не к папке MyFirstWebProject. В настройках деплоя томкат изначально прописана только папка, а не сам вар файл.
Не указали что в Idea community edition – нет возможности диплоить как указано на картинках. Нужна обязательно платная версия. Ну и некоторые моменты не освещены по которым приходится отдельно гуглить.
Можно использовать для этого gradle
Шикарна стаття.
Ще б було класно добавити код по роботі з БД. Це дуже важлива частина любої програми.
Помогите решить проблему с сервлетами и jstl. Есть вебстраница в которой с помошью c:foreach выводится список строк. Если эти строки указать железно в коде java, то при установке этого списка в request.setAttribute(“list”, list), то эти строки отображаются иероглифами(как выяснилось они почему-то кодируются в CP1251). А если сделать, чтобы можно было добавлять строки в список путем отправки формы, то строки отправленные из html формы на странице с foreach отображаются нормально. Выставил utf-8 уже где только можно, не помогло. Подскажите пожалуйста где еще нужно выставить utf-8, чтобы сервлет кодировал аттрибуты в utf-8. Спасибо.
Проблему решил. Java компилятор компилировал классы в cp1251, хотя все файлы были в UTF-8, т.о. строка выходила кривой уже из самого класса. Решение: установить параметр file.encoding=UTF-8 для компилятора.
Отлично все показано и рассказано. Собрал за 2 минуты)Ваще красавчик Александр)
Здравствуйте! Помогите разобраться с ошибкой 404. Всё сделал как описано в уроке, но при запуске выдаёт 404 ошибку.
Адрес правильный. Порт не занят.
Добрый день.
Воспользовался уроком, только действительно в бесплатной идеи нет поддержки tomcat. Но я просто копировал war файл проекта в webapp и смотрел в браузере. Спасибо за урок.
Классная статья, а главное современная. А то в ютубе, один сидит на Eclipse, второй на древней IDEA. Из минусов идеи – это то что она платная (для javaEE) но это все решаемо (смекаааете? это я про демо период на 30 дней ;-))
Разобрался за полчаса, правда до этого убил несколько часов на ютуб. Сенкс ребзя
Спасибо, очень доступно и понятно!
Автор красавчик!
СПС за материал. Все понятно!
Пробовал запустить данный пример на 2х осях, пробуя разные конфигурации.
Не знаю, уж намеренно ли ты сделал это, автор, но тем не менее. Благодаря твоему гайду моё желание изучать Java упало ниже чем на пол-шестого.
P.S. Пробовал на win 8.1 (получилось с матом всё до подключения файла jsp, который не хотел видеть переменные из сервлета)
На Ubuntu 16.04 не заработало вообще ничего. Никак.
P.S.S Уйду в питонисты, бл№#*
Отличная статья! Спасибо автору)
Thank you Alex for tutorial!
Can I use Community version of IntelliJ IDEA got it? or I should use Ultimate version?
Thank you!
Hi, Aldy!
Thank you for the comment. You need Ultimate version for this tutorial.
Шаг 5 пункт 4: запуск томкат выдает ошибку, в результате чего веб страница не находится