スタックオーバーフロー!
問題
私は数日間、この厄介なバグを戦ってきました。私は同じような状況で多くのを見つけたが、その解像度は私のために働いていません。私は春のブートを使用していると私は私のプロジェクトのホームページを作るしようとしています。現在、私のコントローラクラスの内部には、私は、このセットアップを持っています:
@RequestMapping("/")
public String getHomePage(Map<String, Object> model) {
return "home";
}
私がいる問題は、私が「/」URLをロードしようとしたとき、私はこのエラーメッセージを取得することです:
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Mar 25 14:46:01 MDT 2020
There was an unexpected error (type=Internal Server Error, status=500).
Could not resolve view with name 'home' in servlet with name 'dispatcherServlet'
javax.servlet.ServletException: Could not resolve view with name 'home' in servlet with name 'dispatcherServlet'
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1353)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1118)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1057)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at
このログから、私のコントローラはhome.jspをホームページを見つけることができないことが表示されます。私はもともと資源/ビュー/フォルダの私の.jspページの内部を持っていたと信じています。
私は他人の経験を通じて問題を調査してきました:
RequestMapping DisplatcherServlet何マッピングが見つかりませんでした。この記事は、彼らのREST APIが正しく動作していないが、予想通り、私のAPIのすべてのコンポーネントが動作しているを示しています。
デフォルトでは、どこ春ブーツは、ビューが保存されることを期待しますか?彼の調査結果は興味深いものでした。
それは選ばれた組み込みコンテナに応じた制限がありますようJSPは単に春ブーツとうまく再生されない ... [さらに彼は、必要があるすべてがされて説明] ViewName.htmlが置かという名前のビューでデフォルト春ブーツのテンプレートと2つのThymeLeafの依存関係SRC /メイン/リソース/テンプレートで[必要とされているすべてです]。
しかし、でも、thymeleaf depenenciesとthymeleaf-spring4を追加する(デフォルトに設定するには)私のspring.mvc.view.prefixとspring.mvc.view.suffixを除去し、私の家をコピーして自分のプロジェクトを変更しようとしました。 SRC /メイン/リソース/ templatesフォルダにhtmlファイル、問題が継続します。
ロストドラフト
私は実際にはもともとここに記載されているいくつかのより多くの情報源を持っていましたが、私のドラフトが失われたと私は再びそれらの記事のすべてを徹底的に調査するために気にすることはできません。私はこの質問を投稿取得する必要があります。他のソースは、私は私のhome.html / home.jspをを置く場所のバリエーションを持っていました。そして、すべての提案で、私は彼らの両方のアウトをテストするために.jspファイルと.htmlの間のスイッチにしてください。いくつかは、META-INFが正常に働いていなかったとあなたがフォルダ名としてそれを持っていなかったにすると述べました。いくつかは、あなたが関数にために巣に、現在、既存のリソースフォルダ内のリソースフォルダを必要とすると述べました。私もこれらの修正プログラムに従ったが、どれも成功し働いていません。エラーの変化は、まだhome.jspを/ home.htmlを見つけることができませんでした、だけでなくありませんでした。私は、これらのソリューションをテストするために私のapplication.properties何回も更新しました
spring.mvc.view.prefix=/resources/view/
spring.mvc.view.suffix=.html
私は私の春バージョン(2.2.5.RELEASE)を最新の状態にしていることを確認しました。もう一つの小さなノートでは、私は春データRESTを使用していますが、私の残りのAPIが設定されているに/ API /
:あなたはここに私のリポジトリが表示されることがありhttps://github.com/CloakingOcean/CampaignChronicle
また、私はここでの主なファイルと私の依存関係を一覧表示されます。
エラーメッセージ:
ファイル構造:
(他の試験フォルダが意図home.htmlの位置を明確にするために除去されます)
CampaignchronicleApplication.java
package com.exitium.campaignchronicle;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@SpringBootApplication
@EnableWebMvc
public class CampaignchronicleApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(CampaignchronicleApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(CampaignchronicleApplication.class, args);
}
}
MainController.java
package com.exitium.campaignchronicle.controller;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Controller
public class MainController {
@RequestMapping("/")
public String getHomePage(Map<String, Object> model) {
return "home";
}
}
application.properties
#
# JDBC properties
#
spring.datasource.url=jdbc:mysql://localhost:3306/campaignchronicle
spring.datasource.username=cloakingocean
spring.datasource.password=9QfsJGA4V6M74LB
#
# Spring Data REST properties
#
spring.data.rest.base-path=/api
spring.mvc.view.prefix=/resources/view/
spring.mvc.view.suffix=.html
# ==============================================================
# = Logging springframework
# ==============================================================
logging.level.org.springframework.jdbc=DEBUG
logging.level.org.springframework.security=DEBUG
logging.level.org.springframework.web=DEBUG
logging.level.org.springframework.http=DEBUG
SecurityConfig.java
package com.exitium.campaignchronicle.config;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
DataSource dataSource;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and().formLogin().permitAll();
}
@Bean
public PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder();
}
}
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.exitium</groupId>
<artifactId>campaignchronicle</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>campaignchronicle</name>
<description>Note taking application for Dungeons & Dragons players</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Add dependency for Spring Data REST -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- <dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
-->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>9.0.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
私は、我々が使用することができると思いますThymeleaf
。
application.propertiesから以下を削除します
spring.mvc.view.prefix=/resources/view/
spring.mvc.view.suffix=.html
代わりに、JSP&JSLTのthymeleafテンプレートエンジンを使用するには、依存関係を追加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
デフォルトではthymeleafはになりますsrc/main/resources/templates
と.html
の戦争変更デフォルトの設定として展開するには、ファイル(jarファイルのデプロイ)application.properties
参考:https://github.com/hovermind/springboot-mvc/blob/master/README.md#thymeleaf-instead-of-jsp