Сработал наконец только один вариант, причем попробовал его как на windows, так и на Linux. Но возникли вопросы. 1. Есть варианты когда servlet описывают в web.xml , там указывается <servlet-class>. Этот класс в разных примерах разный, например это может быть:org.springframework.web.servlet.DispatcherServlet или org.apache.catalina.servlets.DefaultSer или ещё что-то ещё непонятное типа com.devcolibri.servlet.MainServlet. как я понял эти классы все равно подчиняются основному HttpServlet, как бы может дополняя его своим функционалом. Но как решается какой использовать? Получается таких классов много их пишут различные разработчики и используются те классы которые удобнее или больше нравятся?
Привет. Сервлет это условно связующее звено между url адресом и классом, который обработает запрос. Свяжи между собой <servlet-mapping> и <servlet> через <servlet-name>: по указанному в маппинге <url-pattern> адресу запрос будет обработал соответствующим <servlet-class>. <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>org.example.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/welcome</url-pattern> </servlet-mapping> Здесь запрос на адрес localhost/welcome будет обработан классом org.example.HelloServlet. Этот класс, в свою очередь, должен получить какую-то информацию от самого сервера (томкат например), и поэтому class HelloServlet extends HttpServlet.
Спасибо, за ответ. Я с этим уже разобрался. Мне стало непонятно почему используют то один класс <servlet-class>, то другой в разных примерах, указывая эти классы в web.xml. а иногда пишут вообще свой класс сервлета на основе глобального класса HttpServlet.
Чаще всего так делают чтобы передать управление логикой какому-то фреймворку. Например посмотрим на web.xml для работы со спрингом: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/dispatcher-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> и его маппинг <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> То есть мы говорим, что все запросы ("/" -> корень сайта условно) должны быть обработаны спринговым классом DispatcherServlet. Который ты уже конфигурируешь отдельно с помощью другого xml файла.
в жавастарт!
Как я заметил, когда такая конфигурация в проекте, то в pom.xml ничего о servlet нету. В pom.xml остаются зависимости например spring-core, spring-webmvc итд. Но я встречал другие примеры когда там , в pom.xml внедряют такое: <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> А web.xml например такой внешний класс , как в вашем примере. org.springframework.web.servlet.DispatcherServlet Вопросы возникают наверное дальше, сервлет допустим выбрали и внедрили. Или сервлеты, тоже видел. Дальше нужно отлавливать событие в классе. Там , в примерах используют аннотацию @Controller. В общем не выходило, класс не возвращал нужный хоть html хоть jsp . Или не отрабатывал шаблонизатор org.springframework.web.servlet.view.InternalResourceViewResolver , ведь в классе я @Controller, в методе с аннотацией @GetMapping("/somethingLink") возвращалось имя файла(html например ) ответа. Короче, ребята у меня сработало только тогда когда класс был создан на основе extend HttpServlet. Никакие описанные в web.xml классы <servlet-class> не отрабатывали. И сработало только когда возвращался нормальный ответ- объект , кажись response.
парень. в жавастарт
Да там не отвечают, говорю же, парень. Там матеряться. Там вот какие вопросы задают. Спасибо за парня, мне 43.
ну так напиши Alex F в личку (раз он рад тебе помочь), сервлеты (особенно хмл) для конфигурации уже давно никто не пользует
В личку, конечно можно, парень, но это отменяет смысл группы. Я же нашел ваше сообщество, все прочитал, отправился в java start. Там просто не ответят мне, там обсуждают классы dog и cat. Когда я спрашиваю почему не работает, мне говорят, не знаю у меня другая версия, используй мой код.
эта группа немного другого уровня. ты почитай выше твоих сообщений. про брокеры, про реактор и тд. ps. я удивлён что Alex F ответил более развернуто.
Ок, тогда мне не подходят обе. Все нормально. Всех благ.
Учту, попробую все на аннотациях сделать.
Советую почитать про front controller. В контексте Спринга можно полистать их доку и сайт baeldung)
Отличный совет, уже читаю , начало внятное👍. https://www.baeldung.com/java-front-controller-pattern
Это прыжок через три ступени.. Ему самые основы нужны, условно хелловорлд, а ты уже паттерны предлагаешь.
Я увидел, что Сергей начал смотреть Спринг, ActionServlet и прочую историю. В связи с этим у него возникли вопросы, а почему там какая-то индерекция, контроллеры и проч. Фронт Контроллер - это просто общее описание этого подхода - сервлет ест все запросы и абстракции самого фреймворка, а не сервлет стека, уже сами разруливают обработку запроса
Ты ответил как раз в духе про) поэтому ему и говорили идти в старт)
Обсуждают сегодня