🔥 Vamos/Spring

1125 | 스프링의 정석 :: 2-4

unikue 2022. 11. 25. 23:57

HTML형식으로 띄우기!

 

원리는 기존과 동일하다.

 

 

1124 | 스프링의 정석 :: 1-9

Http 요청과 응답 👉 프로그램의 실행 결과를 톰캣이 아니라 브라우저에 출력하기 👉 입력값을 main 메서드의 args로 받으므로, 콘솔에서 실행 target > 우클릭 > show in > Terminal > cd>classes로 이동해서

ala-nueva.tistory.com

 

👉다만 입력값이 없으므로 request를 제외하고 response만 넣되, outprintln에 HTML형식으로 내용을 작성해준다.

 

@Controller
public class TwoDice {
	@RequestMapping("/rollDice")
	public void main(HttpServletResponse response) throws IOException{
		response.setContentType("text/html"); // html 일때 text/html
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("<img src = '/img/dice1.jpg'>");
		out.println("<img src = '/img/dice2.jpg'>");
		out.println("<img src = '/img/dice3.jpg'>");
		out.println("</body>");
		out.println("</html>");
	}
}

이때 이미지파일은 src아래에 폴더자체를 넣어준다.

 

톰캣 돌렸는데 톰캣이 45초가 지나도록 안된다고 시간 늘리라고 에러창이 뜨질않나, 코드에 괄호 하나가 더 들어가있어서 내용을 받아올 수 없다고 에러가 뜨질 않나 (캡쳐해뒀어야했는데 해결한다고 이것저것 만지면서 창을 닫아버림) 식겁했으나 추론하면서 찾아가니까 일단은 소소한 에러라 해결가능했다.

(정신이 없긴 없나보다. 이 글을 쓰면서 다시보니 body안에 이미지를 넣어야하는데 헤드안에 넣어놔서 수정함)

 

코드를 수정하면 리로드가 되고,
바디안에 제대로 들어간 html작성 완

 

 

 

🤷‍♀️ 이미지가 왜 안끌려왔는지 확인해보자

👉 우클릭 > 검사 창에서 http://localhost:8080/ch2/rollDice 이하에 /img/dice1.jpg 로 이미지 경로까지 입력했을시, 404에러가 뜬다는건 경로가 잘못되었다는 것. 이미지가 리소스 폴더 안에 있으므로 그 경로로 수정해서 작성

 

👉  http://localhost:8080/ch2/resources/img/dice1.jpg 로 입력하자 이미지가 출력된다.

 

		out.println("<img src = 'resources/img/dice1.jpg'>");
		out.println("<img src = 'resources/img/dice2.jpg'>");
		out.println("<img src = 'resources/img/dice3.jpg'>");

👉  알맞은 이미지 경로를 확인했으므로 이미지경로를 재설정해준다.

 

 

👉 웹페이지에서 바로 이미지가 출력되는걸 볼 수 있다.

 

 

 

 

 

🤷‍♀️ 항상 같은 이미지가 아니라, 다른 이미지가 뜨도록 하고싶다면?

public void main(HttpServletResponse response) throws IOException{
		int idx1=(int)(Math.random()*6)+1; // 랜덤값 추출
		int idx2=(int)(Math.random()*6)+1;
		int idx3=(int)(Math.random()*6)+1;
				
		response.setContentType("text/html"); // html 일때 text/html
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("<img src = 'resources/img/dice"+idx1+".jpg'>"); //변동값출력. 
		out.println("<img src = 'resources/img/dice"+idx2+".jpg'>"); //기존의 'resources/img/dice2.jpg'는 고정값
		out.println("<img src = 'resources/img/dice"+idx3+".jpg'>");
		out.println("</body>");
		out.println("</html>");

 

 

서버가 제공하는 리소스 종류에는 두가지가 있다

 

TwoDice 클래스는 실행할때마다 결과가 달라짐 ▶ 동적 리소스

이미지파일 ▶ 정적리소스

 

1. 동적리소스 : 프로그램이 생성해내는 리소스 결과. 리소스 내용이 고정되어있지 않음. ex. 스트리밍(라이브방송)

2. 정적리소스 : 파일형태로 되어있어서 바뀌지 않는 것 (이미지, *.js, *.css *.html)

 


Http요청과 응답

✔ 클라이언트와 서버

 

클라이언트 (client)

: 서비스 요청. 브라우저로 프로그램을 호출해서 요청

 

서버(server)

: 서비스(service) 제공. 프로그램을 실행해서 html로 반환해줌

 (* 웹프로그래밍: 요청을 받아서 출력할 수 있는 문자열을 만들어주는 것)

 

 

 


++ etc.

 

하나의 JAR가 TLD들을 찾기 위해 스캔되었으나 아무 것도 찾지 못했습니다

 

> 톰캣 돌아가면서 이 문구가 지나가는데 출력에는 문제가 없었단 말이지... 이 문구가 무슨뜻인지 아직은 이해 못하지만 (구글링해봐도 아직은 이해를 못하겠다) 나중에 알아들으면 추가해야지.

 

 


 

아주아주 기본이자 쉬운파트이긴 하지만, 나는 이번 파트를 작업하면서 가장 흥미로웠고 이러려고 자바를 공부했구나...! 가 확 느껴지는 부분이었다. 몇 달 전에 Math.random()으로 로또숫자 출력할 때는 원리는 알겠는데 이걸 어쩌려는거지 싶었는데 지금은 출력물과 연결되니까 너무너무 신기했다. 👏👏👏  특히 초등학교때 html 혼자 공부하다가 머릿속에 남은거라곤 헤드, 바디와 같은 기본틀과 img src 밖에 없었는데 어릴때 알음알음 알던 지식과 20년뒤의 내가 공부해서 만들어낸 합작물을 보는거같아서 너무 신이 났다. 뒤로가서 어려워져도 이 마음 간직하길 ㅋㅋㅋㅋㅋㅋ