스프링 실습 Ⅰ
다음 구성 요소를 바탕으로 프로젝트를 구성한다.
구성 요소 | 파일명 | 내용 |
Model | HomeVO.java | 데이터 모델 클래스 |
View | index.jsp | 메인 페이지 |
delete.jsp | 데이터 삭제 결과를 표시하는 페이지 | |
insert.jsp | 데이터 삽입 결과 를 표시하는 페이지 | |
member.jsp | 회원 정보 표시하거나 입력 받는 페이지 | |
one.jsp | 단일 데이터 항목을 표시하는 페이지 | |
test.jsp | 테스트용 페이지 | |
Controller | HomeController.java | 사용자의 요청을 처리하고, 적절한 뷰로 모델 데이터 전달 |
MemberController.java | 회원 관련 요청을 처리하고, 적절한 뷰로 모델 데이터 전달 | |
Config | AppConfig.java | 애플리케이션 전반에 대한 설정 담당 |
WebConfig.java | Spring MVC 설정을 담당하며 뷰 리졸버 설정 | |
WebAppInitializer.java | 서블릿 컨텍스트 초기화 |
Config
config 폴더에 있는 AppConfig, WebAppInitializer, WebConfig 파일을 설정한다.
AppConfig | 애플리케이션 컨텍스트 설정, 빈 정의 관리, 데이터베이스 설정 |
WebAppInitializer | 서블릿 컨테이너 초기화, 서블릿 매핑 및 설정, DispatcherServlet 설정 |
WebConfig | 뷰 리졸버 설정, 정적 자원 매핑, 인터셉터 설정, 메시지 컨버터 설정 |
// WebAppInitializer.java
// 스프링 기반 웹 애플리케이션의 초기 설정을 구성하여 서블릿 컨테이너가 올바르게 동작하도록 함
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
// 루트 애플리케이션 컨텍스트에 로드할 설정 클래스 반환
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { AppConfig.class };
}
// 서블릿 애플리케이션 컨텍스트에 로드할 설정 클래스 반환
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebConfig.class };
}
// 디스패치 서블릿에 매핑할 URL 패턴을 반환
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
// AppConfig.java
@Configuration
public class AppConfig {
}
// WebConfig.java
// Configuration : 이 클래스가 하나 이상의 스프링 빈을 정의하는데 사용
// EnableWebMvc : 스프링 MVC를 활성화하고, 기본적인 설정 적용 > ViewResolver 설정, static 파일 설정 포함
// ComponentScan : 지정된 패키지에서 컴포넌트를 스캔하여 빈으로 등록
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "org.example.spring0806")
public class WebConfig implements WebMvcConfigurer {
// ViewResolver 빈 설정
// controller에서 전달된 데이터를 출력할 jsp 파일 위치
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
// resources 위치 핸들러 설정, static 파일 설정 (js, css, image 등)
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
}
}
VO
HomeVO 파일을 설정한다.
// HomeVO.java
// Data : Getter, Setter, equals(), toString() 메소드 자동 생성
@Data
public class HomeVO {
private int id;
private String name;
}
Controller
HomeController 주요 메서드는 다음과 같다.
URL 매핑 | HTTP 메서드 | 파라미터 | 반환 타입 | |
index | / | GET | X | String |
home | /test | GET | X | String |
member | /member | GET | X | String |
// HomeController.java
// Controller : HomeController 클래스를 Spring MVC 컨트롤러로 지정 > HTTP 요청 처리하는 메서드 정의
// Sl4fj : log라는 이름의 Logger 객체 자동 생성 > log.info와 같은 로그 출력 가능
@Controller
@Slf4j
public class HomeController {
// GET 요청이 루트 경로(/)로 들어올 때 실행하여 index.jsp 반환
@GetMapping("/")
public String index() {
log.info("HomeController index");
return "index";
}
// GET 요청이 /test 경로로 들어올 때 실행하여 test.jsp 반환
@GetMapping("/test")
public String home() {
log.info("HomeController test");
return "test";
}
// GET 요청이 /member로 들어올 때 실행하여 member.jsp 반환
@GetMapping("/member")
public String member() {
log.info("HomeController member");
return "member";
}
}
MemberController의 주요 메서드는 다음과 같다.
URL 매핑 | HTTP 메서드 | 파라미터 | 반환 타입 | |
insert | /insert | GET | X | String |
delete | /delete | GET | X | String |
one | /one | POST | id(int) | ModelAndView |
update | /update | GET | id(int), name(String) | String |
// MemberController.java
// Controller : HomeController 클래스를 Spring MVC 컨트롤러로 지정 > HTTP 요청 처리하는 메서드 정의
// Sl4fj : log라는 이름의 Logger 객체 자동 생성 > log.info와 같은 로그 출력 가능
@Controller
@Slf4j
public class MemberController {
@GetMapping("/insert")
public String insert() {
log.info("----- MemberController insert -----");
return "insert";
}
@GetMapping("/delete")
public String delete() {
log.info("----- MemberController delete -----");
return "delete";
}
// ModelAndView 객체에 homeVO라는 이름으로 HomeVO 객체 추가
// 이렇게 추가된 객체는 뷰에서 사용할 수 있으며 JSP에서 homeVO라는 이름으로 참조
@PostMapping("/one")
public ModelAndView one(int id) {
log.info("----- MemberController one -----");
ModelAndView modelAndView = new ModelAndView();
HomeVO homeVO = new HomeVO();
homeVO.setId(id);
homeVO.setName("hong");
modelAndView.addObject("homeVO", homeVO);
return modelAndView;
}
@GetMapping("/update")
public String update(int id, String name) {
log.info("----- MemberController update -----");
return "update";
}
}
JSP
JSP 파일을 설정한다.
<!-- index.jsp -->
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="test">test</a>
<a href="member">member</a>
</body>
<!-- member.jsp -->
<body>
<h1>welcome spring world</h1>
<table border="1">
<tr>
<td style="background: bisque">회원가입</td>
<td style="background: bisque">회원탈퇴</td>
<td style="background: bisque">회원수정</td>
<td style="background: bisque">회원정보</td>
</tr>
<tr>
<td>
<a href="insert?id=100&name=hong">
<button>회원가입 처리 요청</button>
</a>
</td>
<td>
<a href="delete?id=100">
<button>회원탈퇴 처리 요청</button>
</a>
</td>
<td>
<a href="update?id=100&name=hong">
<button>회원수정 처리 요청</button>
</a>
</td>
<td>
<!-- 폼이 제출되면 '/one' 경로로 post 요청 전송 -->
<!-- 사용자가 id 값을 입력하면 서버는 전달된 id 값을 받아서 처리 -->
<form action="one" method="post">
id : <input type="text" name="id" value="100"><br>
<button>회원정보 처리 요청</button>
</form>
</td>
</tr>
</table>
</body>
<!-- insert.java -->
<body style="background-color: darksalmon">
회원가입 신청 완료
</body>
<!-- delets.jsp -->
<body style="background-color: darksalmon">
회원탈퇴 신청 완료
</body>
<!-- test.jsp -->
<body style="background-color: darksalmon">
환영합니다.
</body>
<!-- update.jsp -->
<body style="background-color: darksalmon">
회원정보 수정 완료
</body>
<!-- one.jsp -->
<!-- JSP에 자바 코드를 삽입하기 위해서는 <% ... %> 사용 -->
<!-- homeVO라는 이름으로 저장된 객체를 가져옴 -->
<!-- request.getAttribute 메소드는 Object 타입 반환하므로 HomeVO 타입으로 캐스팅 -->
<%
HomeVO homeVO = (HomeVO) request.getAttribute("homeVO");
if(homeVO != null) {
%>
<!-- homeVO 객체의 id 값과 name 값을 HTML로 렌더링 -->
<p>ID : <%= homeVO.getId() %></p>
<p>NAME : <%= homeVO.getName()%></p>
<%
}
%>
</body>
프로젝트 결과
위 코드를 실행한 프로젝트 결과는 다음과 같다.
'Framework > Spring' 카테고리의 다른 글
[Spring] 11. 스프링(Spring) MVC 어노테이션 (0) | 2024.09.03 |
---|---|
[Spring] 09. 컨트롤러(Controller) (0) | 2024.09.02 |
[Spring] 08. 빈(Bean) 설정하기 (0) | 2024.09.02 |
[Spring] 07. 스프링(Spring) MVC2 (1) | 2024.08.28 |
[Spring] 06. 스프링(Spring) MVC (0) | 2024.08.21 |