Погрузился в новый для меня язык java и столкнулся с некоторыми проблемами и фундаментальным пониманием принципов.
Решил начать с основ и познакомится в том числе и с сервлетами. В моём понимании сервлет подпрограмма выполняемая в оболочке какого-либо web сервера, в моём случае tomcat. Именно поэтому мы не можем напрямую взаимодействовать с теме же jsp, и приходится прибегать к такому:
Код:
@WebServlet("/")
public class Main extends HttpServlet {
static public String title = "Title";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("title", title);
request.setAttribute("include", "Вставка кода");
RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
rd.forward(request, response);
}
}
Как я понял, до передачи запроса в сервлет, мы добавляем значение в get запрос, в моём случае title и include в jsp же размечаем где мы хотим разместить ранее переданную информацию:
Код:
<%--
Created by IntelliJ IDEA.
User: User
Date: 20.10.2022
Time: 21:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>${title}</title>
<link rel="stylesheet" type="text/css" href="/css/tag.css">
<link rel="stylesheet" type="text/css" href="/css/class.css">
<link rel="stylesheet" type="text/css" href="/css/menu.css">
</head>
<body>
<div class="header">
<div class="header-top"></div>
<div class="header-middle">
<nav id='menu'>
<ul>
<li><a href='/'>Главная</a></li>
<li><a href='/generate'>Генерация</a></li>
</ul>
</nav>
</div>
<div class="header-bottom"></div>
</div>
<div class="main">
${include}
</div>
<div class="footer"></div>
</body>
</html>
По неизвестным мне причинам данный код не работаеn и информация не передаётся.
При открытии запмапленного с помощью @WebServlet адреса в моем случае
http://localhost:8080 мы получаем:
Код:
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="/css/tag.css">
<link rel="stylesheet" type="text/css" href="/css/class.css">
<link rel="stylesheet" type="text/css" href="/css/menu.css">
</head>
<body>
<div class="header">
<div class="header-top"></div>
<div class="header-middle">
<nav id='menu'>
<ul>
<li><a href='/'>Главная</a></li>
<li><a href='/generate'>Генерация</a></li>
</ul>
</nav>
</div>
<div class="header-bottom"></div>
</div>
<div class="main">
</div>
<div class="footer"></div>
</body>
</html>
Как видите нет переданных мной значений, но при этом при переходе на вовсе неразмеченный адрес к примеру localhost:8080/qq получаю верный результат:
Код:
<html>
<head>
<title>Title</title>
<link rel="stylesheet" type="text/css" href="/css/tag.css">
<link rel="stylesheet" type="text/css" href="/css/class.css">
<link rel="stylesheet" type="text/css" href="/css/menu.css">
</head>
<body>
<div class="header">
<div class="header-top"></div>
<div class="header-middle">
<nav id='menu'>
<ul>
<li><a href='/'>Главная</a></li>
<li><a href='/generate'>Генерация</a></li>
</ul>
</nav>
</div>
<div class="header-bottom"></div>
</div>
<div class="main">
Вставка кода
</div>
<div class="footer"></div>
</body>
</html>
Делаю вывод, что я чего то не понимаю на фундаментальном уровне работы данной технологии. Я не понимаю почему вообще Web сервер возвращает ответ с незамапленного адреса, а не просто 404 и почему я получаю данные переданные по другому адресу? Не понимаю почему я не получаю преданных данных по замапленному адресу?
Прошу помощи у тех кто имеет понимание!