Spring Boot 默認推薦使用 Thymeleaf 等模板引擎,但許多遷移項目仍需使用 JSP。本文詳細說明如何在 Spring Boot 中配置 JSP 視圖解析、控制器跳轉及表單提交處理,構建一個簡單的登錄頁面。
需引入 Tomcat 嵌入式 JSP 引擎與 JSTL,標記為 provided 避免打包衝突:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<scope>provided</scope>
</dependency>
package com.xxxx.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
public class JspConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
src/main
├── java
│ └── com.xxxx
│ ├── config
│ ├── controller
│ └── service
├── resources
└── webapp
└── WEB-INF
└── views
└── login.jsp
注意:JSP 必須放在 src/main/webapp/WEB-INF/views/ 下,而非 resources/templates。
login.jsp<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<h1>Login Page</h1>
<form action="/account/valid" method="post">
<input type="text" name="name" placeholder="用戶名">
<input type="password" name="password" placeholder="密碼">
<input type="submit" value="登錄">
</form>
</html>
package com.xxxx.controller;
import com.xxxx.service.AccountService;
import com.xxxx.entity.Account;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/account")
public class AccountController {
@Autowired private AccountService accountService;
@RequestMapping("/login")
public String login() { return "login"; } // 返回視圖名 login.jsp
@RequestMapping("/valid")
@ResponseBody
public String valid(Account account) {
return accountService.valid(account) ? "Login Success!" : "Login Failed!";
}
}
package com.xxxx.service;
import com.xxxx.entity.Account;
import org.springframework.stereotype.Service;
@Service
public class AccountService {
public boolean valid(Account account) {
return "admin".equals(account.getName()) && "123456".equals(account.getPassword());
}
}
package com.xxxx.entity;
public class Account {
private String name;
private String password;
// Getter/Setter 略
}
https://localhost:8080/account/login 顯示登錄頁Login Success!Login Failed!通過上述配置,Spring Boot 即可無縫支持 JSP 開發模式,適合舊項目遷移或團隊習慣 JSP 的場景。