Spring MVC: Unterschied zwischen <context: component-scan> und <annotation-driven /> Tags? [Duplikat
Diese Frage hat hier bereits eine Antwort:
Warum antwortet Spring MVC mit 404 und meldet "Keine Zuordnung für HTTP-Anforderung mit URI […] in DispatcherServlet gefunden"? 6 answersVor einigen Tagen habe ich begonnen, dieses Spring Hello World Tutorial zu studieren:http: //viralpatel.net/blogs/spring-3-mvc-create-hello-world-application-spring-3-mvc
In diesem Tutorial wird Spring DispatcherServlet mit dem Befehl @ konfigurier spring-servlet.xml Datei, diese:
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="net.viralpatel.spring3.controller" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
n dieser Datei verwende ich dascontext: Komponenten-Scan -Tag, um anzugeben, dass Spring meine Datei nach der Annotation durchsuchen muss, zum Beispiel, wenn die Controller-Klasse feststellt, dass eine Methode mit @ -Anmerkungen versehen is@ RequestMapping ("/ hallo") annotation weiß, dass diese Methode die HTTP-Anforderung in Richtung der URL verarbeitet, die mit "/ hello" endet. Das ist einfach ...
Jetzt hängt mein Zweifel mit dem Spring MVC-Vorlagenprojekt zusammen, das ich automatisch in STS \ Eclipse erstellen konnte.
Wenn ich ein neues Spring MVC-Projekt in STS erstelle, habe ich das meine DispatcherServlet wird durch eine Datei namens @ konfigurie servlet-context.xml enthält eine Konfiguration, die der vorherigen Beispieldatei ähnelt.
In dieser Datei habe ich noch das Komponenten-Scan-Tag:
<context:component-scan base-package="com.mycompany.maventestwebapp" />
Aber ich habe auch einen anderen Tag (der aussieht, als hätte er eine ähnliche Aufgabe), diesen:
<annotation-driven />
Was ist der Unterschied zwischen diesen beiden Tags?
Eine andere "seltsame" Sache ist, dass das vorherige Beispiel (das nicht das mit Anmerkungen versehene Tag verwendet) dem von STS mit dem Spring MVC Template-Projekt erstellten Projekt sehr ähnlich ist, aber wenn ich das mit Anmerkungen versehene Tag von seinem lösche Konfigurationsdatei das Projekt läuft nicht und gibt mir folgende Fehlermeldung:HTTP Status 404 -
Und im Stacktrace habe ich:
WARN: org.springframework.web.servlet.PageNotFound - Keine Zuordnung für HTTP-Anforderung mit URI [/ maventestwebapp /] in DispatcherServlet mit dem Namen 'appServlet' gefunden
Aber wieso? Das vorige Beispiel funktioniert gut ohne annotationsgesteuertes Tag, und diese Controller-Klasse ist sehr ähnlich. Tatsächlich gibt es nur eine Methode, die HTTP-Anforderungen in Richtung "/" path @ verarbeite
Dies ist der Code meiner Controller-Klasse:
package com.mycompany.maventestwebapp;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
ann mir jemand helfen, dieses Ding zu verstehe
Vielen Dank