2016-09-21 4 views
0

Я пытаюсь создать свой первый пост в формате JSP, используя Maven и Spring Framework в NetBeans 8.1, используя GlassFish Server 4.1.1.Spring Framework JSP form post

Когда я запускаю приложение, моя домашняя страница открывается отлично, что является моим index.jsp, а url - localhost: 8080/mavenproject1.

Когда я нажимаю кнопку отправки в своей форме, я URL-адрес localhost: 8080/selectSearch с ошибкой 404. Ниже приведены файлы, которые, я думаю, будут связаны с выполнением этой работы и структуры проекта.

enter image description here

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 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> 

ответ

0

Что происходит, он не может найти x.jsp. Если бы вы были аннотирования метод

public String x(ModelMap map) 

как этот

public @ResponseBody String x(ModelMap map) 

Тогда это будет просто возвращать «х», но, как она стоит сейчас, он пытается найти x.jsp, который не существует.

Или вы можете изменить его, чтобы вернуть selectSearch вместо потому что у вас есть вид, соответствующий этому имени, как это:

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

Я играл вокруг с некоторыми изменениями, и ничто, кажется, исправить эту проблему. Я заметил, что если я удалю любое сопоставление с DefaultController, чтобы выбратьSearch и установить действие в форме selectSearch или x, то ошибка будет такой же. Кажется, что мой код просто пропускает контроллер по умолчанию. Я новичок в Java, поэтому не уверен, нужен ли мне контроллер для каждого jsp. – dutchlab

+0

Я получил его, чтобы найти searchSelect jsp, но теперь он показывает возвращаемое значение x не html в searchSelect.jsp – dutchlab

+0

@dutchlab, тогда он на самом деле не находит «searchSelect jsp», он просто вызывает метод обработчика в вашем 'Controller' , Вам нужно вернуть строку «searchSelect» из вашего метода и _do not_ использовать аннотацию '@ ResponseBody' –