RequestMapping arbeitet nicht wie erwartet


#1

Hallo,

Ich bin bei meinem Spring Projekt mal wieder auf ein Problem gestoßen, ich habe einen Controller, der 3 verschiedene RequestMappings verarbeiten soll, das erste funktioniert einwandfrei, die anderen leider nicht. Im Internet habe ich jetzt schon geschaut, aber leider nichts brauchbares gefunden. Aktuell sieht mein Controller so aus:

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import de.springproj.objects.Scanner;

@Controller
@RequestMapping("/infos/*")
public class ScanViewController {

	@RequestMapping("scanner")
	public ModelAndView getScanner() {
		ModelAndView mav = new ModelAndView("scanner");
		List<Scanner> scannerList = new ArrayList<Scanner>();
		scannerList.add(new Scanner("Scanner1", "192.168.1.2"));
		scannerList.add(new Scanner("Scanner2", "192.168.1.3"));
		scannerList.add(new Scanner("Scanner3", "192.168.1.4"));
		scannerList.add(new Scanner("Scanner4", "192.168.1.5"));
		mav.addObject(scannerList);
		return mav;
	}
	
	@RequestMapping("mas")
	public ModelAndView getMas() {
		ModelAndView mav = new ModelAndView("mas");
		return mav;
	}
	
	@RequestMapping("sas")
	public ModelAndView getSas() {
		ModelAndView mav = new ModelAndView("sas");
		return mav;
	}
	
}```

Edit:
Falls sich einer wundert, warum ich neue Ojekte anlege, nur um sie zurück zu geben, diese Objekte werden später mit Daten gefüllt, sind also erst mal nur so erzeugt worden, die Füllung kommt später :)

Die web.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>SpringProj</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
     <servlet>
        <servlet-name>springproj</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springproj</servlet-name>
        <url-pattern>/welcome.jsp</url-pattern>
        <url-pattern>/welcome.html</url-pattern>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>springproj</servlet-name>
        <url-pattern>*</url-pattern> <!-- Hier habe ich auch schon /infos/* versucht -->
    </servlet-mapping>
  
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/applicationContext.xml
		</param-value>
	</context-param>

	<!-- The Bootstrap listener to start up and shut down Spring's root WebApplicationContext.
		It is registered to Servlet Container -->
	<listener>
		<listener-class>
  			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	<listener>
		<listener-class>
			org.springframework.web.context.request.RequestContextListener
  		</listener-class>
	</listener>
  
</web-app>[/XML]

Und mein springproj-servlet.xml hat folgenden Inhalt:
[XML]<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">
 
	<context:component-scan base-package="de.springproj.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>
 
</beans>[/XML]

Wenn ich jetzt im Browser http://localhost:8080/SpringProj/ aufrufe, oder auch http://localhost:8080/SpringProj/infos/scanner.html, funktioniert alles wunderbar, versuche ich aber am Ende mas.html oder sas.html, bekomme ich nur eine Seite mit "Not Found" und im Tracelog 

14:28:56,138 WARN [org.springframework.web.servlet.PageNotFound] (default task-31) No mapping found for HTTP request with URI [/SpringProj/infos/mas.html] in DispatcherServlet with name ‘springproj’



Hat da vielleicht einer eine Idee?

#2

Hmm, da ich meinen Beitrag scheinbar nicht mehr editieren kann:

Ich habe das Problem jetzt umgangen, indem ich einfach für jede Seite einen neuen Controller mache. Ist zwar leider nicht das was ich wollte, aber so funktioniert es :slight_smile:


#3

Eigentlich sollte es für den * im RequestMapping des Controllers keinen Grund geben. Versuch doch einfach mal “/infos”. Spring ist dann von selber dazu in der Lage drei Routen “/infos/scanner”, “/infos/mas” und “/infos/sas” zu erzeugen.

Weiterhin ist der Weg über die XML Konfiguration ein wenig verstaubt.


#4

Habe mittlerweile einen zweiten Controller (für einen Abschnitt im Programm), der Funktioniert einwandfrei, aber der Controller aus dem Abschnitt oben, wenn ich den erweiter will er nicht…

Aber naja, funktioniert jetzt ja trotzdem soweit, danke :slight_smile: