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 ответов

74 просмотра

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

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта