![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| NikitOS9 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
использую tomcat.
суть такова, есть желание сделать чтобы все запрашиваемые страницы ходили через один сервлет и только по мапингам, т.е запретить вызывать jsp явно в запросе для этого сделал следущее: web.xml .......
сам BaseServlet .......
но при вызовах например..localhost/userBoard на BaseServlet никакого внимания, вызываются замечально даже если я в методах doPost, doGet ставлю явный екцепшн
и как запретить например явный вызов ...localhost/uBoard.jsp Это сообщение отредактировал(а) NikitOS9 - 25.1.2008, 21:13 |
||||||
|
|||||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
NikitOS9,
1)используй тег код! Тогда будет удобнее читать твой пост. 2) Добавь это в web.xml:
Это сообщение отредактировал(а) Kangaroo - 25.1.2008, 21:03 -------------------- Lost.... |
|||
|
||||
| NikitOS9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
ок буду использовать.
1) там где запрет нужно что поставить ? названия <servlet-name>userLogin</servlet-name> ? 2) а как это повлияет на BaseServlet, он никак не сказывается, при обращении просто вызывается та jsp на которая указана <param-value> то есть
вопрос почему ? я же указал что ходить надо через BaseServlet. |
|||
|
||||
| Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 1 Всего: 10 |
Все ресурсы, в которых нуждается данная веб-апликация, но к которым клиент апликации не должен иметь доступа, должны быть помещены в папку WEB-INF (в корне апликации) — спецификация Java EE гарантирует, что любой контейнер ей удовлетворяющий, не пустит туда клиента. Обычно создают WEB-INF/jsp/. -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
| NikitOS9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
ок, с этим возможно нужно поступить так.
но вопрос почему игнорируется BaseServlet ? то есть для любого сервлета я явно как мне показалось указал что его класс это BaseServlet, но он никак не действует.. в нем я могу написать все что угодно, хоть явные вызовы екцепшнов, все равно все будет замечательно работать.. не понимаю.. |
|||
|
||||
| Ulysses4j |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 1 Всего: 10 |
Falkner, Jones. Servlets and JSP, 2003 Правда, на счет папок внутри, туториал от Sun по JEE 5 рекомендует создавать "свои" папки внутри /WEB-INF/classes/
The Java™ EE 5 Tutorial -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
||||
|
|||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: 9 Всего: 56 |
ты пытаешься реализовать паттерн FrontController.
я как раз тоже с ним мучаюсь. возникает много вопросов: например если реализовывать forward в сервлете, то там же будет и формирование url-a и инициализация входных параметров и контроль залогинин пользователь или нет: в общем очень внушытельных размеров сервлет получается, что мне не сильно нравится ... |
|||
|
||||
| Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 1 Всего: 10 |
Что значит игнорируется? Приведите пример запроса и ответа сервера на него, который вас не устраивает. Кидать исключения в сервлетах нет никакого смысла — их нельзя нигде поймать, конейнер сам решает, что делать в таких случаях, чаще всего он дает ошибку 500 (Internal server error), но в принципе, может быть все, что угодно, это не специфицировано. И еще: то, что вы делаете, создает впечатление, что вам нужен фильтр (javax.servlet.Filter) — пробуйте про них почитать.
-------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
| Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 1 Всего: 10 |
-------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
| NikitOS9 |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
ок, все по порядку
1) то есть каталог с jsp рекомендуется размещать в /WEB-INF/classes/jsp ? хотя в доках по jsp везде написано что, jsp, html и тд. фалы должны находиться в каталоге верхнего уровня, т.е ...jsp ...html /WEB-INF/classes/... /WEB-INF/lib/... вот такая структура. да и я чесно сказать слышу впервые что нужно jsp размещать в /WEB-INF/classes/jsp. ну ладно, раз вы привели цитату с сана, видимо гонят o`reilly, я у них читаю доки ) 2) что значит игнорируется. если посмотреть на код выше, то логично получается, что при любом запросе, например localhost/userLogin, запрос переходит к BaseServlet, он уже читает getInitParameter("next") этого userLogin, а в нем находится реальный путь к jsp, это видно из в web.xml. Из этого логично предположить, что если в BaseServlet написать например что в любом случае делать форвард на постоянную jsp, ...
.. то туда мы и должны попасть. но нет! попадаем все равно на ту jsp, которая указана в <param-value>. То есть можно совсем убрать BaseServlet из web.xml и все будет так же работать. а кидать исключения в сервлетах как же нет смыла, ошибка 500, обрабатывается например так в том же web.xml
а на error_page.jsp можно сделать например так <%
или еще вот так <%
%> уфф, надеюсь понятно излагаю ) Это сообщение отредактировал(а) NikitOS9 - 25.1.2008, 23:15 |
||||||||
|
|||||||||
| v2v |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: 9 Всего: 56 |
без classes/ - надо: /WEB-INF/jsp - рассказываю как я сделал - это не совсем правильно имхо, но оно пашет именно так как тебе надо : показываю главный кусок моего вебточкаиксэмэля.
пояснения : есть страничка по умолчанию index.jsp , в которой код редиректит сразу на сервлет web.EnterPoint , этот сервлет обрабатывает входящие урлы :
и делает редирект на нужную страничку:
вот. так работает. и странички прячутся. и весь контент идёт через главный сервлет web.EnterPoint ... но уже при обработке только 2х разных видов страниц (форм ) этот самый сервлет очень сильно распух , дальше хуже... мне это как то не нравится...надо что то другое придумать... Это сообщение отредактировал(а) v2v - 26.1.2008, 02:18 |
||||||
|
|||||||
| NikitOS9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
v2v
То есть как я понял, запрос любого урла переходит к web.EnterPoint. в нем String path=req.getPathInfo(); для определения что было вызвано, и дальше форвард на него ? тут вроде все ясно, но что не верно в моем.. ? я хотел чтобы все jsp, даже не все, а те что мне нужно, ходили через BaseServlet, а например сервлеты и другие jsp через другой.. |
|||
|
||||
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: 1 Всего: 2 |
Только тогда вариант размещения jsp в WEB-INF не пройдёт. Так делают когда хотят исключить возможность прямого доступа к jsp, чтобы попасть на неё можно было только через вышеупомянутый FrontController. Так сделано, например, в Spring. |
|||
|
||||
| Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 1 Всего: 10 |
Да так сделано в большинстве web-frameworks, насколько я знаю, Spring MVC и Struts — точно (пробовал...). Просто человек хочет с нуля написать веб-приложение — ну, флаг в руки, изобретение велосипедов иногда может быть весьма полезным. На самом деле, усли уж FrontController, то фильтр всё-таки, наверное, не то. Фильтр обычно выполняет какие-то изолированные задачи в рамках приложения (авторизация, кодировки, как примеры), а если реализуется такая глобальная диспетчеризация, то это все же сервлет. С редиректом v2v точно написал, я совсем забыл про эту технику, а ведь сам когда-то с этим же мучался (тут даже на форуме можно следы этих мучений найти, если поискать). Это сообщение отредактировал(а) Ulysses4j - 26.1.2008, 22:17 -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: 1 Всего: 2 |
||||
|
||||
| Ulysses4j |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 1 Всего: 10 |
Да, вероятно, справедливое замечание. Просто я в свое время делал так (у меня все валидные пути апликации были с расширением .html ):
— web.xml
— index.jsp, которая лежала в корне апликации (все остальные .jsp — в WEB-INF/jsp, хотя, как мы видели, Sun рекомендует использовать WEB-INF/classes для своих папок, но это, очевидно, непринципиально). Вот слово "редирект" из меня и вылезло... Это сообщение отредактировал(а) Ulysses4j - 26.1.2008, 23:14 -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
||||
|
|||||
| NikitOS9 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 6.12.2007 Репутация: 1 Всего: 1 |
написать фильтр для каждой jsp, это тоже можно, но зачем писать для каждой.. читаю <param-value> у запрашиваемой jsp, потом делаю в сервлете BaseServlet на который ссылается эта jsp форвард. я просто не могу понять почему не работает мой вариант.. ? |
|||
|
||||
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: 1 Всего: 2 |
Добавлено @ 12:29 С param-value все ясно, а вот как сделать, чтобы фильтр обрабатывал только урлы вида /url1 и url2, или url1.jsp и url2.jsp. У меня не получилось. а, ты сейчас про свой вариант говорил, а мне опять фильтры померещились) Это сообщение отредактировал(а) XEugene - 27.1.2008, 21:52 |
|||
|
||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: 9 Всего: 56 |
||||
|
||||
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: 1 Всего: 2 |
||||
|
||||
| Ulysses4j |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 1 Всего: 10 |
v2v, напрямую — не знаю, я привел пример: редиректом можно выйти на сервлет (aka FrontController), который редндерит view с помощью jsp's из WEB-INF/jsp (в примере написан редирект на index.html, которой физически не существует, но исходя из расширения .html запрос передается сервлету). На всех jsp все ссылки имеют такой вид, что обрабатываются тем же сервлетом (в моем примере - с расширением .html). Я, кстати, думаю, что редиректом (<c:redirect>)можно и напрямую переходить в WEB-INF/jsp, без сервлета, потому что в этом случае ресурс из скрытой для клиента папки запрашивает не клиент, а самая что ни на есть апликация — jsp, на которой редирект размещен. Но только что в этом толку: один раз перешел и все. Дальше-то делать нечего - кроме как той страницы, на которую редирект изначально прописан, попасть никуда нельзя.
-------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: 9 Всего: 56 |
вообщето нельзя .. только что проверил ... я ж поетому и использовал форвард, а не редирект, и поэтому же мне стало интересно чем же они отличаются ... |
|||
|
||||
| XEugene |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 1.1.2008 Репутация: 1 Всего: 2 |
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |