본문 바로가기

Back-end(Spring Framework)/필기일지

231201 [Back-end] Spring Framework/ 과제풀이 (Spring)/ Spring Framework requset 프로세스/ Spring Legacy Project MVC 실습

[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 안보다 우선순위!

webapp에 있는 index.jsp

 

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 (마지막 / 뒤에 오는 상대주소)

>> 상대주소 사용시 주의 필요

 

가입화면에서 입력을하고도 URI가&nbsp; POST 방식으로 그대로

 

* 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)