2016-03-16 2 views
0

Я пытаюсь создать проект Boot/MVC. Когда я запускаю Tomcat, страницы отображаются отлично, но когда я пытаюсь добавить что-либо с моим объектом ModelAndView, на странице ничего не появляется. На консоли не отобразится даже System.out.println("anything").Spring Boot: контроллер ничего не делает

Вот Application.java

package com.markham.main; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

} 

IndexController.java:

package com.markham.main; 

import java.util.ArrayList; 
import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.PersistenceContextType; 
import javax.persistence.TypedQuery; 

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.servlet.ModelAndView; 

@RestController 
public class IndexController { 

    @PersistenceContext(type = PersistenceContextType.TRANSACTION) 
    private EntityManager em; 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public ModelAndView index() { 
     ModelAndView view = new ModelAndView(); 
     List<User> users = new ArrayList<User>(); 

     TypedQuery<User> query1 = em.createNamedQuery("User.getAllUsers", User.class); 
     users = query1.getResultList(); 
     System.out.println("HERE'S THE THING---" + users); //This doesn't even print 
     view.addObject("users", users); 
     return view; 
    } 

} 

Как я могу сделать это так, мой контроллер работает с моей index.jsp - страница по умолчанию?

Если вам нужно больше кода, просто спросите, и я поставлю его.

EDIT:

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>guru.springframework</groupId> 
    <artifactId>spring-boot-web</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>Spring Boot Web Application</name> 
    <description>Spring Boot Web Application</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.3.RELEASE</version> 
    </parent> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 

     <dependency> 
      <groupId>org.apache.tomcat</groupId> 
      <artifactId>tomcat-jsp-api</artifactId> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-thymeleaf</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

application.properties:

spring.datasource.url = jdbc:mysql://example 

spring.datasource.username = example 
spring.datasource.password = example 

# Keep the connection alive if idle for a long time (needed in production) 
spring.datasource.testWhileIdle = true 
spring.datasource.validationQuery = SELECT 1 

# Show or not log for each sql query 
spring.jpa.show-sql = true 

spring.jpa.hibernate.ddl-auto = update 

spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy 

# Allows Hibernate to generate SQL optimized for a particular DBMS 
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect 

Edit # 2: Это URL я доступ к http://localhost:8080/BootApp/

Здесь бревна:

Mar 16, 2016 6:13:57 PM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:BootApp' did not find a matching property. 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Server version:  Apache Tomcat/8.0.26 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Server built:   Aug 18 2015 11:38:37 UTC 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Server number:   8.0.26.0 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: OS Name:    Mac OS X 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: OS Version:   10.11.3 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Architecture:   x86_64 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Java Home:    /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: JVM Version:   1.8.0_60-b27 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: JVM Vendor:   Oracle Corporation 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: CATALINA_BASE:   /Users/ben/Documents/workspace/rabbitmq/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: CATALINA_HOME:   /Users/ben/Downloads/apache-tomcat-8.0.26 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dcatalina.base=/Users/ben/Documents/workspace/rabbitmq/.metadata/.plugins/org.eclipse.wst.server.core/tmp0 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dcatalina.home=/Users/ben/Downloads/apache-tomcat-8.0.26 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dwtp.deploy=/Users/ben/Documents/workspace/rabbitmq/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Djava.endorsed.dirs=/Users/ben/Downloads/apache-tomcat-8.0.26/endorsed 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dfile.encoding=UTF-8 
Mar 16, 2016 6:13:57 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/ben/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:. 
Mar 16, 2016 6:13:57 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["http-nio-8080"] 
Mar 16, 2016 6:13:57 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 
INFO: Using a shared selector for servlet write/read 
Mar 16, 2016 6:13:57 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["ajp-nio-8009"] 
Mar 16, 2016 6:13:57 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 
INFO: Using a shared selector for servlet write/read 
Mar 16, 2016 6:13:57 PM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 891 ms 
Mar 16, 2016 6:13:57 PM org.apache.catalina.core.StandardService startInternal 
INFO: Starting service Catalina 
Mar 16, 2016 6:13:57 PM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/8.0.26 
Mar 16, 2016 6:13:57 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
WARNING: Name = samsung Property maxActive is not used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have set value of "-1" for "maxActive" property, which is being ignored. 
Mar 16, 2016 6:13:57 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
WARNING: Name = samsung Property maxWait is not used in DBCP2 , use maxWaitMillis instead. maxWaitMillis default value is -1. You have set value of "-1" for "maxWait" property, which is being ignored. 
Mar 16, 2016 6:13:57 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
INFO: Name = samsung Ignoring unknown property: value of "true" for "spring.datasource.testOnBorrow" property 
Mar 16, 2016 6:13:57 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
INFO: Name = samsung Ignoring unknown property: value of "SELECT 1" for "spring.datasource.validationQuery" property 
Mar 16, 2016 6:13:57 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
INFO: Name = samsung Ignoring unknown property: value of "true" for "autoReconnect" property 
Mar 16, 2016 6:13:57 PM org.apache.jasper.servlet.TldScanner scanJars 
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 
Mar 16, 2016 6:14:00 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
WARNING: Name = samsung Property maxActive is not used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have set value of "-1" for "maxActive" property, which is being ignored. 
Mar 16, 2016 6:14:00 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
WARNING: Name = samsung Property maxWait is not used in DBCP2 , use maxWaitMillis instead. maxWaitMillis default value is -1. You have set value of "-1" for "maxWait" property, which is being ignored. 
Mar 16, 2016 6:14:00 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
INFO: Name = samsung Ignoring unknown property: value of "true" for "spring.datasource.testOnBorrow" property 
Mar 16, 2016 6:14:00 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
INFO: Name = samsung Ignoring unknown property: value of "SELECT 1" for "spring.datasource.validationQuery" property 
Mar 16, 2016 6:14:00 PM org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory getObjectInstance 
INFO: Name = samsung Ignoring unknown property: value of "true" for "autoReconnect" property 
Mar 16, 2016 6:14:01 PM org.apache.jasper.servlet.TldScanner scanJars 
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 
Mar 16, 2016 6:14:01 PM org.apache.catalina.core.ApplicationContext log 
INFO: Spring WebApplicationInitializers detected on classpath: [org.springframework.boot.autoconfigure[email protected]60111f5c] 
Mar 16, 2016 6:14:01 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-nio-8080"] 
Mar 16, 2016 6:14:01 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-nio-8009"] 
Mar 16, 2016 6:14:01 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 3713 ms 

