web.xml url-pattern

💡 Усі статті, обговорення, новини про Java — в одному місці. Приєднуйтесь до Java спільноти!

Здравствуйте!

Значит такая вот ситуация.

Использую spring + hibernate + annotations

web.xml

...

< servlet-mapping>

< servlet-name> dispatcher</servlet-name>

< url-pattern>/index</url-pattern>

< url-pattern>/userRegistration</url-pattern>

< url-pattern>/userSuccess</url-pattern>

< url-pattern>/allcompany/*</url-pattern>
...

В контроллере

@RequestMapping (“/allcompany/ {groupId} ”)

public String showPage (@PathVariable ( “groupId” ) long groupId, ModelMap model)

{

model.addAttribute ( “menu_main_active”, “allcompany” );

return “index”;

}

В итоге по адресу /allcompany/0

ответ The requested resource () is not available.

если использовать < url-pattern>/allcompany/0</url-pattern>

и

@RequestMapping ( “/allcompany/0” )

public String showPage2 (ModelMap model)

{

model.addAttribute ( “menu_main_active”, “allcompany” );

return “index”;

}

всё нормально отрабатывает.

Подскажите в чём я не права, и где собака порылась?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

< bean class= “org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping” />

< bean class= “org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter” />

Добавь еще

< bean class= “org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping” />

В том то и дело что запросы /allcompany доходят до контроллера, а /allcompany/0 — нет. Если ставить в web.xml явно ’/allcompany/0’ то доходят нормально.

Проблемa, мне кажется, не в web.xml, а в url-mapping. Иначе запросы просто не доходили бы до контроллера. Оставьте в web.xml ’/allcompany’ и посмотрите в конфигурации, какой url-mapping используется. Собака порылась где-то там...

В applicationContext.xml — нет. Это есть в dispatcher-servlet.xml только там нет < context: annotation-config/>, но дело не в аннотациях.
Если я прописываю /allcompany/0, /allcompany/1, /allcompany/2... в web.xml то всё работает нормально, а web.xml насколько я знаю не обрабатывается самим сервлетом.
< context: component-scan base-package= “controller” />
< bean class= “org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping” />

< bean class= “org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter” />

А что стоит в applicationContext.xml? Имеется ли там что-то наподобие
< context: component-scan base-package= “...” />
< context: annotation-config/>

< bean class= “org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping” /> ?

Если убираю работает только /allcompany/ что собственно и со звёздочкой работает. Проблема в том что /allcompany/10, /allcompany/20, /allcompany/21... не работают. Не писать же для каждой единицы свой pattern.

Попробуйте убрать звездочку ’*’ в конце pattern (’/allcompany/’). Насколько я помню, там были какие-то заморочки с компиляцией pattern.

Нет. Это не курсовая. Это скорее самообучение.
Ссылка на проект
SQL

Проект под NetBeans 6.9.1

я так понимаю что это курсовая работа, может быть выложить куда то сам проект, может кто-то у себя развернет и попробует запустить...иначе сложно будет сказать, где собака рылась — мало ли ей где можно было порыться в вашем проекте...

Там пусто. (Точнее чтото было, я почистила, потом развернула и запустила приложение, попробовала зайти на /allcompany/0 в логах ничего не появилось).

ну давайте тогда, что-ли, содержимое лога. Тот который catalina.log

Взять какой то tutorial, где все пошагово расписано от А до Я, как все это реализуется, и повторить все шаги...

Пробую на Tomcat 6.0.26 также на GlassFish 3
Spring 3.0.2
Схема 2.5 т.е. xsi: schemaLocation="java.sun.com/xml/ns/javaee
java.sun.com/...web-app_2_5.xsd"
Если я правильно понимаю то нужно на каждый url-pattern описывать отдельный сервлет т.е. dispatcher1, dispatcher2
Попробовала — непомогло.

Ещё версии есть?


Вы не правы в выборе языка и технологий. Они от лукавого.

Отуже:) Могло ведь быть и хуже, как у меня — точка нет.

Скорее всего это связано с множественным url-pattern в servlet-mapping. Такой формат поддерживается начиная с servlet версии 2.5.

Возможно у Вас используется схема для 2.4 (java.sun.com/...eb-app_2_4.xsd ее следует заменить на 2.5 (java.sun.com/...b-app_2_5.xsd)

<web-app xmlns="java.sun.com/xml/ns/javaee"
	xmlns:xsi="www.w3.org/…Schema-instance"
	xsi:schemaLocation="java.sun.com/xml/ns/javaee java.sun.com/…web-app_2_5.xsd"
	version="2.5">
......
</web-app>

Еще может быть старая версия application server, которая не поддерживает 2.5 сервлеты.

В любом случае, если не поможет попробуйте разбить servlet-mapping, чтобы был отдельный на каждый url-mapping.

Имеет ли это значение — не знаю. Но не работает ни так ни этак.

Никогда с таким не сталкивался, ради интереса посмотрел что оно такое
technologicaloddity.com/...spring-mvc-3−0

есть пример

import org.springframework.stereotype.Controller;
04 import org.springframework.ui.Model;
05 import org.springframework.web.bind.annotation.PathVariable;
06 import org.springframework.web.bind.annotation.RequestMapping;
07
08 @Controller
09 public class ShowProfileController {
10
11 @RequestMapping (“/profile/ {username} ”)
12 public String showProfile (Model model, @PathVariable ( “username” ) String username) {
13 model.addAttribute ( “username”, username);
14 return “showProfile”; // the view name
15}
16
17}
непонятно, в методе showProfile здесь первым параметром идет модель, вторым аннотация, у вас наоборот — это не имеет значения (я вообще не в курсе).
long groupId — нормально он преобразует в примитив?
в примере, конечно, все для спринг 3.0, может у вас другая версия.

может еще в логах информация к размышлению есть...

Вы не правы в выборе языка и технологий. Они от лукавого.

Підписатись на коментарі