/ / Servlet Контекст на уеб приложения от филтър - пролет, tomcat

Servlet уеб приложението Контекст от филтър - пролет, котка

Опитвам се да получа контекста на пролетното уеб приложение от филтър.

Преди това го получавах чрез:

WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext())

Беше добре, защото получавах това, което се нарича Мисля, че контекстът на уеб приложенията на ROOT. Сега исках да преместя цялата си пролетна дефиниция така в web.xml:

    <servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- Configure DispatcherServlet to use AnnotationConfigWebApplicationContext instead of default XmlWebApplicationContext. -->
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<!-- Custom web configuration annotated class. -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>foo.bar.WebConfiguration</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

Премахнах „старата“ дефиниция от web.xml:

<!--    <context-param> -->
<!--        <param-name>contextConfigLocation</param-name> -->
<!--        <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> -->
<!--    </context-param> -->
<!--    <listener> -->
<!--        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> -->
<!--    </listener> -->

Сега нямам повече контекст на уеб приложението "ROOT", а филтърът не може да получи друг контекст на уеб приложението.

Видях, че има друго обаждане:

WebApplicationContextUtils.getWebApplicationContext(sc, attrName)

позволява да се посочи като втори аргумент "атрибут", всъщност той е контекстът на уеб приложението, което искате.

Мисля, че трябва да се обадя този метод, но аз не знам какво да поставя като втори параметър.

PS: Аз също се опитах да използвам org.springframework.web.filter.DelegatingFilterProxy, но tomcat хвърли грешката, че той не намери класически (ROOT) уеб приложение контекст:

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?

Но има и друг контекст, той е просто определен по друг начин. Не е възможно да съм единственият, който се опитва да получи друг контекст, който ROOT.

Благодаря, че сте чели досега.

Отговори:

0 за отговор № 1

Току-що прочетох отговора ти и да го разбрах вчера вечерта ;-) Добавих контекста на ROOT, като го дефинирах така:

    <context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>foo.bar.WebConfiguration</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

И работата му, филтърът може да достигне до услугата директно с Autowiring.

Все още имам чувството, че архитектурата ми емръсни, защото контекстът ROOT и "диспечерът" са еднакви, мисля, че това не е добра практика. Може би ще опитам по-късно да разделя "WebConfiguration" на две.

Благодаря ти все пак!