Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Использование UI в Java разработке
Вопрос про UI может означать разные вещи в контексте Java разработки. Расскажу о различных способах работы с пользовательским интерфейсом, которые я применял в разных проектах.
1. Java Swing для Desktop приложений
В некоторых legacy-проектах я работал с Swing:
import javax.swing.*;
import java.awt.*;
public class MainWindow extends JFrame {
public MainWindow() {
setTitle("Java Application");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
JPanel panel = new JPanel();
JLabel label = new JLabel("Hello, World!");
JButton button = new JButton("Click me");
button.addActionListener(e -> {
label.setText("Button clicked!");
});
panel.add(label);
panel.add(button);
add(panel);
setVisible(true);
}
public static void main(String[] args) {
new MainWindow();
}
}
2. Web UI с JSP и Servlets
В старых web-приложениях использовал JSP:
// Servlet
@WebServlet("/users")
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
List<User> users = userService.getAll();
req.setAttribute("users", users);
req.getRequestDispatcher("/users.jsp").forward(req, resp);
}
}
3. Spring MVC
Традиционный подход с контроллерами:
@Controller
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public String getUsers(Model model) {
model.addAttribute("users", userService.getAll());
return "users"; // имя JSP или Thymeleaf шаблона
}
@GetMapping("/{id}")
public String getUser(@PathVariable Long id, Model model) {
model.addAttribute("user", userService.findById(id));
return "user-detail";
}
}
4. REST API с React/Angular фронтом
В современных проектах я разделяю backend и frontend:
@RestController
@RequestMapping("/api/v1/users")
public class UserRestController {
@Autowired
private UserService userService;
@GetMapping
public ResponseEntity<List<UserDTO>> getAllUsers() {
return ResponseEntity.ok(userService.getAll());
}
@PostMapping
public ResponseEntity<UserDTO> createUser(@RequestBody CreateUserRequest request) {
User user = userService.create(request);
return ResponseEntity.status(HttpStatus.CREATED)
.body(userService.toDTO(user));
}
}
Фронтенд (JavaScript/TypeScript):
fetch(/api/v1/users)
.then(response => response.json())
.then(data => renderUsers(data))
.catch(error => console.error(error));
5. Thymeleaf шаблонизация
Модерн подход для server-side rendering:
<!-- users.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Users</title>
</head>
<body>
<table>
<tr th:each="user : ${users}">
<td th:text="${user.name}">Name</td>
<td th:text="${user.email}">Email</td>
</tr>
</table>
</body>
</html>
6. JavaFX для современных Desktop приложений
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class FXApp extends Application {
@Override
public void start(Stage stage) {
VBox root = new VBox(10);
Button button = new Button("Click me");
button.setOnAction(e -> {
System.out.println("Button clicked");
});
root.getChildren().add(button);
Scene scene = new Scene(root, 400, 300);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
7. Что я предпочитаю в 2025 году
Для большинства modern проектов я рекомендую:
- Backend: Spring Boot для REST API
- Frontend: React/Vue/Angular для SPA
- Разделение ответственности: backend отвечает за бизнес-логику, frontend за UX
Этот подход:
- Позволяет независимо развивать backend и frontend
- Упрощает тестирование
- Лучше масштабируется
- Позволяет использовать best practices обоих миров
Java не лучший выбор для frontend, поэтому я оставляю UI современным JavaScript фреймворкам, а Java использую для того, в чём она лучше — backend логика, обработка данных, интеграция систем.