我是SpringBoot的新手,我正在尝试开发一个用户注册和登录系统。
在eclipse上运行程序后,程序启动成功; Started CustomerApplication in 2.318 seconds (JVM running for 2.938)
.
但问题是,当我尝试从浏览器访问页面时,它会不断加载我的thymeleaf页面。
控制台上写着: Initializing Spring DispatcherServlet 'dispatcherServlet'
我的 useraccountcontroller.java
控制器类:
@Controller
public class UserAccountController {
@Autowired
private CustomerRepository userRepository;
@Autowired
private ConfirmationTokenRepository confirmationTokenRepository;
@Autowired
private EmailSenderService emailSenderService;
@RequestMapping(value="/register", method = RequestMethod.GET)
public ModelAndView displayRegistration(ModelAndView modelAndView, Customer user)
{
modelAndView.addObject("user", user);
modelAndView.setViewName("register");
return modelAndView;
}
@RequestMapping(value="/register", method = RequestMethod.POST)
public ModelAndView registerUser(ModelAndView modelAndView, Customer user)
{
Customer existingUser = userRepository.findByEmailIdIgnoreCase(user.getEmailId());
if(existingUser != null)
{
modelAndView.addObject("message","This email already exists!");
modelAndView.setViewName("error");
}
else
{
userRepository.save(user);
ConfirmationToken confirmationToken = new ConfirmationToken(user);
confirmationTokenRepository.save(confirmationToken);
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setTo(user.getEmailId());
mailMessage.setSubject("Complete Registration!");
mailMessage.setFrom("rukshan033@gmail.com");
mailMessage.setText("To confirm your account, please click here : "
+"http://localhost:8082/confirm-account?token="+confirmationToken.getConfirmationToken());
emailSenderService.sendEmail(mailMessage);
modelAndView.addObject("emailId", user.getEmailId());
modelAndView.setViewName("successfulRegisteration");
}
return modelAndView;
}
@RequestMapping(value="/confirm-account", method= {RequestMethod.GET, RequestMethod.POST})
public ModelAndView confirmUserAccount(ModelAndView modelAndView, @RequestParam("token")String confirmationToken)
{
//System.out.println("tokkon issa0: "+confirmationToken);
ConfirmationToken token = confirmationTokenRepository.findByConfirmationToken(confirmationToken);
if(token != null)
{
//System.out.println("tokkon issa1: "+token);
Customer user = token.getCustomer();
//Customer user = userRepository.findByEmailIdIgnoreCase(token.getCustomer().getEmailId());
user.setEnabled(true);
userRepository.save(user);
modelAndView.setViewName("accountVerified");
}
else
{
//System.out.println("tokkon issa2: "+token);
modelAndView.addObject("message","The link is invalid or broken!");
modelAndView.setViewName("error");
}
return modelAndView;
}
@RequestMapping(value="/login", method= {RequestMethod.GET, RequestMethod.POST})
public ModelAndView login(ModelAndView modelAndView, @RequestParam("emailID")String email, @RequestParam("password")String password)
{
Customer user = userRepository.findByEmailIdIgnoreCase(email);
if(user == null) {
modelAndView.addObject("message1","Invalid E-mail. Please try again.");
modelAndView.setViewName("login");
}
/*else if (user != null && user.getPassword()!=password) {
modelAndView.addObject("message1","Incorrect password. Please try again.");
modelAndView.setViewName("login");
}
else if (user != null && user.getPassword()==password && user.isEnabled()==false) {
modelAndView.addObject("message1","E-mail is not verified. Check you inbox for the verification link.");
modelAndView.setViewName("login");
}*/
else if (user != null && user.getPassword()==password) { //////////////////////////////////////////////////////////////
modelAndView.addObject("message1","Welcome! You are logged in.");
modelAndView.setViewName("customerAccount");
}
return modelAndView;
}
// getters and setters
public CustomerRepository getUserRepository() {
return userRepository;
}
public void setUserRepository(CustomerRepository userRepository) {
this.userRepository = userRepository;
}
public ConfirmationTokenRepository getConfirmationTokenRepository() {
return confirmationTokenRepository;
}
public void setConfirmationTokenRepository(ConfirmationTokenRepository confirmationTokenRepository) {
this.confirmationTokenRepository = confirmationTokenRepository;
}
public EmailSenderService getEmailSenderService() {
return emailSenderService;
}
public void setEmailSenderService(EmailSenderService emailSenderService) {
this.emailSenderService = emailSenderService;
}
}
我的 register.html
第页:
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<title>Registration</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- MATERIAL DESIGN ICONIC FONT -->
<link rel="stylesheet" th:href="@{fonts/material-design-iconic-font/css/material-design-iconic-font.min.css}" ></link>
<!-- Favicon -->
<link th:href="@{img/favicon.ico}" rel="shortcut icon"></link>
<!-- Google Font -->
<link th:href="@{https:fonts.googleapis.com/css?family=Josefin+Sans:300,300i,400,400i,700,700i}" rel="stylesheet" ></link>
<!-- STYLE CSS -->
<link th:href="@{/css/regstyle.css}" rel="stylesheet" ></link>
<link th:href="@{/css/style.css}" rel="stylesheet" ></link>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet" ></link>
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet" ></link>
<link th:href="@{/css/flaticon.css}" rel="stylesheet" ></link>
<link th:href="@{/css/slicknav.min.css}" rel="stylesheet" ></link>
<link th:href="@{/css/jquery-ui.min.css}" rel="stylesheet" ></link>
<link th:href="@{/css/owl.carousel.min.css}" rel="stylesheet" ></link>
<link th:href="@{/css/animate.css}" rel="stylesheet" ></link>
</head>
<body>
<!-- Page Preloder -->
<div id="preloder">
<div class="loader"></div>
</div>
<!-- Header section -->
<header class="header-section">
<div class="header-top">
<div class="container">
<div class="row">
<div class="col-lg-2 text-center text-lg-left">
<!-- logo -->
<a href="./index.html" class="site-logo">
<img src="/img/logo.png" alt=""></img>
</a>
</div>
<div class="col-xl-6 col-lg-5">
<form class="header-search-form">
<input type="text" placeholder="Search on divisima ...." /></input>
<button><i class="flaticon-search"></i></button>
</form>
</div>
<div class="col-xl-4 col-lg-5">
<div class="user-panel">
<div class="up-item">
<i class="flaticon-profile"></i>
<a href="login.html">Sign</a> In or <a href="#">Create Account</a>
</div>
<div class="up-item">
<div class="shopping-card">
<i class="flaticon-bag"></i>
<span>0</span>
</div>
<a href="#">Shopping Cart</a>
</div>
</div>
</div>
</div>
</div>
</div>
<nav class="main-navbar">
<div class="container">
<!-- menu -->
<ul class="main-menu">
<li><a href="#">Home</a></li>
<li><a href="#">Women</a></li>
<li><a href="#">Men</a></li>
<li><a href="#">Jewelry
<span class="new">New</span>
</a></li>
<li><a href="#">Shoes</a>
<ul class="sub-menu">
<li><a href="#">Sneakers</a></li>
<li><a href="#">Sandals</a></li>
<li><a href="#">Formal Shoes</a></li>
<li><a href="#">Boots</a></li>
<li><a href="#">Flip Flops</a></li>
</ul>
</li>
<li><a href="#">Pages</a>
<ul class="sub-menu">
<li><a href="./product.html">Product Page</a></li>
<li><a href="./category.html">Category Page</a></li>
<li><a href="./cart.html">Cart Page</a></li>
<li><a href="./checkout.html">Checkout Page</a></li>
<li><a href="./contact.html">Contact Page</a></li>
</ul>
</li>
<li><a href="#">Blog</a></li>
</ul>
</div>
</nav>
</header>
<!-- Header section end -->
<div class="wrapper" style="background-image: url('images/bg-registration-form-2.jpg');">
<div class="inner">
<form action="#" th:action="@{/register}" th:object="${user}" method="post">
<h3>Registration Form</h3>
<div class="form-group">
<div class="form-wrapper">
<label for="firstName">First Name</label>
<input th:field="*{firstName}" type="text" name="firstName" class="form-control" ></input>
</div>
<div class="form-wrapper">
<label for="lastName">Last Name</label>
<input th:field="*{lastName}" type="text" name="lastName" class="form-control" ></input>
</div>
</div>
<div class="form-wrapper">
<label for="dob">Date of Birth</label>
<input th:field="*{dob}" type="date" name="dob" class="form-control" ></input>
</div>
<div class="form-wrapper">
<label for="telephone">Telephone</label>
<input th:field="*{telephone}" type="text" name="telephone" class="form-control" ></input>
</div>
<div class="form-wrapper">
<label for="emailId">Email</label>
<input th:field="*{emailId}" type="email" name="emailId" class="form-control" ></input>
</div>
<div class="form-group">
<div class="form-wrapper">
<label for="street">Street</label>
<input th:field="*{street}" type="text" name="street" class="form-control" ></input>
</div>
<div class="form-wrapper">
<label for="city">City</label>
<input th:field="*{city}" type="text" name="city" class="form-control" ></input>
</div>
</div>
<div class="form-group">
<div class="form-wrapper">
<label for="district">District</label>
<input th:field="*{district}" type="text" name="district" class="form-control" ></input>
</div>
<div class="form-wrapper">
<label for="province">Province</label>
<input th:field="*{province}" type="text" name="province" class="form-control" ></input>
</div>
</div>
<div class="form-group">
<div class="form-wrapper">
<label for="password">Password</label>
<input th:field="*{password}" type="password" name="password" class="form-control" ></input>
</div>
<div class="form-wrapper">
<label for="">Confirm Password</label>
<input type="password" class="form-control" ></input>
</div>
</div>
<div class="checkbox">
<label>
<input type="checkbox" ></input> I accept the Terms of Use & Privacy Policy.
<span class="checkmark"></span>
</label>
</div>
<button>Register Now</button>
</form>
</div>
</div>
<!-- Footer section -->
<section class="footer-section">
<div class="container">
<div class="footer-logo text-center">
<a href="index.html"><img src="/img/logo-light.png" alt="" ></img></a>
</div>
<div class="row">
<div class="col-lg-3 col-sm-6">
<div class="footer-widget about-widget">
<h2>About</h2>
<p>Donec vitae purus nunc. Morbi faucibus erat sit amet congue mattis. Nullam frin-gilla faucibus urna, id dapibus erat iaculis ut. Integer ac sem.</p>
<img src="img/cards.png" alt="" /></img>
</div>
</div>
<div class="col-lg-3 col-sm-6">
<div class="footer-widget about-widget">
<h2>Questions</h2>
<ul>
<li><a href="">About Us</a></li>
<li><a href="">Track Orders</a></li>
<li><a href="">Returns</a></li>
<li><a href="">Jobs</a></li>
<li><a href="">Shipping</a></li>
<li><a href="">Blog</a></li>
</ul>
<ul>
<li><a href="">Partners</a></li>
<li><a href="">Bloggers</a></li>
<li><a href="">Support</a></li>
<li><a href="">Terms of Use</a></li>
<li><a href="">Press</a></li>
</ul>
</div>
</div>
<div class="col-lg-3 col-sm-6">
<div class="footer-widget about-widget">
<h2>Questions</h2>
<div class="fw-latest-post-widget">
<div class="lp-item">
<div class="lp-thumb set-bg" data-setbg="img/blog-thumbs/1.jpg"></div>
<div class="lp-content">
<h6>what shoes to wear</h6>
<span>Oct 21, 2018</span>
<a href="#" class="readmore">Read More</a>
</div>
</div>
<div class="lp-item">
<div class="lp-thumb set-bg" data-setbg="img/blog-thumbs/2.jpg"></div>
<div class="lp-content">
<h6>trends this year</h6>
<span>Oct 21, 2018</span>
<a href="#" class="readmore">Read More</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-sm-6">
<div class="footer-widget contact-widget">
<h2>Questions</h2>
<div class="con-info">
<span>C.</span>
<p>Your Company Ltd </p>
</div>
<div class="con-info">
<span>B.</span>
<p>1481 Creekside Lane Avila Beach, CA 93424, P.O. BOX 68 </p>
</div>
<div class="con-info">
<span>T.</span>
<p>+53 345 7953 32453</p>
</div>
<div class="con-info">
<span>E.</span>
<p>office@youremail.com</p>
</div>
</div>
</div>
</div>
</div>
<div class="social-links-warp">
<div class="container">
<div class="social-links">
<a href="" class="instagram"><i class="fa fa-instagram"></i><span>instagram</span></a>
<a href="" class="google-plus"><i class="fa fa-google-plus"></i><span>g+plus</span></a>
<a href="" class="pinterest"><i class="fa fa-pinterest"></i><span>pinterest</span></a>
<a href="" class="facebook"><i class="fa fa-facebook"></i><span>facebook</span></a>
<a href="" class="twitter"><i class="fa fa-twitter"></i><span>twitter</span></a>
<a href="" class="youtube"><i class="fa fa-youtube"></i><span>youtube</span></a>
<a href="" class="tumblr"><i class="fa fa-tumblr-square"></i><span>tumblr</span></a>
</div>
<!-- Link back to Colorlib can't be removed. Template is licensed under CC BY 3.0. -->
<p class="text-white text-center mt-5">Copyright ©<script>document.write(new Date().getFullYear());</script> All rights reserved | This template is made with <i class="fa fa-heart-o" aria-hidden="true"></i> by <a href="https://colorlib.com" target="_blank">Colorlib</a></p>
<!-- Link back to Colorlib can't be removed. Template is licensed under CC BY 3.0. -->
</div>
</div>
</section>
<!-- Footer section end -->
<!--====== Javascripts & Jquery ======-->
<script type="text/javascript" src="@{/js/jquery-3.2.1.min.js}"></script>
<script type="text/javascript" src="@{/js/bootstrap.min.js}"></script>
<script type="text/javascript" src="@{/js/jquery.slicknav.min.js}"></script>
<script type="text/javascript" src="@{/js/owl.carousel.min.js}"></script>
<script type="text/javascript" src="@{/js/jquery.nicescroll.min.js}"></script>
<script type="text/javascript" src="@{/js/jquery.zoom.min.js}"></script>
<script type="text/javascript" src="@{/js/jquery-ui.min.js}"></script>
<script type="text/javascript" src="@{/js/main.js}"></script>
</body>
</html>
慰问:
2020-09-05 20:24:26.578 INFO 27384 --- [ main] c.O.customer.CustomerApplication : Starting CustomerApplication on LAPTOP-D72B23NQ with PID 27384 (C:\Users\User\Desktop\customer\target\classes started by User in C:\Users\User\Desktop\customer)
2020-09-05 20:24:26.579 INFO 27384 --- [ main] c.O.customer.CustomerApplication : No active profile set, falling back to default profiles: default
2020-09-05 20:24:27.468 INFO 27384 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-09-05 20:24:27.468 INFO 27384 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.36]
2020-09-05 20:24:27.575 INFO 27384 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2020-09-05 20:24:27.687 INFO 27384 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2020-09-05 20:24:27.690 WARN 27384 --- [ main] com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
2020-09-05 20:24:27.776 INFO 27384 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2020-09-05 20:24:27.849 WARN 27384 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
Hibernate: alter table confirmation_token add constraint FKpitnf1t12om2w2btrcd37gwpq foreign key (user_id) references customer (user_id)
2020-09-05 20:24:28.657 INFO 27384 --- [ main] c.O.customer.CustomerApplication : Started CustomerApplication in 2.318 seconds (JVM running for 2.938)
2020-09-05 20:24:37.951 INFO 27384 --- [nio-8082-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
暂无答案!
目前还没有任何答案,快来回答吧!