EDIT # 3 (спасибо за помощь всем): После выполнения mvn spring-boot:run, появляется эта ошибка:

[ERROR] No plugin found for prefix 'spring-boot' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/Users/ben/.m2/repository), central (https://repo.maven.apache.org/maven2)] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoPluginFoundForPrefixException 
+0

Как вы управляете контроллером? Какой URL-адрес вы создаете для доступа к нему? –

+0

@BhushanBhangale по умолчанию 'localhost: 8080/BootApp /' – bmarkham

+0

@bmarkham вы запускаете его как весеннюю загрузку (встроенный tomcat)? опубликуйте свои pom.xml и application.properties также –

ответ

0

Хорошо, так что я, наконец, получил его на работу благодаря почти всем, кто помогал.

@BalajiKrishnan был прав, когда я не запускал его как приложение Spring Boot. Я изменил его с банки на войну и использовал mvn spring-boot:run, и теперь он работает как приложение Spring Boot.

Тем не менее, я все еще получал 404 errors и использовал ответ @shazin, чтобы изменить мой application.properties способ, которым он опубликовал.

Все еще получало 404 errors, поэтому я изменил свой URL-адрес от localhost:8080/BootApp/ до localhost:8080, как и @EpicPandaForce, который предлагается в комментариях.

И я изменил, я использовал ModelAndView view = new ModelAndView("index");, как и предложил @shazin.

Спасибо всем, кто внес свой вклад!

1

Ваш ModelAndView не говорит, какой файл он хочет получить доступ к

@RequestMapping(value = "/", method = RequestMethod.GET) 
public ModelAndView index() { 
    ModelAndView view = new ModelAndView("index"); // This line 
    List<User> users = new ArrayList<User>(); 

    TypedQuery<User> query1 = em.createNamedQuery("User.getAllUsers", User.class); 
    users = query1.getResultList(); 
    System.out.println("HERE'S THE THING---" + users); //This doesn't even print 
    view.addObject("users", users); 
    return view; 
} 

У вашего application.properties нет конфигураций резольвера MVC View Resolver.

spring.mvc.view.prefix=<Path To Jsp> 
spring.mvc.view.suffix=.jsp 

Прежде всего внесите эти изменения.

+0

К сожалению, это не решило проблему :(Я ценю ответ tho. – bmarkham

1

Проблема: вы пытаетесь запустить приложение SpringBoot на внешнем сервере, а не во встроенном tomcat.


Запуск в качестве пружинной загрузки во встроенном контейнере: Для запуска в использовании загрузочного яровой mvn spring-boot:run команды в директории, содержащей pom.xml. Я предлагаю вам пройти руководство по началу работы с https://spring.io/guides/gs/serving-web-content/.


Развертывание на внешнем сервере Если вы хотите разместить на внешнем сервере, изменить упаковку из кувшина на войну и развернуть архив войны. Ссылка для развертывания на WAS https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html

+0

Я также изменил с jar на war файл, и он работает ... Вид .. Я получаю сообщение об ошибке 404, но это на самом деле из Spring Boot сейчас. Вот ошибка. «Была непредвиденная ошибка (type = Not Found, status = 404)./src/main/resources/templates/index.jsp' Это правильный путь к моему jsp – bmarkham

0

Если вы хотите перенаправить запрос на указанную страницу. Вы должны передать это имя страницы в качестве параметра при создании ModelAndView объект.

Пример: Если вы хотите, чтобы перенаправить запрос на welcome.jsp странице, то вы можете создать ModelAndView как следующее:

ModelAndView view = new ModelAndView("welcome.jsp"); 
//code as per your requirement 
return view; 

И вам нужно следующее зависимость в вашем pom.xml файл.

<dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
     <scope>provided</scope> 
</dependency> 

Примечание: Я предполагаю, что ваш welcome.jsp страница в следующем пакете:

src/main/webapp 

Вы можете найти простое демонстрационное приложение here.

+0

Извините , все еще получая ошибки :( – bmarkham

+0

@bmarkham Я работаю правильно. Можете ли вы сообщить мне, какую ошибку вы получили? – Yubaraj

1

изменение @RestController с @Controller в IndexController.class

и добавить wiew страницу MAME ModelAndView объект

ModelAndView view = new ModelAndView("index.jsp"); 

и index.jsp spring boot default location src/main/webapp

Смежные вопросы