Добрый день! Установил на VDS томкат 8.5.28. Развернул на него написанный на Spring сайт. Не отображается меню на сайте из-за того, что томкат не интерпретирует тэги вставки th:insert. Они как были так и остались в структуре страницы. Вопрос в том почему так происходит? Почему томкат не интерпретирует теги thymeleaf?
Мой html:
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Главная страница. LDSV.</title>
<link href="/avtonomki/static/css/bootstrap.min.css" rel="stylesheet">
<link href="/avtonomki/static/css/jumbotron.css" rel="stylesheet">
<link href="/avtonomki/static/css/font-awesome.min.css" rel="stylesheet">
<link href="/avtonomki/static/css/login-menu.css" rel="stylesheet">
<script src="/avtonomki/static/js/jquery-3.2.1.min.js"></script>
<script src="/avtonomki/static/js/popper.js"></script>
<script src="/avtonomki/static/js/bootstrap.js"></script>
<script src="/avtonomki/static/js/bootstrap.min.js"></script>
<script src="/avtonomki/static/js/394.js"></script>
<script>
function checkUsernameAndPassword(username,password) {
if (username.length < 3 || username.length > 32) {
shakeModal("Длина имени пользователя должна быть больше 3 символов и меньше 32.");
return false;
}
if (password.length < 3 || password.length > 32) {
shakeModal("Длина пароля должна быть больше 3 символов и меньше 32.");
return false;
}
return true;
};
function checkUsernameExist(username) {
var usernameIsExist = true;
$.ajax({
url : "/avtonomki/checkUsername",
type : "get",
async: false,
data: {username: username},
dataType:"text",
success : function(isExist) {
usernameIsExist = (isExist == 'true');
}
});
return usernameIsExist;
}
$(function(){
$("#enter_btn").click(function(){
username = $("#enter_username").val();
password = $("#enter_password").val();
if (!checkUsernameAndPassword(username,password)) {
return false;
}
if (!checkUsernameExist(username)) {
shakeModal("Такого пользователя не существует.");
return false;
}
return true;
});
$("#register_btn").click(function() {
username = $("#register_username").val();
password = $("#register_password").val();
password_confirm = $("#register_passwordConfirm").val();
if (!checkUsernameAndPassword(username,password)) {
return false;
}
if (password != password_confirm) {
shakeModal("Пароль и его подтверждение не совпадают.");
return false;
}
if (checkUsernameExist(username)) {
shakeModal("Такой пользователь уже существует. Выберите другое имя пользователя.");
return false;
}
return true;
});
});
</script>
</head>
<body>
<div th:insert="~{menu.html::menu}"></div>
<main role="main">
<!-- Main jumbotron for a primary marketing message or call to action -->
<div class="jumbotron">
<div class="container">
<p>Компания LDSV предлагает качественный ремонт грузовиков, прицепов, полуприцепов в Московской области.
Производим агрегатный ремонт автономных отопителей и предпусковых подогревателей Eberspacher, Webasto, Планар,
редукторов, электродвигателей Haldex.</p>
<p>Наш автосервис готов принять на ремонт тягачи и сцепки близлежащих городов: Щелково, Балашиха, Мытищи, Королев, Москва, Ногинск, Лосино-Петровский, Монино, Обухово, Черноголовка, Пушкино, Ивантеевка, Фрязино,
Фряново, Красноармейск, Старая Купавна, Реутов, Железнодорожный, Электроугли, Электросталь, Павловский Посад.</p>
<p>Осуществляем комплексное обслуживание транспортных предприятий, возможен выезд на территорию заказчика.</p>
<!-- <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more »</a></p> -->
</div>
</div>
<div th:insert="~{footer.html::footer}"></div>
<div class="modal fade login" id="loginModal">
<div class="modal-dialog login animated">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<!-- <h4 class="modal-title">Вход</h4> -->
</div>
<div class="modal-body">
<div class="box">
<div class="content">
<div id="error" class="error"></div>
<div class="form loginBox">
<form method="POST" action="/avtonomki/login" modelAttribute="userForm" accept-charset="UTF-8">
<input id="enter_username" class="form-control" type="text" placeholder="Логин" name="username">
<input id="enter_password" class="form-control" type="password" placeholder="Пароль" name="password">
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
<input id="enter_btn" class="btn btn-default btn-login" type="submit" value="Вход">
</form>
</div>
</div>
</div>
<div class="box">
<div class="content registerBox" style="display:none;">
<div class="form">
<form method="POST" html="{:multipart=>true}" modelAttribute="userForm" data-remote="true" action="/avtonomki/registration" accept-charset="UTF-8">
<input id="register_username" class="form-control" type="text" placeholder="Логин" name="username">
<input id="register_password" class="form-control" type="password" placeholder="Пароль" name="password">
<input id="register_passwordConfirm" class="form-control" type="password" placeholder="Повторите пароль" name="passwordConfirm">
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
<input id="register_btn" class="btn btn-default btn-register" type="submit" value="Создать аккаунт">
</form>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<div class="forgot login-footer">
<span>
<!-- <a href="javascript: showRegisterForm();">Создать аккаунт?</a> -->
</span>
</div>
<div class="forgot register-footer" style="display:none">
<span>Уже есть аккаунт?</span>
<a href="javascript: showLoginForm();">Вход</a>
</div>
</div>
</div>
</div>
</div>
</main>
<footer class="container">
<p>©LDSV LTD. 2018</p>
</footer>
</body>
</html>
Моя MVC конфигурация Spring:
@Configuration
@EnableWebMvc
@ComponentScan({ "ru.dev.avtonomki" })
public class WebMVCConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware {
private ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
@Bean
public ViewResolver jspViewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine(jspTemplateResolver()));
resolver.setContentType("text/html");
resolver.setCharacterEncoding("UTF-8");
resolver.setOrder(1);
resolver.setViewNames(ArrayUtil.array("*.html"));
return resolver;
}
private TemplateEngine templateEngine(ITemplateResolver templateResolver) {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.addDialect(new LayoutDialect(new GroupingStrategy()));
engine.addDialect(new Java8TimeDialect());
engine.setTemplateResolver(templateResolver);
//engine.setTemplateEngineMessageSource(messageSource());
return engine;
}
private ITemplateResolver jspTemplateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(applicationContext);
resolver.setPrefix("/");
//resolver.setSuffix(".jsp");
resolver.setCacheable(false);
resolver.setTemplateMode(TemplateMode.HTML5);
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
}
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new NameFormatter());
}
}
Почему так происходит? Почему tomcat не интерпретирует теги thymeleaf?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеЕсть list1 - (10,1) и list2 - (1,10) есть метод Integer
Ставлю Android Studio на новый пкПри создании нового проекта выходит ошибка
Сразу предупреждаю что зарегистрировал url перенаправления в панели управления ubeВыходит ошибка в AuthenticationError CONNECTIVITY_ISSUE как говорит документация...
Есть некий интерфейс A и есть его наследник интерфейс BУ меня есть объект интерфейса A мне нужно создать класс, реализующий интерфейс B