본문 바로가기

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

231130 [Back-end] Spring Framework/ 지난 jsp 과제풀이 / 스프링 프레임워크 Spring Framework/ STS (ver.3) 기본 세팅 및 프로젝트 생성/ Spring Framework requset 프로세스

[23.11.30]  78차

 

<<진도>>

[Back-end] Spring Framework

/ 지난 jsp 과제풀이 

/ 스프링 프레임워크 Spring Framework

/ STS (ver.3) 기본 세팅 및 프로젝트 생성

/ Spring Framework requset 프로세스

 

<<오늘의 팁>>

- 다른 환경에서 만든 프로젝트를 Tomcat 서버로 실행시키면 오류가 날 수 있다.

 

<<과제>>

- MVC패턴 / MVC 모델 정리

- request 프로세스 정리

 

 

JSP [forward와 redirect는 내부작동원리가 다르다]

차이 

1)URL

forward : 주소URL를 숨김

redirect : 이동된 페이지 주소노출

 

2) 페이지 이동

forward : 서버 내에서 페이지 이동 

redirect : 클라이언트가 새로운 요청을 하는 구조

 

3) 제어권의 차이

 

+) forward는 WEB-INF에 접근 가능 / redirect는 불가능

 

<과제풀이 1128>

 

* quiz02 (include를 활용하여 간소화)

<h1>Action Tag : Forward Quiz</h1>
	<form action="quiz02_response.jsp">
		<div>혈액형별 성격 테스트</div>
		<div>당신의 혈액형은?</div>
		<div>
			<input type="radio" name="bloodtype" value="A">A형
			<input type="radio" name="bloodtype" value="B">B형
			<input type="radio" name="bloodtype" value="O">O형
			<input type="radio" name="bloodtype" value="AB">AB형
		</div>
		<input type="submit" value="보내기">
	</form>

 

* quiz02_response

<h1>quiz02_response.jsp 파일입니다</h1>

	<%
	request.setCharacterEncoding("UTF-8");
	String user_name = "홍길동";
	String bloodtype = request.getParameter("bloodtype");
	%>

	<jsp:forward page='<%="quiz02_" + bloodtype + ".jsp"%>'>
		<jsp:param value="<%=user_name%>" name="user_name" />
	</jsp:forward>

 

* forward되는 jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
String user_name = request.getParameter("user_name");
String bloodtype = request.getParameter("bloodtype");
%>
<!DOCTYPE html>
<html>
<head>
<%@page trimDirectiveWhitespaces="true" %>
<meta charset="UTF-8">
<title>quiz02_<%= bloodtype %>.jsp</title>
</head>
<body>
	
	<h1><%=bloodtype %>형</h1>
	<div><%=user_name %>님의 혈액형은 <%=bloodtype %>형 입니다.</div>

* _header.jsp를 통해 아래 파일들 간소화 가능  ( + )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
	
	<%@ include file="quiz02_header.jsp" %>
	<div>A형 : 우리나라에서 가장 많은 혈액형입니다.</div>
</body>
</html>

 

[ Spring Framework ]

STS (ver.3) 기본설정

General - Content Types

 

General - Workspace

 

이 외의 Web의 파일 인코딩도 동일하게

Web

 

서버 실행 시 경고뜨는 1,000,000 -> 제한없애기

Run/Debug - console

 


 

[spring-ver1]

Spring (Spring Framework) / Spring Boot (Spring Boot)

MVC Project

 

- 패키지명 지정해주기 (3개 이상 필수 :: 계층구조)

 

스프링부트의 프로젝트 생성 시 패키지

 

 

 

만들어진 Spring Legacy Project 구조

(Package Explorer에는 java 폴더가 안보인다.)

 

- project 선택후 Run

 

 

 

 

** [스프링 프레임워크는 외장 Tomcat을 사용]

WAS(Tomcat) 안에 여러개의 Application(프로젝트)을 관리

 

/ server.xml (설정 파일을 보면) path=""  << URL의 Context

 

path="/ver1"(=Context) 이면 spring-ver1(=Application(프로젝트))를 찾아가라

 

>> 위와 같이 외부에서  URL로 해당 프로젝트(spring-ver1)에 요청이 오게되면

 

1. webapp의 web.xml로 먼저 찾아가

   

 

2. DispatcherServlet(class)으로 servlet(servlet-context.xml)을 찾아간다.

 +) web.xml에서 특정 애플리케이션의 컴포넌트를 스캔하여

3. servlet은 web.xml의 HandlerMapping을 (“ / ”) 통해 특정 요청에 매핑되는(RequestMapping) Controller(HomeController.java)를 검색하여 찾아감

4. Controller는 Model 및 View와 관련된 처리를 수행하여 servlet에 논리 뷰를 return한다.

1) Controller가 return한 "home"은 문자열로 파일의 이름만 가리키지만 [논리 뷰 형태]

2)  servlet에서 <beans: property> [viewResolver] 뷰리졸버가 "home이" WEB-INF/views/의 경로에 있고(prefix) / home / 확장자가 .jsp임을 특정함 (suffix)

 

5. 이렇게 특정된 View를 Client로 결과를 리턴한다.

 

 


[이미지 파일 경로 설정]

 

/ home.jsp

이미지를 넣으면 깨지게 되는데

 

 

** Spring(프레임워크)은 하나의 외장 Tomcat으로 여러 프로젝트를 관리하며,

   Context(/ver1/)를 통해 구분을 하므로 

경로 앞에 구분할 context를 넣어준다

 

 

 

 


[ view.jsp ] 로 연결하기 위한 핸들러 메서드 (.Controller)

 

	@RequestMapping(value = "/view")
	public String view() {
		return "view"; // 논리view (.jsp 파일명)
	}

 

 


[spring-ver2]

스프링 부트에서 template에 파일들에는 controller를 통해서만 접근해야 했던것처럼,

스프링 프레임워크에서 WEB - INF 안에 파일은 controller를 통해 접근해야함.

 

// But, webapp에 있는 파일은 Tomcat이 바로 처리해줌(DispatcherServlet이 바로 관여하는 것) 

 

* web.xml(Tomcat 서버)

webapp에 있는 index. 이름가진 파일들 훑음

 

 

SpringBoot에서는 jsp를 공식지원하지 않음(JSP가 가능하지만 보장X)

 

Spring Framework에서는 오히려 views에서는 JSP만 인식하고

HTML을 인식하지 못한다. >> 이유는 servlet-context.xml의 ViewResolver가 suffix .jsp 세팅

	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>

Spring Framework와 JSP는 세트! (굳이 html을 쓰려면 forward 등을 이용)