[23.12.01] 79차
<<진도>>
[Back-end] Spring Framework
/ 과제풀이 (Spring)
/ Spring Framework requset 프로세스
/ Spring Legacy Project MVC 실습
<<오늘의 팁>>
- Tomcat 서버를 실행하지않고 프로젝트를 실행 하면 프로젝트가 저장이 될 때마다 서버가 재실행되고 창이 뜬다.
(장/단점 존재)
- Spring Boot에서 .html파일 view는 따로 실행 시 응답받는 view형태 확인이 가능하지만,
Spring Framwork에서 view인 .jsp는 서버처리가 되어야만 확인이 가능.
[ Spring Framework ]
<과제풀이 1130>
* index.jsp
<h1>index.jsp</h1>
<div>member 폴더 내 index.jsp 파일입니다.</div>
<hr>
<!--
* 절대 주소 : /member/join ( 앞은 정해진 주소(port) /절대주소 )
* 상대 주소 : member/join (마지막 / 뒤에오는 상대주소 )
-->
<form action="/ver1/member/join" method="get">
<div>
<label for="id">id : </label>
<input type="text" name="id">
</div>
<div>
<label for="name">name : </label>
<input type="text" name="name">
</div>
<input type="submit" value="가입">
</form>
* join.jsp
<h2>[getParameter]</h2>
<%
String name = request.getParameter("name");
String id = request.getParameter("id");
%>
<h1>join.jsp</h1>
<div><%= name %>님, 가입을 환영합니다.</div>
<div>id : <%= id %></div>
<h2>[el] 방법1</h2>
<div>${param.name}님, 가입을 환영합니다.</div>
<div>id : ${param.id}</div>
<hr>
<h2>[el] 방법2</h2>
<div>${name}님, 가입을 환영합니다.</div>
<div>id : ${id}</div>
* MemberController.java
@Controller
public class MemberController {
@RequestMapping("/member")
public String index() {
return "member/index";
}
@RequestMapping("/member/join")
public String member() {
return "member/join";
}
}
[ Spring-ver2 ]
[Spring-ve2 Project structure]
[workflow]
view -> controller -> Domain -> Repository -> Service
webapp에 index파일은Tomcat이 처리하기 때문에 views 안보다 우선순위!
app에 index파일은Tomcat이 처리하기 때문에 views 안보다 우선순위!
** 같은 URI를 Controller에서 Get요청과 Post요청을 따로 처리하는법 method = RequestMethod.
(default는 get) : RequestMapping은 get/post 둘을 모두 처리하므로 get도 표기해주는것을 권장!
@RequestMapping(value = "/member/join", method = RequestMethod.GET)
public String join(@RequestParam String name) {
System.out.println("[get : join method] 이름 : " + name);
return "index";
}
@RequestMapping(value = "/member/join", method = RequestMethod.POST)
public String postJoin(@RequestParam String name) {
System.out.println("[post : postJoin method] 이름 : " + name);
return "index";
}
: Post 방식에서는 한글설정이 필요하므로, 코드로 넣기 보다는 Tomcat / Project 단위로 해주는것이 좋다
프로젝트에 한글처리 설정하기
>> * web.xml
<!-- 한글처리 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
** 같은 URI를 Controller에서 Get요청과 Post요청을 따로 처리하는법 method = RequestMethod
[상대주소와 절대주소]
* 절대 주소 : /member/join ( 앞은 정해진 주소(port) / 뒤에오는 절대주소 )
* 상대 주소 : member/join (마지막 / 뒤에 오는 상대주소)
>> 상대주소 사용시 주의 필요
* newForm.jsp에서 (action="" 빈문자열은 현재 페이지 URL 요청)
<!-- <form action="/ver2/member/new" method="post"> -->
<form action="" method="post">
<label for="name">이름 : </label>
<input type="text" name="name" id="name" placeholder="이름을 입력하세요...">
<input type= "submit" value="입력완료">
</form>
* MemberController.java
(newForm뷰 응답하는 member/new 요청은 get으로 / index를 응답하는 member/new요청은 post로)
@RequestMapping(value = "/member/new", method = RequestMethod.GET)
public String memberNew() {
return "member/newForm";
}
@RequestMapping(value = "/member/new", method = RequestMethod.POST)
public String create(@RequestParam String name) {
return "index";
}
++) class 레벨로 @RequestMapping하여 정리도 가능하다
@Controller
@RequestMapping(value = "/member")
public class MemberController {
@RequestMapping(value = "/new", method = RequestMethod.GET)
public String memberNew() {
return "member/newForm";
}
@RequestMapping(value = "/new", method = RequestMethod.POST)
public String create(@RequestParam String name) {
return "index";
}
}
[Repository]
- 공통 메서드를 사용하기위한 interface 생성
@Repository
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
- 계층구조 사이를 이동하는 객체형태의 데이터 타입: DTO(Bean)