Aggiornamento: In qualche modo, dopo un altro giro di regolazioni e ridistribuzione, localhost: 8080/ping-1.0/ping ha iniziato a funzionare. I file di configurazione sono ancora come sotto. Vorrei sapere cosa ho risolto senza saperlo, ma ora è risolto.Spring MVC controller non invocato da Tomcat
Sono stato a lottare con questo per un paio di giorni, ho provato tutti i tipi di soluzioni che ho visto qui e altrove, e nulla ha funzionato. Ho un controller MVC Spring distribuito in Tomcat, ma non posso accedervi.
Strumenti:
Spring 3.2.0
Tomcat 7
Java regolatore 1.6
Spring:
@Controller
public class PingController {
@RequestMapping("/ping")
public String ping (Model model) throws Exception {
System.out.println("ping ping ping");
String s = (new Date()).toString();
model.addAttribute("message", s);
return "ping";
}
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>ping</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/ping-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ping</servlet-name>
<url-pattern>/ping</url-pattern>
</servlet-mapping>
</web-app>
ping-servlet .xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="myclass.ping"/>
<mvc:annotation-driven />
</beans>
Il file WAR è chiamato ping-1.0.war. La distribuzione sembra andare bene. Vedo una directory chiamata da ping-1.0 a $ CATALINA_BASE/webapps e questo in catalina.log:
INFO: Mapped "{[/ping],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String myclass.ping.PingController.ping(org.springframework.ui.Model) throws java.lang.Exception
Tomcat è in esecuzione sulla porta 8080. Posso accedere localhost: 8080/manager per esempio. Ma localhost: 8080/ping restituisce un messaggio 404 da Tomcat. Non vedo nulla nei registri tranne un record di una richiesta GET. Nessun errore. Ho provato molte varianti di mapping delle richieste, filtro URL, ecc. E non riesco a farlo funzionare.
È necessario aggiungere il nome del contesto di distribuzione all'URL. Se hai distribuito foo.war, l'URL sarebbe http: // localhost: 8080/foo/ping. Quindi per te è http: // localhost: 8080/ping-1.0/ping – duffymo
Già provato ... non ha funzionato. – pmext
qual è il pacchetto in cui si trova 'PingController' –