I am relatively new to spring 4. i am not able to get the page navigation to work. i looked through the documentation and other forums for help, but I am not able to figure out where I am going wrong. can someone please help..
I get 404 when I try to access reigister.html.
**HomeController**:
package com.tusar.noticeboard.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/")
private String showurl() {
return"home"; //this work properly
}
}
Here is my another controller class:
package com.tusar.noticeboard.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class RegistrationController {
@RequestMapping (value="/register",method=RequestMethod.GET)
public String showRegistrationpage(){
return"registration"; //when i mapped this page it not working properly
}
}
Here is my main class:
package com.tusar.noticeboard;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class NoticeboardApplication {
public static void main(String[] args) {
SpringApplication.run(NoticeboardApplication.class, args);
}
}
The home.html file (this is my home html file code below)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="" />
<meta name="author" content="" />
<title>Home</title>
<!-- Bootstrap core CSS -->
<link href="webjars/bootstrap/3.3.5/css/bootstrap.min.css"
rel="stylesheet" />
<!-- Custom styles for this template -->
<link href="css/carousel.css" rel="stylesheet" />
</head>
<!-- NAVBAR
================================================== -->
<body>
<div class="navbar-wrapper">
<div class="container">
<nav class="navbar navbar-inverse navbar-static-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span> <span
class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">Dropdown <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">Nav header</li>
<li><a href="#">Separated link</a></li>
<li><a href="#">One more separated link</a></li>
</ul></li>
</ul>
</div>
</div>
</nav>
</div>
</div>
<!-- Carousel
================================================== -->
<div id="myCarousel" class="carousel slide" data-ride="carousel">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<div class="carousel-inner" role="listbox">
<div class="item active">
<img class="first-slide"
src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
alt="First slide"></img>
<div class="container">
<div class="carousel-caption">
<h1>Example headline.</h1>
<p>
Note: If you're viewing this page via a
<code>file://</code>
URL, the "next" and "previous" Glyphicon buttons on the left and
right might not load/display properly due to web browser security
rules.
</p>
<p>
<a class="btn btn-lg btn-primary" href="#" role="button">Sign
up today</a>
</p>
</div>
</div>
</div>
<div class="item">
<img class="second-slide"
src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
alt="Second slide" />
<div class="container">
<div class="carousel-caption">
<h1>Another example headline.</h1>
<p>Cras justo odio, dapibus ac facilisis in, egestas eget
quam. Donec id elit non mi porta gravida at eget metus. Nullam id
dolor id nibh ultricies vehicula ut id elit.</p>
<p>
<a class="btn btn-lg btn-primary" href="#" role="button">Learn
more</a>
</p>
</div>
</div>
</div>
<div class="item">
<img class="third-slide"
src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
alt="Third slide" />
<div class="container">
<div class="carousel-caption">
<h1>One more for good measure.</h1>
<p>Cras justo odio, dapibus ac facilisis in, egestas eget
quam. Donec id elit non mi porta gravida at eget metus. Nullam id
dolor id nibh ultricies vehicula ut id elit.</p>
<p>
<a class="btn btn-lg btn-primary" href="#" role="button">Browse
gallery</a>
</p>
</div>
</div>
</div>
</div>
<a class="left carousel-control" href="#myCarousel" role="button"
data-slide="prev"> <span class="glyphicon glyphicon-chevron-left"
aria-hidden="true"></span> <span class="sr-only">Previous</span>
</a> <a class="right carousel-control" href="#myCarousel" role="button"
data-slide="next"> <span
class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
<!-- /.carousel -->
<!-- Marketing messaging and featurettes
================================================== -->
<!-- Wrap the rest of the page in another container to center all the content. -->
<div class="container marketing">
<!-- Three columns of text below the carousel -->
<div class="row">
<div class="col-lg-4">
<img class="img-circle"
src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
alt="Generic placeholder image" width="140" height="140" />
<h2>Notices 1</h2>
<p>Donec sed odio dui. Etiam porta sem malesuada magna mollis
euismod. Nullam id dolor id nibh ultricies vehicula ut id elit.
Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Praesent commodo cursus magna.</p>
<p>
<a class="btn btn-default" href="#" role="button">View details
»</a>
</p>
</div>
<!-- /.col-lg-4 -->
<div class="col-lg-4">
<img class="img-circle"
src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
alt="Generic placeholder image" width="140" height="140" />
<h2>Notices 2</h2>
<p>Duis mollis, est non commodo luctus, nisi erat porttitor
ligula, eget lacinia odio sem nec elit. Cras mattis consectetur
purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo,
tortor mauris condimentum nibh.</p>
<p>
<a class="btn btn-default" href="#" role="button">View details
»</a>
</p>
</div>
<!-- /.col-lg-4 -->
<div class="col-lg-4">
<img class="img-circle"
src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
alt="Generic placeholder image" width="140" height="140" />
<h2>Notices 3</h2>
<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in,
egestas eget quam. Vestibulum id ligula porta felis euismod semper.
Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum
nibh, ut fermentum massa justo sit amet risus.</p>
<p>
<a class="btn btn-default" href="#" role="button">View details
»</a>
</p>
</div>
<!-- /.col-lg-4 -->
</div>
<!-- /.row -->
<!-- START THE FEATURETTES -->
<hr class="featurette-divider" />
<div class="row featurette">
<div class="col-md-7">
<h2 class="featurette-heading">
First featurette heading. <span class="text-muted">It'll
blow your mind.</span>
</h2>
<p class="lead">Donec ullamcorper nulla non metus auctor
fringilla. Vestibulum id ligula porta felis euismod semper.
Praesent commodo cursus magna, vel scelerisque nisl consectetur.
Fusce dapibus, tellus ac cursus commodo.</p>
</div>
<div class="col-md-5">
<img class="featurette-image img-responsive center-block"
data-src="holder.js/500x500/auto" alt="Generic placeholder image" />
</div>
</div>
<hr class="featurette-divider" />
<div class="row featurette">
<div class="col-md-7 col-md-push-5">
<h2 class="featurette-heading">
Oh yeah, it's that good. <span class="text-muted">See for
yourself.</span>
</h2>
<p class="lead">Donec ullamcorper nulla non metus auctor
fringilla. Vestibulum id ligula porta felis euismod semper.
Praesent commodo cursus magna, vel scelerisque nisl consectetur.
Fusce dapibus, tellus ac cursus commodo.</p>
</div>
<div class="col-md-5 col-md-pull-7">
<img class="featurette-image img-responsive center-block"
data-src="holder.js/500x500/auto" alt="Generic placeholder image" />
</div>
</div>
<hr class="featurette-divider" />
<div class="row featurette">
<div class="col-md-7">
<h2 class="featurette-heading">
And lastly, this one. <span class="text-muted">Checkmate.</span>
</h2>
<p class="lead">Donec ullamcorper nulla non metus auctor
fringilla. Vestibulum id ligula porta felis euismod semper.
Praesent commodo cursus magna, vel scelerisque nisl consectetur.
Fusce dapibus, tellus ac cursus commodo.</p>
</div>
<div class="col-md-5">
<img class="featurette-image img-responsive center-block"
data-src="holder.js/500x500/auto" alt="Generic placeholder image" />
</div>
</div>
<hr class="featurette-divider" />
<!-- /END THE FEATURETTES -->
<!-- FOOTER -->
<footer>
<p class="pull-right">
<a href="#">Back to top</a>
</p>
<p>
© 2015 By Tusar, Inc. · <a href="#">Privacy</a> ·
<a href="#">Terms</a>
</p>
</footer>
</div>
<!-- /.container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="../../dist/js/bootstrap.min.js"></script>
<!-- Just to make our placeholder images work. Don't actually copy the next line! -->
<script src="../../assets/js/vendor/holder.min.js"></script>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<script src="../../assets/js/ie10-viewport-bug-workaround.js"></script>
</body>
</html>
The registration.html file:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
xmlns:th="http://www.thymeleaf.org"
xmlns:layout:decorator="layout/main">
<head>
<title>Registration</title>
</head>
<body>
<div layout:fragment="content">
<div class="container">
<br /><br /><br />
<h1>This is the child of home file and come to via home </h1>
</div>
</div>
</body>
</html>
When I run my Spring Boot app it works properly but when I'm trying to run /register page it not working.
这里是gradle文件:我正在使用gradle项目下面给出了gradle文件:这是一个带有web,mysql和thymleaf签入的spring starter项目,我认为它工作正常但是我错了什么是错的当我键入localhost:8080 / register
buildscript {
ext {
springBootVersion = '1.2.4.RELEASE'
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("io.spring.gradle:dependency-management-plugin:0.5.1.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'
war {
baseName = 'noticeboard'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
}
configurations {
providedRuntime
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-web")
runtime("mysql:mysql-connector-java")
compile 'org.webjars:bootstrap:3.3.5'
compile 'nz.net.ultraq.thymeleaf:thymleaf-layout-dialect:1.2.5'
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
eclipse {
classpath {
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
构建,gradle文件被赋予
ServletInitializer类扩展了SpringBootServletInitializer
package com.tusar.noticeboard;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(NoticeboardApplication.class);
}
}
这是我的servletinitialize类源代码,我不改变它,当我创建我的project.in templates文件夹时它给我自动地我创建了两个html文件whice home并注册,我还在模板中创建了一个名为layout的文件夹whice包含main.html文件
我删除了main.html文件所在的模板中的文件夹布局,并将main,html文件复制到src / main / resource下的模板中,然后编辑registration.html文件:layout:decorator =“main”,然后它工作正常,但这也应该是在模板下的布局文件夹中使用main.html文件的正确方法。但为什么它不适合我,我无法找到。这是如此令人困惑,有谁帮助我?