170 похожих чатов

Всем доброе утро! Простое web-приложение. Servlet. Пересмотрел множество примеров, повторял код.

Сработал наконец только один вариант, причем попробовал его как на windows, так и на Linux. Но возникли вопросы. 1. Есть варианты когда servlet описывают в web.xml , там указывается <servlet-class>. Этот класс в разных примерах разный, например это может быть:org.springframework.web.servlet.DispatcherServlet или org.apache.catalina.servlets.DefaultSer или ещё что-то ещё непонятное типа com.devcolibri.servlet.MainServlet. как я понял эти классы все равно подчиняются основному HttpServlet, как бы может дополняя его своим функционалом. Но как решается какой использовать? Получается таких классов много их пишут различные разработчики и используются те классы которые удобнее или больше нравятся?

18 ответов

25 просмотров

Привет. Сервлет это условно связующее звено между 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.

Sergey- Автор вопроса
Alex F
Привет. Сервлет это условно связующее звено между ...

Спасибо, за ответ. Я с этим уже разобрался. Мне стало непонятно почему используют то один класс <servlet-class>, то другой в разных примерах, указывая эти классы в web.xml. а иногда пишут вообще свой класс сервлета на основе глобального класса HttpServlet.

Sergey
Спасибо, за ответ. Я с этим уже разобрался. Мне ст...

Чаще всего так делают чтобы передать управление логикой какому-то фреймворку. Например посмотрим на 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 файла.

в жавастарт!

Sergey- Автор вопроса
Alex F
Чаще всего так делают чтобы передать управление ло...

Как я заметил, когда такая конфигурация в проекте, то в 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.

Sergey- Автор вопроса
Artem
парень. в жавастарт

Да там не отвечают, говорю же, парень. Там матеряться. Там вот какие вопросы задают. Спасибо за парня, мне 43.

Sergey
Да там не отвечают, говорю же, парень. Там матерят...

ну так напиши Alex F в личку (раз он рад тебе помочь), сервлеты (особенно хмл) для конфигурации уже давно никто не пользует

Sergey- Автор вопроса
Artem
ну так напиши Alex F в личку (раз он рад тебе помо...

В личку, конечно можно, парень, но это отменяет смысл группы. Я же нашел ваше сообщество, все прочитал, отправился в java start. Там просто не ответят мне, там обсуждают классы dog и cat. Когда я спрашиваю почему не работает, мне говорят, не знаю у меня другая версия, используй мой код.

Sergey
В личку, конечно можно, парень, но это отменяет см...

эта группа немного другого уровня. ты почитай выше твоих сообщений. про брокеры, про реактор и тд. ps. я удивлён что Alex F ответил более развернуто.

Sergey- Автор вопроса
Artem
эта группа немного другого уровня. ты почитай выше...

Ок, тогда мне не подходят обе. Все нормально. Всех благ.

Sergey- Автор вопроса
Artem
ну так напиши Alex F в личку (раз он рад тебе помо...

Учту, попробую все на аннотациях сделать.

Sergey
Как я заметил, когда такая конфигурация в проекте,...

Советую почитать про front controller. В контексте Спринга можно полистать их доку и сайт baeldung)

Sergey- Автор вопроса
Daniiλ Shreyder
Советую почитать про front controller. В контексте...

Отличный совет, уже читаю , начало внятное👍. https://www.baeldung.com/java-front-controller-pattern

Daniiλ Shreyder
Советую почитать про front controller. В контексте...

Это прыжок через три ступени.. Ему самые основы нужны, условно хелловорлд, а ты уже паттерны предлагаешь.

Alex F
Это прыжок через три ступени.. Ему самые основы ну...

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

Daniiλ Shreyder
Я увидел, что Сергей начал смотреть Спринг, Action...

Ты ответил как раз в духе про) поэтому ему и говорили идти в старт)

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Ребят, чет я уже не догоняю... Крч в коде на асм там происходит нечто вроде a+число (a+1, a+2 и т.д.). Но почему строка lea ecx, [edx+1] работает как a+1?? В edx берется адрес...
Alan 🔝 Бэброу
4
думаешь я не смогу также сделать? мне это просто не удобно
int 💳 𝙖𝙞𝙧 𝙗𝙞𝙜 𝙗𝙤𝙗 🔫 check bio / spam block / AFK / nohello.com / GMT+3
9
Карта сайта