/ / Servlet Web Application Kontext z filtra - jar, kocúr

Servlet Web Application Kontext z filtra - jar, kocúr

Snažím sa získať z webovej stránky kontext jarnej webovej aplikácie.

Skôr som to prešiel:

WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext())

Bolo to v poriadku, pretože som dostal to, čo sa nazýva Myslím, že ROOT webovú aplikáciu kontextu. Teraz som chcela presunúť celú moju jarnú definíciu tak, ako je to vo 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>

Odstránil som „starú“ definíciu z 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> -->

Teraz už nemám žiadny webový kontext „ROOT“ a filter nemôže získať iný kontext webovej aplikácie.

Videl som, že existuje ďalší hovor:

WebApplicationContextUtils.getWebApplicationContext(sc, attrName)

umožňuje zadať ako druhý argument "atribút", je to v skutočnosti kontext webovej aplikácie, ktorú chcete. V predvolenom nastavení je to "org.springframework.web.context.WebApplicationContext.ROOT".

Myslím, že musím túto metódu nazývať, ale neviem, čo dať ako druhý parameter.

PS: Tiež som sa snažil použiť org.springframework.web.filter.DelegatingFilterProxy, ale kocúr hádal chybu, že nenašiel klasické (ROOT) webové kontext aplikácie:

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

ALE JE ĎALŠIE KONTEXT, je to len definované iným spôsobom. Nie je možné, že som jediný, kto sa snaží získať ďalší kontext, ktorý ROOT.

Ďakujeme, že ste si doteraz prečítali.

odpovede:

0 pre odpoveď č. 1

Len som si prečítal vašu odpoveď, a áno, prišiel som na to včera večer ;-) Pridal (-a) som kontext ROOT a definujem ho takto:

    <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>

A jeho fungovanie, filter môže pristúpiť k službe priamo s Autowiring.

Stále mám pocit, že moja architektúra ješpinavé, pretože ROOT a "dispečerský" kontext sú rovnaké, myslím si, že to nie je dobrá prax. Možno sa pokúsim neskôr rozdeliť "WebConfiguration" na dve.

Aj tak ďakujem!