2017-09-19 1 views
0

J'ai du contenu qui nécessite un chargement dynamique dans mon contrôleur et du contenu que je veux livrer de manière statique.Comment combiner un RequestMapping basé sur des annotations avec du contenu statique?

Actuellement, je dois configurer le chemin du contrôleur manuellement en dispatcher-servlet.xml, e.G. le @RequestMapping ne fonctionne pas. Si je supprime la ligne <mvc:resources mapping="/static/**" location="/static/" /> de mon dispatcher-servlet.xml l'annotation est correctement relue.

J'ai essayé de changer l'URL de contexte pour servlet Dispatcher dans web.xml et placer les pages statiques en dehors du contrôle des ressorts, mais cela ne fonctionnait pas non plus, donc je l'ai inversé.

Mon objectif est de supprimer le bean urlMapping de dispatcher-servlet.xml et de faire cela par les annotations. Pour autant que j'ai compris cela devrait également se débarrasser de la AbstractController et les pièces handleRequestInternal. Ce qui me rend confus, c'est que je ne peux utiliser que les annotations quand je laisse de côté la ligne des ressources statiques.

Voici les qu'exerce pertinentes de mon état actuel:

répartiteur-servlet.xml

<context:component-scan base-package="some.pkg.containing.controllers" /> 
<mvc:resources mapping="/static/**" location="/static/" /> 
<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
    p:prefix="/WEB-INF/jsp/" 
    p:suffix=".jsp" /> 

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
    <props> 
     <prop key="/dashboard/*">dashboardController</prop> 
    </props> 
    </property> 
</bean> 

web.xml

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Controller dans le paquet:

@Controller 
@RequestMapping("/dashboard") 
public class DashboardController extends AbstractController { 
    public ModelAndView getSite() { 
    ModelAndView retVal = new ModelAndView("dashboard_base"); 
    retVal.addObject("url", "/dashboard"); 
    return retVal; 
    } 
    @Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { 
    return getSite(); 
    } 
} 

Répondre

0

Vous devez dire la partie mvc du printemps qu'il devrait aussi honorer vos annotations. Donc si vous ajoutez cette ligne à votre dispatcher-servlet.xml cela fonctionnera:

<mvc:annotation-driven />