java如何搭建mvc
Java搭建MVC框架的基本方法
使用Spring Boot快速构建MVC架构
Spring Boot提供了自动配置的MVC支持,简化了传统Spring MVC的配置流程。创建项目时选择Spring Web依赖,或手动添加以下Maven依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
控制器层通过@Controller或@RestController注解定义,处理HTTP请求:
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
return userService.getAllUsers();
}
}
模型层实现方式
实体类使用JPA注解进行ORM映射:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// getters/setters
}
服务层通过@Service注解实现业务逻辑:
@Service
public class UserService {
@Autowired
private UserRepository repository;
public List<User> getAllUsers() {
return repository.findAll();
}
}
视图层处理方案
Thymeleaf模板引擎配置(适用于传统Web应用):
在application.properties中添加:
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
创建模板文件:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div th:each="user : ${users}">
<span th:text="${user.name}"></span>
</div>
</body>
</html>
数据持久化配置
Spring Data JPA仓库接口:
public interface UserRepository extends JpaRepository<User, Long> {
}
数据库连接配置示例(MySQL):
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update
传统Servlet方案实现MVC
不使用框架的纯Servlet实现:
// Controller
@WebServlet("/user")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
UserService service = new UserService();
req.setAttribute("users", service.getUsers());
req.getRequestDispatcher("/WEB-INF/views/users.jsp").forward(req, resp);
}
}
模型对象保持POJO形式:
public class User {
private String name;
// 标准JavaBean结构
}
测试MVC组件
控制器单元测试示例:
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void shouldReturnUsers() throws Exception {
mockMvc.perform(get("/api/users"))
.andExpect(status().isOk())
.andExpect(jsonPath("$[0].name").exists());
}
}
集成测试配置:

@TestPropertySource(locations = "classpath:test.properties")
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class FullContextTest {
@LocalServerPort
private int port;
@Test
void contextLoads() {
RestTemplate rest = new RestTemplate();
String url = "http://localhost:" + port + "/api/users";
User[] users = rest.getForObject(url, User[].class);
assertNotNull(users);
}
}






