Tuesday 15 July 2014

java - No mapping found for HTTP request with URI (spring 4.1 annotation configuration) -



java - No mapping found for HTTP request with URI (spring 4.1 annotation configuration) -

first of all, please don't lock thread, please. i've read questions, , still cannot solve problem. i'm studying how utilize annotation on spring without configuring xml files. i'm stucking error:

no mapping found http request uri [/web-inf/index.jsp] in dispatcherservlet name 'dispatcherservlet'

project construction

pom.xml

<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.mycompany</groupid> <artifactid>spring-sample</artifactid> <version>1.0</version> <packaging>war</packaging> <name>spring-sample</name> <properties> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceencoding>utf-8</project.build.sourceencoding> </properties> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>1.2.0.m2</version> </parent> <dependencies> <dependency> <groupid>javax</groupid> <artifactid>javaee-web-api</artifactid> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> </dependencies> <repositories> <repository> <id>spring-milestones</id> <name>spring milestones</name> <url>http://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginrepositories> <pluginrepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginrepository> <pluginrepository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </pluginrepository> </pluginrepositories> <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> <compilerarguments> <endorseddirs>${endorsed.dir}</endorseddirs> </compilerarguments> </configuration> </plugin> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-war-plugin</artifactid> <version>2.3</version> <configuration> <failonmissingwebxml>false</failonmissingwebxml> </configuration> </plugin> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-dependency-plugin</artifactid> <version>2.6</version> <executions> <execution> <phase>validate</phase> <goals> <goal>copy</goal> </goals> <configuration> <outputdirectory>${endorsed.dir}</outputdirectory> <silent>true</silent> <artifactitems> <artifactitem> <groupid>javax</groupid> <artifactid>javaee-endorsed-api</artifactid> <version>7.0</version> <type>jar</type> </artifactitem> </artifactitems> </configuration> </execution> </executions> </plugin> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

this configuration class:

@componentscan(basepackages = "com.sample.spring") @enableautoconfiguration @enablewebmvc @org.springframework.context.annotation.configuration public class mainapp extends webmvcconfigureradapter implements webapplicationinitializer { @override public void onstartup(servletcontext sc) throws servletexception { // create 'root' spring application context annotationconfigwebapplicationcontext rootcontext = new annotationconfigwebapplicationcontext(); rootcontext.register(mainapp.class); // manage lifecycle of root application context sc.addlistener(new contextloaderlistener(rootcontext)); servletregistration.dynamic registration = sc.addservlet("dispatcher", new dispatcherservlet()); registration.setloadonstartup(1); registration.addmapping("/"); } @bean public viewresolver configureviewresolver() { internalresourceviewresolver viewresolve = new internalresourceviewresolver(); viewresolve.setprefix("/web-inf/"); viewresolve.setsuffix(".jsp"); homecoming viewresolve; } @bean public requestmappinghandlermapping requestmappinghandlermapping() { homecoming new requestmappinghandlermapping(); } @bean public requestmappinghandleradapter requestmappinghandleradapter() { homecoming new requestmappinghandleradapter(); } public static void main(string[] args) { springapplication.run(mainapp.class, args); } }

this controller:

@org.springframework.stereotype.controller public class controller { @requestmapping(value="/", method = requestmethod.get) public string index(){ homecoming "index"; } }

index.jsp within web-inf folders, , there nil within web.xml file. think far configuration right because can redirect /web-inf/index.jsp. however, think i'm missing configuration create application understand path. (/web-inf/index.jsp)

given you're using spring boot, configuration far more complicated needs be. boot automatically configure dispatcherservlet, viewresolver, requestmappinghandlermapping, , requestmappinghandleradapter you.

take @ spring boot's jsp sample see how little configuration need.

in add-on removing pretty much of manual configuration, 1 key difference main application class should extend springbootservletinitializer rather implementing spring's webapplicationinitializer directly. here's equivalent class in aforementioned sample:

package sample.jsp; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.enableautoconfiguration; import org.springframework.boot.builder.springapplicationbuilder; import org.springframework.boot.context.web.springbootservletinitializer; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; @configuration @enableautoconfiguration @componentscan public class samplewebjspapplication extends springbootservletinitializer { @override protected springapplicationbuilder configure(springapplicationbuilder application) { homecoming application.sources(samplewebjspapplication.class); } public static void main(string[] args) throws exception { springapplication.run(samplewebjspapplication.class, args); } }

the main method used when launched war file using java -jar , configure method used when war deployed separate servlet container.

also note sample's utilize of application.properties configure view prefix , suffix.

java maven spring-mvc spring-boot spring-4

No comments:

Post a Comment