Spring Framework JSP form post

I am attempting my first JSP form post using Maven and the Spring Framework in NetBeans 8.1 using the GlassFish Server 4.1.1.

When I run the application my home page opens fine which is my index.jsp and the url is localhost:8080/mavenproject1.

When I click the submit button on my form I the url is localhost:8080/selectSearch with a 404 not found error. Below are the files I think would be involved with making this work and the project structure.

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>mavenproject1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<name>mavenproject1</name>

<properties>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.0.1.RELEASE</spring.version>
    <jstl.version>1.2</jstl.version>
    <javax.servlet.version>3.0.1</javax.servlet.version>
</properties>

<dependencies>
    <dependency>
        <groupId>mssql</groupId>
        <artifactId>sqljdbc42</artifactId>
        <version>4.2.6420.100</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>  
        <groupId>javax.servlet</groupId>  
        <artifactId>javax.servlet-api</artifactId>  
        <version>${javax.servlet.version}</version>  
        <scope>provided</scope> 
    </dependency> 

    <dependency>  
        <groupId>jstl</groupId>  
        <artifactId>jstl</artifactId>  
        <version>${jstl.version}</version>  
    </dependency>  

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.0.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>3.2.4</version>
    </dependency>

</dependencies>

<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>
    </plugins>
</build>

WebInitializer.java

 package com.mycompany.config;

 import javax.servlet.ServletContext;  
 import javax.servlet.ServletException;  
 import javax.servlet.ServletRegistration.Dynamic;  

 import org.springframework.web.WebApplicationInitializer;  
 import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;  
 import org.springframework.web.servlet.DispatcherServlet;  

 public class WebInitializer implements WebApplicationInitializer {

     @Override
     public void onStartup(ServletContext servletContext) throws ServletException {        
         AnnotationConfigWebApplicationContext ctx = new      AnnotationConfigWebApplicationContext();  
         ctx.register(AppConfig.class);  
         ctx.setServletContext(servletContext);    
         Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));  
         servlet.addMapping("/");  
         servlet.setLoadOnStartup(1);
     }

}

AppConfig.java

 package com.mycompany.config;

 import org.springframework.context.annotation.Bean;  
 import org.springframework.context.annotation.ComponentScan;  
 import org.springframework.context.annotation.Configuration;  
 import org.springframework.web.servlet.config.annotation.EnableWebMvc;  
      import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 import org.springframework.web.servlet.view.JstlView;  
 import org.springframework.web.servlet.view.UrlBasedViewResolver;  


 @Configuration
 @ComponentScan("com.mycompany")
 @EnableWebMvc   
 public class AppConfig extends WebMvcConfigurerAdapter {  

     @Bean  
         public UrlBasedViewResolver setupViewResolver() {  
         UrlBasedViewResolver resolver = new UrlBasedViewResolver();  
         resolver.setPrefix("/WEB-INF/jsp/");  
         resolver.setSuffix(".jsp");  
         resolver.setViewClass(JstlView.class);  
         return resolver;  
     }

     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/*");
     }
 }

DefaultController.java

 package com.mycompany.controllers;


 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;



 @Controller
 public class DefaultController {
      public static void main(String[] args) throws Exception {

     }

   @RequestMapping(value = "/", method = RequestMethod.GET)
     public String index(ModelMap map) {

        return "index";
     }

   @RequestMapping(value = "/searchSelect", method = RequestMethod.POST)
     public String x(ModelMap map) {
        return "x";
     }

 }

jsp form

 <form id="agreeForm" class="form" method="post" action="/searchSelect">
    <div class="row">
        <div class="col-lg-4">
            <div class="input-group">
                <label class="checkbox-inline"><input type="checkbox" id="agreeChk" name="agreeChk" required>Agree</label>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-4">
            <div class="input-group">
                <button type="submit" class="btn btn-success">Continue</button>
            </div>
        </div>
    </div>
</form>

Answers


What's happening is it can't find x.jsp. If you were to annotate the method

public String x(ModelMap map)

like this

public @ResponseBody String x(ModelMap map)

Then it will simply return "x", but as it stands now, it's trying to find x.jsp which doesn't exist.

Or you could change it to return selectSearch instead because you have a view corresponding to that name, like this:

@RequestMapping(value = "/searchSelect", method = RequestMethod.POST)
 public String x(ModelMap map) {
    return "searchSelect";
 }

Need Your Help

Twitter bootstrap - DIV absolute positon to an image responsive enlarging

html css twitter-bootstrap media-queries absolute

I have an image as a background with a div overlaying it. I'm trying to find ways to make it responsive and cover more of the picture as it gets smaller. I'm tried the below but I don't think even ...

Partial page refresh for evary X seconds with Jquery and Ajax?

ajax jquery

1) I have to change images dynamically according to values for every x seconds.