파일 경로 잘 모르겠어서 캡쳐해놓음
Model - 데이터를 보관
View - 화면. Jsp
Controller - 조작 Sevlet
JSP 모델1 - V + C, M (요즘 안씀, 지금 해봤자 시간낭비래)
JSP 모델2 - V, C, M (요즘 안씀, 지금 해봤자 시간낭비래)
Framework - 모델2 확장 (우리는 이것만 배우는 느낌)
Controller에서 한 단계 더 늘어나고,
TestSpring은 안 쓸거고, 강사님이 샘플 배포, 그 샘플만 있으면 웹개발 가능하데
메이븐 관련 설정할때 충돌나는경우가 많아서 뭘 갖다써야하는지 몰라서
강사님이 셋팅해서 줌
실습 가위바위보 랜덤게임
내풀이
test4.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="resources/jquery/jquery-1.12.4.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$(":button").on("click",function(){
$("#txt").val($(this).val());
$("#goForm").submit();
});
});
</script>
</head>
<body>
<!-- 각 버튼 클릭시 해당 값을 test5로 전송하여 램덤으로 구한 결과값을
통하여 컴퓨터와의 승무패를 화면에 전송 및 출력
-->
<form action="test5" id="goForm" method="post">
<input type="button" value="Rock" />
<input type="button" value="Paper"/>
<input type="button" value="Scissors" />
<input type="hidden" name="txt" id="txt"/>
</form>
</body>
</html>
test5.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
사용자가 ${param.txt}를 냈습니다.
${result}
</body>
</html>
강사님 풀이
test6.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="resources/jquery/jquery-1.12.4.js"></script>
<script type="text/javascript">
$(document).ready(function () {
// id의 경우 무조건 첫번째 것만 해당
// 복수로 지정할 경우는 다른 형태를 사용
$("[type='button']").on("click",function(){
$("#sel").val($(this).attr("no"));
$("#goForm").submit();
});
});
</script>
</head>
<body>
<!-- 각 버튼 클릭시 해당 값을 test7로 전송하여 램덤으로 구한 결과값을
통하여 컴퓨터와의 승무패를 화면에 전송 및 출력
-->
<form action="test7" id="goForm" method="post">
<!-- 값 보관용 -->
<input type="hidden" name="sel" id="sel"/>
</form>
<input type="button" value="가위" no="0" /> <!-- no는 추가속성임 우리가 넣은거 -->
<input type="button" value="바위" no="1" />
<input type="button" value="보" no="2" />
</body>
</html>
test7.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
컴퓨터가 ${com}를 냈습니다
${res}
</body>
</html>
TestController.java
package com.spring.test.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class TestController {
// RequestMapping(value = "주소") : 해당 주소가 들어올 경우 아래 메소드 실행
@RequestMapping(value = "/test")
public ModelAndView test(ModelAndView mav) {
// ModelAndView : 데이터를 보관하며, 뷰 정보나 뷰가 담기는 객체
// Spring에서 Controller의 메소드 인자는 Spring에서 자동 생성해서 제공한다.
// -> 우리가 new를 할 필요가 없다, 샘플데이터 만들때 제외 쓸일이 거의 없을거래
// addObject(키, 값) : Model에 해당 키와 값을 담는다
// 값으로 담길 수 있는것은 Object이기 때문에 무엇이든 담긴다
mav.addObject("msg", "Hello");
// setViewName(값) : 뷰의 정보를(위치 또는 주소)를 보관한다
mav.setViewName("test/a");
return mav;
}
@RequestMapping(value = "/test2")
public ModelAndView test2(
// Controller에서 값 받을때 2개
// 1. HttpServletRequest : 요청에 대한 정보가 담긴 객체, 내가 필요한 정보 아닌것도 가져올수 있음
// 요즘은 잘 안쓰고
HttpServletRequest req,
// 값만 가져올래! 2. @RequestParam : 넘어오는 값 중 변수명과 이름이 같은 것을 받음
// 값이 한두개 넘어올때
@RequestParam String txt,
// 2의 옵션 @RequestParam(value = 값)
// RequestParam에서 value옵션의 경우 변수명이 일치하지 않아도
// value가 넘어오는 키와 같으면 넣어준다
@RequestParam(value = "txt") String s,
// 2의 옵션 @RequestParam에 Collection 형태를 제공할 경우
// 해당 형태에 맞추어 자동으로 값을 집어넣음
// Map의 경우 키, 값의 형태로 제공되며,
// List나 배열의 경우 같은 이름으로 여러개가 넘어오면 순자적으로 보관
// 값 여러개
@RequestParam HashMap<String, String> m,
ModelAndView mav) {
// getParameter(값) : 넘어오는 값 중 키가 지정한 값과 같은 경우 해당 값을 가져옴
System.out.println(req.getParameter("txt"));
System.out.println(txt);
System.out.println(s);
System.out.println(m.get("txt"));
mav.setViewName("test/test2");
return mav;
}
@RequestMapping(value = "/gugu")
public ModelAndView gugu(ModelAndView mav) {
mav.setViewName("test/gugu");
return mav;
}
@RequestMapping(value = "/gugures")
public ModelAndView gugures(@RequestParam int txt, ModelAndView mav) {
String gugu = "";
for (int i = 2; i <= 9; i++) {
gugu += txt + "*" + i + "=" + txt * i + "<br/>"; // 화면에 붙일때는 html이기때문에 br로
}
mav.addObject("gugu", gugu);
mav.setViewName("test/gugures");
return mav;
}
@RequestMapping(value = "/test3")
public ModelAndView test3(ModelAndView mav) {
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
for (int i = 10; i > 0; i--) {
HashMap<String, String> data = new HashMap<String, String>();
data.put("no", Integer.toString(i));
data.put("title", "Test" + i);
list.add(data);
}
mav.addObject("list", list);
mav.setViewName("test/test3");
return mav;
}
// 내 풀이
@RequestMapping(value = "/test4")
public ModelAndView test4(ModelAndView mav) {
mav.setViewName("test/test4");
return mav;
}
// 내 풀이
@RequestMapping(value = "/test5")
public ModelAndView test5(@RequestParam String txt, ModelAndView mav) {
System.out.println(txt);
int user = 0;
if (txt.equals("Scissors")) {
user = 1;
} else if (txt.equals("Rock")) {
user = 2;
} else if (txt.equals("Paper")) {
user = 3;
}
int com = (int) (Math.random() * 3 + 1);
String result = "";
System.out.println(user);
switch (user) {
case 1: // 가위
switch (com) {
case 1: // 가위
result = "컴퓨터가 가위를 냈습니다. 비겼습니다.";
break;
case 2: // 바위
result = "컴퓨터가 바위를 냈습니다. 졌습니다.";
break;
default: // 보
result = "컴퓨터가 보를 냈습니다. 이겼습니다.";
break;
}
break;
case 2: // 바위
switch (com) {
case 1: // 가위
result = "컴퓨터가 가위를 냈습니다. 이겼습니다.";
break;
case 2: // 바위
result = "컴퓨터가 바위를 냈습니다. 비겼습니다.";
break;
default: // 보
result = "컴퓨터가 보를 냈습니다. 졌습니다.";
break;
}
break;
default: // 보
switch (com) {
case 1: // 가위
result = "컴퓨터가 가위를 냈습니다. 졌습니다.";
break;
case 2: // 바위
result = "컴퓨터가 바위를 냈습니다. 이겼습니다.";
break;
default: // 보
result = "컴퓨터가 보를 냈습니다. 비겼습니다.";
break;
}
break;
}
mav.addObject("result", result);
mav.setViewName("test/test5");
return mav;
}
// 강사님 코드
@RequestMapping(value = "/test6")
public ModelAndView test6(ModelAndView mav) {
mav.setViewName("test/test6");
return mav;
}
// 강사님 코드
@RequestMapping(value = "/test7")
public ModelAndView test7(@RequestParam int sel, ModelAndView mav) {
// 0 - 가위, 1- 바위, 2- 보
// 랜덤 생성
int com = (int) Math.floor(Math.random() * 3);
// 결과
String res = "";
if (sel == com) {
res = "draw";
} else if ((sel == 0 && com == 2) || (sel == 1 && com == 0) || (sel == 2 && com == 1)) {
res = "win";
} else {
res = "lose";
}
// 컴퓨터 보내고 싶을때 근데 내가 버큰 클릭한것도 숫자로 받기때문에 의미가 없음
switch (com) {
case 0:
mav.addObject("com", "가위");
break;
case 1:
mav.addObject("com", "바위");
break;
case 2:
mav.addObject("com", "보");
break;
}
System.out.println(com);
mav.addObject("res", res);
mav.setViewName("test/test7");
return mav;
}
}
DI(Dependency Injection) : 의존성 주입
스프링이 지금까지 자바쪽 웹 개발 탑 1이 된 이유, 메인이 되는 핵심, 내용 어렵다
=> 미리 생성된 객체들을 필요에 의하여 해당 객체에 접근 할 수 있도록 연결하는 것
서비스 패키지 만들기
인터페이스 만들기
클래스 만들기
@Service 붙이고, 인터페이스 참조
컨트롤러도 새로 만듬
이렇게 만듬
인터페이스 요청했는데 클래스 넘어오는 이유, 위의 사진을 더 자세히보면 아래처럼
이름을 만들어 놓은게 인터페이스
사람이 클래스
인터페이스 이름 삼아서, 사람을 동작하게 하겠다
단점 로딩할때 시간이 걸림
일단 객체를 다 만들어 놓고,
한번 만들고 나면 필요한 곳에서 쓸수있음
부를수록 객체에 대한 효율이 올라가
그래서 규모가 커질수록 스프링 사용하는 효율이 올라감
서버사이드랜더링 같군
1. TestController2에서 메소드 적고, 빨간줄 뜨면 Add~~
2. ITestService에 메소드가 생김, public만 추가해주기, ITestService에 ctrl + 마우스 가지고가면, 구현부로 갈지 참조부로 갈지 결정할수있음
3. 참조부로 가서 메소드 내용 작성
4. jsp그려주면 끝
구글 드라이브에서 샘플 파일 다운
Finish하면은 새로운 라이브러리를 다운받는중
프로젝트에 X가 쳐져 있을거임
프로젝트 우클릭 -> 메이븐 -> 업데이트 프로젝트
log4j.xml에 <!DOCTYPE ~~ 부분을 위에처럼 바꿔줌
이클립스 버전에 따라 안 바꿔줄수도 있음
서버 등록
샘플 스프링 파일 설명
이클립스만 쓸수있음
데이터의 문자 형태를 지정하겠다
Controller : 주소랑 메소드 연결, View정보 반환
Service: 기능 구현(메소드)
Dao(Data Acess Object) : 외부 저장소에 접근
회사마다 조금씩 다름, Dao를 Controller에서 할수도 있데
testController2.java
package com.spring.test.controller;
import org.springframework.beans.factory.annotation.Autowired;
@Controller
public class TestController2 {
// @Autowired : 다음 지정된 객체 의존성 주입 요청
@Autowired
public ITestService iTestService; // 인터페이스를 요청했는데 클래스가 넘어와?
@RequestMapping(value = "/test8")
public ModelAndView test8(ModelAndView mav) {
iTestService.test();
mav.setViewName("test/test8");
return mav;
}
}
lTestService.java
package com.spring.test.service;
public interface ITestService {
public void test();
}
TestService.java
package com.spring.test.service;
import org.springframework.stereotype.Service;
@Service
public class TestService implements ITestService {
@Override
public void test() {
System.out.println("TestService메소드 호출");
}
}
test8.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Test8입니다.
</body>
</html>
느낀점
어제는 jsp -> controller -> jsp이렇게 값 주고 받았으면
이제는 service를 하나 더 만들고, 인터페이스를 만들고,
'TIL > academy' 카테고리의 다른 글
국비 TIL(Today I Learned) 20220804 스프링 게시판 글추가, 수정, 삭제 (0) | 2022.08.04 |
---|---|
국비 TIL(Today I Learned) 20220803 스프링, DB랑 연결, DAO, myBatis (0) | 2022.08.03 |
국비 TIL(Today I Learned) 20220729 core태그, el 태그, spring설치 (0) | 2022.07.29 |
국비 TIL(Today I Learned) 20220728 시험, 팀플 (0) | 2022.07.29 |
국비 TIL(Today I Learned) 20220727 ajax로 데이터 받아오기 (0) | 2022.07.27 |