2013-06-04 4 views
1

J'utilise maven + printemps + mise en veille prolongée pour créer un fichier xml sans webapp et a commencé à Minimal Tomcat 7 embedding exampletomcat embarqué intégré au printemps

structure de l'application:

webapp 
    |_src/main/java 
    | |_com.myapp.test 
    | |_Main.java 
    | |_HelloController.java 
    | |_MvcConfig.java 
    |_src/main/resources 
    | |_hello.jsp 
    |_src/test/java 
    |_src/test/resources 

HelloController.java

@Controller 
@RequestMapping("/welcome") 
public class HelloController { 
@RequestMapping(method = RequestMethod.GET) 
public String printWelcome(ModelMap model) { 
    model.addAttribute("message", "Spring 3 MVC Hello World"); 
    return "hello"; 
} 

MvcConfig.java

@Configuration 
@EnableWebMvc 
public class MvcConfig { 
    @Bean 
    public InternalResourceViewResolver configureInternalResourceViewResolver() { 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/"); 
     resolver.setSuffix(".jsp"); 
     return resolver; 
    } 
} 

tout en essayant d'ajouter fonction de printemps dans Main.java

Tomcat tomcat = new Tomcat(); 
tomcat.setPort(9090); 
File base = new File(""); 
System.out.println(base.getAbsolutePath()); 
Context rootCtx = tomcat.addContext("", base.getAbsolutePath());    
AnnotationConfigWebApplicationContext aactx = new AnnotationConfigWebApplicationContext(); 
aactx.scan("com.myapp"); 
aactx.register(MvcConfig.class); 
DispatcherServlet dispatcher = new DispatcherServlet(ctx); 
Tomcat.addServlet(rootCtx, "SpringMVC", dispatcher); 
rootCtx.addServletMapping("/*", "SpringMVC"); 
tomcat.start(); 

j'eu cette erreur quand aller à localhost:9090/welcome.jsp pour vérifier le serveur embarqué

Jun 04, 2013 4:34:39 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound 
WARNING: No mapping found for HTTP request with URI [/hello.jsp] in DispatcherServlet with name 'SpringMVC' 
Jun 04, 2013 5:00:38 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound 
WARNING: No mapping found for HTTP request with URI [/favicon.ico] in DispatcherServlet with name 'SpringMVC' 

pourquoi j'eu cette erreur et comment le résoudre?

Merci d'avance!

+0

Dans votre code, vous avez DispatcherServlet (ctx) mais il doit s'agir de DispatcherServlet (aactx). Je devine que c'est juste un copier/coller typo ici et pas votre code réel? –

Répondre

0

Je suis assez sûr que le suffixe que vous avez réglé sur «/» est relative « WEB-INF ». Essayez de créer webapp/src/main/webapp/WEB-INF/et placez hello.jsp ici.

+0

J'ai essayé, mais j'ai quand même eu la même erreur. – Teifi

0

si vous changez

File base = new File(""); 

à

File base = new File("src/main/resources"); 
0

Avant de commencer, faire l'ajustement qui pointe @RobBarreca sur. Ca devrait être aactx pas ctx.

Il y a deux options lorsque vous faites du printemps avec Tomcat (7.0) intégré: addContext et addWebapp. Ce dernier est vraiment la méthode recommandée pour commencer, alors que addContext est le plus avancé, il faut avoir un contrôle de route. Il est bien que vous utilisez addContext, mais il y a plus informations de configuration que vous devez spécifier. Et je vais me concentrer sur addContext dans cette réponse.

Vous manque vraiment une seule pièce au-dessus et qui est ce Servlet classe sera utilisé pour les fichiers JSP? J'imagine que vous avez probablement un fichier appelé welcome.jsp et il se peut qu'il soit au bon endroit. Cependant, votre code ci-dessus dira comment traiter votre contrôleur correctement seulement.

Le code que vous devrez ajouter pour gérer les fichiers JSP est comme suit:

Wrapper jspServlet = rootCtx.createWrapper(); 
jspServlet.setName("jsp"); 
jspServlet.setServletClass("org.apache.jasper.servlet.JspServlet"); 
jspServlet.addInitParameter("fork", "false"); 
jspServlet.addInitParameter("xpoweredBy", "false"); 
jspServlet.setLoadOnStartup(2); 
rootCtx.addChild(jspServlet); 
rootCtx.addServletMapping("*.jsp", "jsp"); 

En fait, vous avez besoin d'une deuxième chose et qui est de vous modifier la cartographie servlet pour SpringMVC. Il devrait être

rootCtx.addServletMapping("/", "SpringMVC"); 

Si vous avez fait étoiles, il pourrait essayer de gérer jsp est pour vous, qu'il ne peut pas faire même si votre nouvelle classe JspServlet Servlet a été ajouté.

Maintenant, cela fonctionne, mais une amélioration supplémentaire, vous voudrez peut-être faire en fonction de ce que le contenu de votre service en fait est de spécifier une vue classe dans MvcConfig.java.Ceci, par exemple, pourrait vous permettre de gérer le contenu jstl si vous avez:

resolver.setViewClass(JstlView.class); 

mais il y a beaucoup d'autres cas où définition d'une vue de classe est préférable.

Questions connexes