728x90

1,2,3 에서 어노테이션을 써서 
root-servlet에서 어노테이션을 쓴다는 표시로만 알려준다
1
여기서 빈 생성해서 root파일에서 다 지움
2
어노테이션쓰고 셋터대신 오토와이어사용
3
어노테이션쓰고 셋터대신 오토와이어사용
   
여기서 오토오아이어ㅏ 해주니까 셋터 지워야한다
 
 

원래는 xml파일에 bean생성해줘야 하는데
어노테이션을 쓰면 스프링이 자동으로 만들어주니까 bean지우고 xml에 어노테이션을 사용한다는 코드를 작서함녀 된다

그리고 conf를 쓰는거면 @Configuration으로 여기서 bean설정한다고 알리고
root-servlet에서 쓴 bean을 지우고 conf파일에 대신 bean생성을 하고 root파일엔 어노테이션 쓴다는 코드를 작성
root는 웹과 과련없는 내부파일이니까
여기에 dao랑 service도 어노테이션쓴다고 알리고
userDAO파일에 @Component쓴다고 말하고 오토와이어생성
service에서도 똑같이


전체흐름

 


요청한대로 처리하고 돌아와서
성공했을때, ㅅ ㅣㄹ패했을때 구분


예전에는 submit하면 액션타고 갔는데 지금은 돌아오게 만든다
데이터를 3개 보내줘야 하는데 submit으로 했을때는 알아서 name값을 보내주는데 jquery는 안해준다

이렇게 데이터를 보내준다. &는 연결기호, 공백도 인식하기 때문에 띄어쓰기x

사진처럼 jquery.ajax하면 안돼고
$.ajax 해야한다

제이슨표기법으로

serialize()로 호출하면 자동으로 'name='+$('name').val()+'&id='+$('id').val()+'&pwd'=+$('pwd').val() 이렇게 생성해준다

완성

 

제이쿼리에서 post와 url주소를 적었기 때문에
id나 name 빼고는 지워도 된다
이제 여기서 write를 요청하면 컨트롤러로 가고 dao다 돌고 
돌아오는 컨트롤러에서 리턴에서 문제가 생긴다
돌아오는길에 여기서 리턴이 어디로 갈지 몰라서 에러가 난다
지금 실행을 하면 파란색 길로만 다녀야지
view페이지인 초록색으로 못가게 막아야 한다
@ResponseBody를 하면 view를 타지 말라는 의미가 된다
return도 없앤다

스프링의 기본  작동은 뷰로 가는건데 ResponseBody를 사용하면 뷰로 안가고 윗 사진의 파란색 경로처럼 움직이게 된다

@ResponseBody???

 

그럼 페이지를 이동안하고 이 안에서 작동한다
여기서 오른쪽의 url은 jsp파일이 아니라
컨트롤러에다가 보내는 값이다.
(writeForm.jsp 에서 form 태그 안에 있던 action와 똑같은거다)

오른쪽의 write를 컨트롤리 인식해서 알맞은 기능을 해주고 값을 되돌려 준다.

중복체크

여기서는

돌아올 값이 필요하니깐 dataType을 써줘야한다
데이터타입은 이렇게 4가지로 받을 수 있다
중복확인을 할려고 DAO에 거쳐 컨트롤에서 돌아올때
사용가능 불가능에 대한 값을 보내줄텐데

그 값을 function() 괄호안에 넣어줘야 한다

이제 왼쪽의 컨트롤에  중복확인에 대한 컨트롤메소드를 만들어줘야 한다
 
 
컨트롤러에 만들면
UserService 인터페이스에 생성하고
UserServiceImpl에 만들고
UserServiceImpl에서 사진처럼 만들면
userDAO.checkId 때문에
userDAO 인터페이스에 만들어지고
UserDAOMybatis클래스에 만들어지고
mapper로 가고
mapper파일에서 DB와 연동되면 값이 나올건데
그 나온 값이 역순으로 돌아온다
근데 여기서 사용 가능 불가능을 사진처럼 하면 안된다
error는 사용 불가능을 보여주는게 아니라
아예 DB까지 가지도 못한 상태를 말한다
UserServiceImpl클래스에서

리턴값에 String으로 했기 때문에
이렇게 받아줘야 한다
정-상

리스트

컨트롤로 넘어가게 만드는 부분
 
 
 
다시 역순으로 컨트롤러로 돌아가면
이렇게 데이터 DB에서 받아와서 
객체 싣고 보내기
웹에는 자료형이 없기때문에 이름만 변수명만 쓰면된다

웹안에서 자바문을 쓰기 위해서 맨위에 core태그를 선언하고

c:if, c:forEach문을 사용해서 DB에서 받아온 list를 반복문으로 돌려준다
이제 xml이나 제이슨으로 바꿀려고 하는데 바꿀려는 이유는 
제이쿼리를 쓸려다 보니까

값을 이 4가지로만 쓸수 있는데 list같은 객체를 못써서 그렇다
제이쿼리를 쓰면서  xml이나 제이슨을 쓰면 list값을 받아 쓸 수 있다

제이쿼리를 쓰면 페이지 이동없이 한 페이지에서 깔끔하게 쓸 수 있는데
안쓰면 페이지를 이동하면서 해야한다

위에서 list를 제이슨 표기법으로 바꿔본다 (Spring 한글파일 참조)

{ }로 감싸면 무조건 Obhect가 된다

근데 사진처럼 직접 바꾸는게 아니라
설정하면 사진처럼 바꿔주는거고 저렇게 나온다는 걸 볼려고 만든?? 거? 암튼 저런 모양으로 나온다

흐름

index페이지에서 출력을 누르면 
컨트롤러에서 ~를 거쳐 DAO를 통해 DB에 들어갔다가
list에 담아서 다시 돌아와서 컨트롤러로 온다.
그리고 가져온 list를 list.jsp에 보내준다

jsp페이지에서 DB에서 꺼내온 list값을 제이슨으로 바꿔준다
   
index.jsp에서 출력을 누르면 컨트롤로 와서 사진에 빨간 부분을 거쳐서

list.jsp로간다
그리고 list.jsp의 제이쿼리부분을 읽고
컨트롤러로 가서 DB에서 값을 꺼내올거다

위에서 했던 <c:for > 코드 다 지우고

table에 id속성 넣어주고
제이쿼리를 쓰기위해 스크립트 넣고 src를 쓴다

.ready부분이 스크립트에서 window.onload와 같은코드다
list페이지로 들어가면 제이쿼리를 바로 읽고
url을 통해 컨트롤러로 온다


콘솔창에 찍어보면 나온다
   

 

 

 mvn들어가서
디펜던시 가져오고
입력
gson도 추가
디펜던시를 추가해주면

제이슨?을 불러올수있다
 
 
 
사진처럼 
파란색 배열들을 array에 add로 담아주고
array를 list에 put으로 담아줘야 한다
 

list.jsp에 들어가게되면 스크립트가 자동으로 읽혀서 
스크립트안에있는 제이쿼리가 실행된다 (근데 스크립트는 html, text, xml, json 4개만 값으로 받을 수 있다.)
내가한 프로젝트에서 제이쿼리의 값은 컨트롤러에서 다루는데
거기서 내가 원하는 list의 값을 받기 위해 json을 사용한다
DB에서 DTO들을 꺼내서 컨트롤러에서 list에 저장하고
그 list를 json에 저장하고
그걸 제이쿼리로 보내줘서
화면에 띄운다

 
$.each??
https://verad.tistory.com/entry/jQueryeach-vs-each
이런 모양으로 나온다고 생각하면 된다
items를 찍고 확인해보면 사진처럼 나온다
객체를 출력한다
items.name을 출력하면
DB에 있는 id값이 순서대로 하나씩 다 나오게 된다
??
 이렇게 table에 껴주면 된다
이렇게 나오는데
스크립트가 먼저 읽히기 때문에
위로 나오게 된다
table을 스크립트에서 생성하게 만든다

append는 추가로 붙이는거다
근데 계속 값이 추가가 되서 계속 붙는다
   
append와 appendTo가 있다

이 안 에 값을 넣어야 한다
td는 객체값을 가져와야 하기 때문에 $를 쓴다
 
 
 
appendTo는 table 아래에 같다 붙이라는 말이다
   

수정

이거 만든다

그리고 resultDiv를 만들어서
여기에 글자도 넣고 수정form도 넣으면 된다

입력꺼 가져와서 좀만 수정하고
<div id="modifyFormDiv">로 감싼다


그리고 mofidyForm은 일단 가리고
검색버튼을 클릭했을때를 넣는다
데이터를 받는 저 노란부분은 이름을 아무렇게나 해도 된다
data도 되고 result도되고
dog도 된다
DAO부분은...

DB에서 받은 값을 json으로 보내기위해서 json생성
담아준다.

근데 만약DB에서 못꺼내왔다면? json에는 {}이 담긴다
null이 아니라 공백
DB에서 있는 값을 꺼내오면 위에 사진처럼 값을 보내고
값이 없으면 공백을 보낸다
이게 if 만약
result값이 비어있냐? 라고 물어보는거다
비어있으면 수정할거 없다고 Div 문띄운다
그게 아니면 아까 숨겨둔 입력창을 보이게 하고
값을 넣어준다.
 
다시작성을 누르면 아이디까지 지워지는거 막기

다시작성 버튼이 위에 검색버튼이랑 똑같이 만들면 된다
 
 
다시작성 버튼을 누르면
검색이랑 같은 기능을 만들게 코드를 만들어보자

(복붙하면 되긴하는데 그럼 너무 길어지니까)
$('#searchBtn').trigger('click');
를 입력하고
$('#searchBtn')에 event를 추가해준다

trigger

 

 


 

 

리스트에서 검색

String이 반환되면 문자열이 아니라
뷰 이름을 찾아서
JSP를 렌더링 하고,
뷰가 없으면 404를 반환한다

@ResponseBody 어노테이션이 있다면 뷰를 찾지 않고, String을 그대로 반환한다.

위에꺼는 jsp페이지를 찾아가고
여기 사진에선 페이지가 아닌 값으로 반환한다

   
jsonarray에 fromObject라는 함수도 있다.
아래사진이 풀어서 쓴거고
이 사진에 쓴것 처럼 Map으로 한게 간편하게 만든 것이다.

Map 반환해도 @ResponseBody 때문에
dispatcher서블릿에서 MessageConverter가 JSON 형식으로 변환해서
$.ajax에게 데이터를 보내준다

@ResponseBody가 있으면 ObjectMessageConverter가 실행되어 반환된다.

   
서블릿xml
 
 
li
MappingJackson2JsonView가 lsit로 만들어준다

BeanNameViewResolver는 빈에 있는 이름을 찾아가서 일하는 resolver
BeanNameViewResolver 다음 순위로 InternalResourceViewResolver가 실행되고
MappingJackson2JsonView때문에 값이 json으로 변한다

보통 MappingJackson2JsonView를 쓸려면 이름을 통해 붙잡아주는 BeanNameViewResolver 가필요하다
ModelAndView를 쓰면 resolver를 찾아가는데
InternalReInternalResourceViewResolver를 먼저 찾아서 페이지를 넘어가지말고
BeanNameViewResolver를 통해 mav.setViewName("jsonView")의 name을 보고 
MappingJackson2JsonView로 찾아가서 값을 json으로 변환하라는 의미

 

 


모델앤뷰를 보내면 viewResolver가 받는다.

 

모델앤뷰는viewresolver로 찾아가는데
xml에 리졸버가 2개있다
그중 우선순위가 0순위인 beanNameResol;ver로 가는데
id랑 매칭하는걸 찾아간다.

setViewName 때문에 viewResolver로 가서 페이지를 찾아가는데
ajax가 걸려있어서 jsp페이지로 넘어간다.
   
   

list 검색

이거 두개 다른이유 찾기

input은 알아서 서버로 가는데
<img는 알아서 안감

1. <button></button>

 . 닫는 태그 </button>가 존재하며, 그 사이에는 텍스트, 이미지 등의 요소를 넣을 수 있다.

 . 버튼에 표시되는 값은 여는태그와 닫는태그 사이에 들어간 자식태그의 내용이다.

 . type속성을 지정해서 button, reset, submit 등의 기능을 지정할 수 있으며, default는 submit 이다.

 2. <input type="button" />

 . 닫는 태그가 따로 존재하지 않는다.

 . 버튼에 표시되는 텍스트는 value속성의 값

 . 기본적으로 아무런 동작을 수행하지 않는다.
   
 
선택옵션을 선택하지 않았을때
아이디가 table인곳에서 tr (테이블안에 있는 후손 tr)
gt (>)

gt() 함수의 gt 는 great than, '~~보다 큰' 이라는 뜻.
꺽쇠로 치면 > 에 해당
즉, gt(0) 이면 0보다 큰 인덱스를 가진 녀석들 모두를 선택할 수 있습니다.

tr요거

tr>0인 것들을 지워라.
(아래에 리스트들이 지워지고 이름, 아이디, 비밀번호 만 남는다

그리고 DB에 값을 보낸다

옵션값이랑 searchText에 입력된 값, 총 2개를 보내야 한다.
주석한건 문자열로 보내는거고 [ 내용 ]
아래꺼는 json으로 보내는것  { 내용 }
json의 형태는 { }로 감싸진다.

stringify가 뒤에있는 값들을 json형태로 변환해준다.
stringify?
아래껄로하면 컨트롤러에서 Map으로 담아야 한다.
   
리스트에서 요청을 보낼때 contentType이 어떤 문자로 뭐로 넘어가는걸 알려야 한다
요청하는 곳에서 컨트롤러로 데이터를 보낼때 contentType을 알려줘야지

컨트롤러에서 글자 타입을 인식해서 우리가 원하는 값을 가져다준다.
컨트롤러
맵퍼파일

1번 stringfiy 를 안쓰고 값을 보낼때는
 컨트롤러에서 @RequestParam으로 값을 받는다 
(문자열로 받기 때문이다. (searchOption='+$('#searchOption').val()+"&searchText="+$('#searchText').val()) 이렇게 보내지는데 {} 형태가 되야지 json이지 ()에 감싸진건 json이 아니다)


2번 stringfiy 를 써서 JSON으로 값을 보낼때는
 contentType을 명시해서 json형식으로 값이 넘어간다는걸 알려주고 @RequestBody로 값을 받아야 한다
( {searchOption='+$('#searchOption').val()+"&searchText="+$('#searchText').val()} 이렇게 문자열이 아니라 JSON형태로 쓴걸 그대로 제이슨형식으로 값을 보내주고
컨트롤러에서 제이슨으로 생긴 값을  @RequestBody로 받아서 그대로 html에 뿌리게 해준다.)

 


stringify

JSON.stringify( )는 자바스크립트의 값을 JSON 문자열로 변환한다.

JSON이란?
JSON은 JavaScript Object Notation의 약자로, 브라우저와 서버사이에서 오고가는 데이터의 형식

배열의 값과 일치하는 값만 문자열화된다. 

https://steemit.com/kr-dev/@cheonmr/json-stringify

 

JSON.stringify( )란 무엇인가? — Steemit

JSON.stringify( )는 자바스크립트의 값을 JSON 문자열로 변환한다. JSON이란? JSON은 JavaScript Object Notation의 약자로, 브라우저와 서버사이에서 오고가는 데이터의… by cheonmr

steemit.com

https://wani.kr/posts/2020/02/11/make-parser-1/

 

파서 만들기 (1) - JSON.stringify - 완두블로그

프로그래밍을 하다보면 규칙을 가진 문자열에서 필요한 형태로 가공해야할 때가 있습니다. 간단하게는 URL에서 부터 복잡하게는 XML, JSON 등이 있습니다. 다른사람들도 다 사용하고 있는 표준화

wani.kr

https://velog.io/@adbr/JSON.stringify-%EC%9D%B4%EB%9E%80

728x90
728x90
d 드라이브의 git_home 파일에 들어가서
git_repo 파일 만들기
git_repo에 들어가서
현재 위치한 파일을 깃 저장소로 초기화 하기
git init 하면 이제 이름에 master가 생긴다
git config --list : 설정들을 볼 수 있다
그냥 메모장파일 하나 만들어서 git_repo에 저장

확인
파일 새로 생성했으니까
add하고 commit

깃 허브에 연결할려면 원격 저장소 생성해야 한다

 
두번째꺼 git bash에 입력

-u 는 upstream이라는 뜻인데 안써도 된다

origin은 htts://github.com/leeguntak/git_repo.git

를 뜻하고
main은 오리진을 메인으로 하겠다는 뜻

 
깃허브 새로고침하면 생성된거 확인
   
연습삼아 깃 허브에 올릴 파일 아무거나 
git_repo에 복사하기

깃에 올릴때는 원본파일은 컴퓨터에 따로 보관하고 복사본을 깃허브에 올리자
파일 넣은 상태로 
git atatus로 상태확인하면 
add안해서 빨간색으로 표시된다
  helloServlet파일은 예전에 이클립스에서 한 파일인데 이 안에 환경설정하는 파일들을 깃에 안올려도 된다

그런것들을 빼고 올릴려면 .gitignore이란 파일을 만들면된다
메모장에서 깃허브에 올릴때 제외할 파일명? 들을 작성한다
그리고 모든 파일 형식으로 저장해서
got_repo안의 helloServelt파일안에 저장한다
이제 helloServelt파일을 git Bash에서
add하고

 

커밋하고
push하면 깃 허브에 올라간다
push가 깃허브에 올린다는 의미이다
깃허브 홈페이지에 들어가서 확인
 

이클립스에서

test 프로젝트 만들어서 
간단한html파일 생성
 
window - show view - other - git - git Repositories - open하면 오른쪽에 창 생김
여기서 이그노 파일 작성하고 저장
그리고 사진처럼 들어가서 커밋
 
 
 
   

 
   
728x90
728x90

 

 
 
servlet-context는 컨트롤러 bean이있고
root-context에는 화면에 대한 bean이있다
SqlSession을 import할려면

jar파일을 넣거나
pom.xml에 디펜던시를 추가해야한다


mybatis-config는 자원이기 때문에 WEB-INF에 넣지 않고 SRC파일에 넣는다

전에는 여기에 mapper와 1개 더 넣었는데
이번에는 타입알리아스 1개만 넣는다
   컴트롤러에서 imple-> mybatis -> mapper-> mybatis -> imple-> controoler -> writejsp
728x90

'Spring' 카테고리의 다른 글

web, WEB-INF 차이점  (0) 2021.08.24
(추가 필요@RequestBody )@ResponseBody, @RequestMapping, @RequestParam, @ModelAttribute  (0) 2021.01.09
1/04 스프링  (0) 2021.01.04
12/30  (0) 2020.12.30
12/28-29 수업내용, 스프링 DB  (0) 2020.12.28
728x90

웹과 상관이 있냐 없냐에 따라서 설정파일을 잡는게 다르다

지금만든 프로젝트 기준으로는 웹과 상관이 있으면 dispatcher 서블릿.xml로 된다


다이나믹~ 으로 프로젝트 만들고
jar파일넣고
스프링으로 바꾸고

web.xml에 서블릿 등록
컨트롤러 역활하는 자바 클래스만들고
@Controller 선언해서 이 클래스가 컨트롤러인지 알수있게 표시
@RequestMapping을 선언해서
처음 시작 페이지의 주소?를 입력해주고
기본값인get을 입력

@RequestMapping은 http request로 들어오는 url을 특정 controller 클래스나 메소드로 연결시키는 역할을 한다.

https://blog.naver.com/gmlwo308/222190960392

https://joont92.github.io/spring/@RequestMapping/

그리고 ModelAndView를 생성
 
xml생성
sumController??
InternalResourceViewResolver치면 자동완성 됨

확장자.jsp를 붙여주기 위해선 InternalResourceViewResolver가 필요하다

viewResolver는 string 으로 return 되는 view 의 이름을 spring 이 찾아서 클라이언트에 던져주는 역활

https://blog.naver.com/kimdongy1000/221958837601
prefix 는 앞에 붙는 접두사고
suffix 는 접미사이다
sum이라는 폴더에서 input.jsp를 찾는다

아래 사진처럼
서블릿xml에서 /sum/을 붙여주는 prefix을 주석걸고
핸들러에서 직접 주소를 적어줘도 된다.
sum폴더 만들고 그안에 input내용 입력
result.jsp도 만들어주고 실행하면
결과가 잘 나온다

포워딩으로 사용하겠다는설정은 
서블릿 이름이 Dispatcher로 받아와서 그렇다
   
  ModelAndView는 오로지 어느 jsp로 가라는말만 하고 있어서 쓸모가없다
그래서 이렇게 바꿔도 에러가 나지 않는다.

리턴되는 타입이 String이면 단순 문자열이 아니라 뷰의 이름으로 인식한다

String은 리턴타입으로 단어를 보내면 .jsp를 붙인 뷰 이름으로 인식한다.
뷰이름이 아니라 실제 문자열로 리턴하고 싶을 때는 @ResponseBody를 붙인다.


이렇게 글자로 나온다.
   

지금까지 컨트롤러가 값을 안받고 그냥 jsp가 바로 값을 받았는데
컨트롤러가 값을 받게 만들어보자

SumController에서
@Request로 값을 받고
result.jsp로 값을 보내준다.
 
 
 

 


 

404는 서버

500은 프로그램 잘못짠거

400은 파라메터에 값을 안넣어서 나오는 에러다.

 


 

 

값이 안들어간다면 (required=false)
기본값으로 0을 넣어주고 (defaultValue = "0")
0을 int가 아니라 Stringf 타입으로 해줘라.(String x,)

사진처럼 써주면  
값을 넣지 않아도 400에러가 나오지 않는다
x,y 둘다 해주면
에러 안난고 사진처럼 된다.
근데 사진을 보면 숫자가 합해진게 아니라 문자로 나와서 그냥 나열된다....

문자열로 받아지는 x,y값을 int로 변환시킨다

그럼 잘 나온다.

이걸 자주 쓰는곳은 게시판에서 무조건 1페이지로 가게 만들때 사용한다.
기본값으로 1을 해주면 무조건 1페이지로 가니깐

 

 


그리고 데이터를 여러개 한번에 받는 방법이 있다.

받는 데이터가 많아지면 RequestParam을 갯수대로 써줘야 하는데 Map을 쓰면 한번에 받을 수 있다.


Map은 데이터를 받는부분,
ModelMap은 데이터를 내보내는 부분

ModelMap???

주소를 타고 오는 방식은 전부 스트링으로 잡아줘야 한다.

이렇게 해도 결과는 잘 나온다.

 


 

DTO로 받기

DTO만들고 @Data해주기
사진처럼 해주면
DTO를 이용해서 값을 사용할 수 있다.
사진처럼 DTO객체를 보내줘도 되는데
그럼 result.jsp에서 하나씩 get~ 으로 받아줘야 한다.

 

결과를 String, ModelAndView, ? 등 여러가지 방법으로 받을 수 있다.

 


스프링 설정 파일을 폴더 이동하거나 이름을 바꿀때

디폴트값은 /WEB-INF/dispatcher.xml 이지만

난 이름을 dispatcher 말고 contextConfigLocation로 바꾸고
이 파일의 위치는 사진과 같은곳에 있게 만들었다.
 
그리고 기존에 사용했던 dispatcher-servelt의 내용을
mvc-context로 옮긴다

(기존의  dispatcher-servelt은이제지워도된다)
 그리고 실행하면 잘된다


web.xml에 
새롭게 xml파일을 적어놨기 때문에
실행하면 더이상 2번을 찾아가지 않고 1번을 찾아간다.

viewResolver

xml파일에서 viewResolver을 통해 접두사 접미사를 미리 적은 덕분에

 

컨트롤러에서 리턴값에 풀 주소를 안적어줘도 된다.
만약 viewResolver를 안해줬다면
return "/view/sungJuk/result.jsp";
이렇게 항상 길게 적어야 한다.

InternalResourceViewResolver

https://m.blog.naver.com/PostView.nhn?blogId=kbh3983&logNo=220778740252&proxyReferer=https:%2F%2Fwww.google.com%2F

 

23. 스프링 뷰 리졸버 : View Resolver 개념

스프링 뷰 리졸버 : View Resolver 개념 뷰 포스팅에서...- DispatcherServlet에게 뷰 정보를 전달하는...

blog.naver.com

 

 

view이름을 찾는 방법은 ViewResolver 에서 관리 된다
이 ViewResolver 가 핸들러의 타입이 String , ModeAndView 일때만 작동을 한다
그 외
다른 방법에서는 viewResolver 이 null 로 세팅이 되기 때문에 이름으로 jsp 파일을 찾을 수 없다

https://blog.naver.com/kimdongy1000/222102351660

 

[spring - mvc] model , modelAndView

사실 이 둘은 크게 차이가 없다 modelAndView 는 model 에서 그저 String view 를 객체 안에 넣는것이 ...

blog.naver.com


Model, ModelMap vs ModelAndView

model,modelMap은 데이터만 저장을 하고
modelAndMap은 데이터와 이동하고자 하는 View page를 같이 저장한다

https://blog.naver.com/youhr21/221868885031

 

[JAVA] ModelAndView와 ModelMap, Model 차이

● Model, ModelMap Vs ModelAndView 차이점 : 데이터만 저장한다 vs 데이터와 이동하고자 하는 Vi...

blog.naver.com

 


@ModelAttribute

1번페이지에서 파라미터로 넘길값이 많을때

이 부분에 파라미터를 5개~10개 이렇게 쓰기엔 너무 효율성이 떨어지고 힘들다
그래서 DTO클래스를 많이 이용하는데
DTO클래스의 이름마저도 길다면 그것또한 힘들다
그래서 @ModelAttribute 어노테이션을 이용해 쉽게 사용할 수 있다.

첫번째 페이지에서 이름, 국어, 영어, 수학 총 4개의 정보를 넘겨줘야 한다.
그래서 SungJukDTO라는 클래스를 만들었다
파라미터를 넣어주는 부분에 @ModelAttribute 를 사용하고
SungJukDTO 타입의 sungJukDTO를 넣어저줬다.

여기서 ("내용") 이 부분은 복잡한 이름을 대신할 별명을 넣어주면 된다.
안쓰면 그냥 sungJukDTO를 사용하게 된다.

만약 사진처럼 간단하면?
사용안하면 된다 
   

 

728x90

'Spring' 카테고리의 다른 글

web, WEB-INF 차이점  (0) 2021.08.24
(추가 필요@RequestBody )@ResponseBody, @RequestMapping, @RequestParam, @ModelAttribute  (0) 2021.01.09
1/06 스프링 chapter06  (0) 2021.01.06
12/30  (0) 2020.12.30
12/28-29 수업내용, 스프링 DB  (0) 2020.12.28
728x90

JdbcTemplate()

 

queryForObject : 오로지 1개의 레코드만 가져온다
queryForList : 1개 이상의 레코드들을 가져온다

Object queryForObject(String sql, Object parameter, Object result)
queryForObject( sql문, new BeanPropertyRowMapper<DTO>(DTO.class), result )
- DB로부터 1개의 레코드를 가져와 가바 객체에 저장한다
- 오직 한 개의 레코드만 반환되는 여부를 검사한다, 하나 이상의 레코드가 반환 되는 경우 예외처리된다.
- 값이 없으면 null반환
- 하지만 이 함수를 사용할때는 Exception을 잘 파악하고 사용해야한다.일반적으로는 찾고자하는 값이 없을 경우 null을 return할 것이라 생각할 것이다. 하지만 위 함수는 record를 못찾으면 EmptyResultDataAccessException을 발생시킨다.

new BeanPropertyRowMapper<DTO>(DTO.class)
-쿼리문을 통해 가져오는 결과값들에 해당하는 속성들과 매칭되는 변수를 가진 DTO에 설정해준다
-생성자를 통해서 설정을 하기 때문에 필요한 변수들 이외에 다른 변수들이 여러개가 함께 있어도 구분하여 사용하면 되므로 다른 변수들이 DTO에 같이 있어도 무관하다
자바 파일에 DB연결시 사용하는 예시
값이 없을시 예외처리를 해야하는데 하지 않으면 에러가 난다.
사용 결과

 

queryForList()
- DB로부터 1개 이상의 레코드를 가져와 자바 객체의 List를 만드는데 사용한다.

 


Mybatis

typeAlias쓰면 mapper파일에서 sql문 할때 type이랑result생략가능하지 않나?

https://blog.naver.com/thgus5570/221118953503

 

typeAliases 사용방법

XML Mapper를 이용하는 데 있어 매번 parameterType이나 resultType을 패키지까지 포함된 클래스명을...

blog.naver.com

 

sqlSessionFactory 는 내용이 바뀌지 않고 계속 똑같이 사용됨

이렇게 계속 중복되게 쓰지말고 줄이자
스프링의 xml파일에서 bean생성을 통해 자바에서 중복으로 사용되던 코드를 줄일 수 있다

커밋까지 자동으로 해주는 트렌젝션까지 해서 
중복되는 코드를 줄일 수 있다.

https://blog.naver.com/adioson/221382367739
이클립스에서 마이바티스를 사용할 때 xml에 db연결을 위한 커넥션풀과 
sql문장을 쓰는 매퍼파일,
타입알리아스가 있었다.

매퍼파일은 여러개가 있어도 되지만 커넥션풀이 있는 xml파일은 1개만 있어도 된다.


스프링에서 빈설정은 전부 스프링이 한다
이 부분에는 sql세션이 있는 매퍼가 필요
xml에 SqlSession, Transaction, userDAOMybatis를 
빈으로 생성했기 때문에
자바 클래스에서 SqlSession생성가능
그리고 mapper에 sql문을써준다

아래에 있는 UserDAOMybatis클래스에서 
xml에 써있는 커넥션 풀과 sqlSession을 통해 DB를 연결한다

저게
sql생성, sql문, 뭐 가져오고 3~5줄되는걸 줄인거다.
그리고 mybatis-config.xml 파일에서 매퍼파일을 사용한다는걸 알린다

applicationContext.xml의 SqlSession에 mybatis-config.xml를 읽어오라는코드를 적어놨다.
applicationContext.xml에
<tx~ >라고 트렌젝션 어노테이션을 사용한다는 말을 했기 때문에 

UserDAOMybatis 클래스에 트렌젝션 어노테이션을 사용해서 자동으로 commit하고 close까지 한다
 
매퍼는 따로 빼도 되고 1번
 
스프링에 줘도 된다  2번
 
오라클 컬럼명과 UserDTO의 필드명이 다를때 
resultMap을 사용해서 강제 매핑하고

parameterType이 아니라 resultMap을 사용한다.
왼쪽의 밑줄친 3줄이 스프링을 사용하면서 오른쪽의 
private SqlSession sqlSession 한줄로 바뀌고

아랫줄을 보면 DB연결, sql문, commit, close하는걸 한줄로 바꿔준다.
   

 

conf파일 이용 -> xml에 한거 자바파일로 옮기기(다운그레이드?)

이거 먼저 xml에 있는거 옮기기

아이디명이 메소드명으로 넘어온다

DB연결에 사용하는데 사용하는 DataSource는 여러가지 종류가 있지만 그 중에 많이 사용하는 BasicDataSource를 이용한다

BasicDataSource는 Apache에서 제공하는 클래스이다.


출처:https://babtingdev.tistory.com/323
sqlSessionFactory를 가져온다

getObject의 리턴타입이 팩토리이다
???? 왜 SqlSessionFactoryBean 안하고 SqlSessionFactory 쓰지?
https://mybatis.org/spring/ko/getting-started.html

리소스를 선택해야 한다  왜?
자원이 있어야 해서??

스프링 프레임워크에는 CLASS_PATH에 저장된 리소스 파일을 쉽게 가져올 수 있도록 해주는 ClassPathResource클래스를 제공한다

ClassPathResource는 스프링 프레임워크가 제공하는 클래스로, 리소스에 대한 파일 이름, File 객체, URL, URI 등 리소스와 관련된 정보를 제공한다

new ClassPathResource에 적은 주소를 자원으로 삼아서 
setConfigLocation를 만들었다

????

그리고 데이터 소스도 추가한다.
????!?!?!
 

자바파일에 작성하는법 공부하기

UserInsertService
빈 만들어주기

만드는 김에 UserDTO랑 userDAOMybatis도 만들어줌


   

 

스프링 웹

 

--

컨트롤러가 여러개 있으면 
requestMapping을 사용한다.

handler가 @controller가 적혀있는 클래스를 찾아서
requestMapping을 통해 같은 걸 매핑해준다.
이클립스에선 request에 값을 싣어서 보내줬는데

jsp에선 modelAndView에 싣어서 보내준다



파란별로 되어있는건 스프링이 자동으로 만들어주고

직접 만들거는 초록색으로 칠한거 2개뿐이다
   
 
서블릿의 이름에 따라 많이 영향을 받는다
   
 핸들러를 이용할려면 자바 파일에 컨트롤러를 써줘야 한다

핸들러는 스프링이 자동으로 만들어준다
 
@Controller가 여러개 있으면
@RequestMapping를 통해서 사용자가 원하는걸 찾아낸다.

get이 기본방식

hello라는 주소를 치면 스프링이 알아서 부른다
내가  url값에 주소를 hello처럼 친다
그럼 get방식으로 되어있으면
스프링이 알아서 '메소드명()' 메소드를 불러낸다.

사용자가 직접 이름을 맘대로 지을 수 있다.
빨간색이 겹치는건 그 클래스안에서 부른 메소드이기 때문에 에러가 안나는데

주소값(이름)인 파란색이 겹치면 에러가 난다

빨간색과 파란색을 똑같이 할 필요는 없다
그냥 알아보기 쉽게 똑같이 한다
 
뷰를 띄우면 internalResourceViewResolver가 설정한 확장자 파일로 열어준다는 코드이다

내부적으로 setter로 받기 때문에 property로 객체를 만든다

(class에 있는 단어 internalResourceViewResolver를 클릭하고 f3을 누르면 상세 설명이 나오고 그 안에  setter로 받는다는 내용이 있다)
 
 
 
   
   
   

 

728x90
728x90

이게 있어야 
트렌젝션 매니저를 bean으로 쓸려고 썼는데
tx 저거를 해야지 트렌젝션 매니저를 어노테이션을 쓴다고 알리는 것이다
   
728x90
728x90

css

font size 다음에 와야 한다
 
repeat
no-repeat
 
인터넷 창의 왼쪽부터해서 170 만큼 띄어라
   
 
 
 
.snb ul a{} 이게 더 큰? 커서
.snb ul{ } 지워도 됨
밑줄
   
position: absolute; 때문에 오른쪽에 붙음
   
&gt 는 꺽쇠
   
 
그림크기와 글자
   
 
   
 
 
   
   

 


 
   

footerArea를 만들어주고

footer는 다른곳에 안묶이게 만들어준다
footer에 있던 속성을 footerArea에 옮기고
아래에 있는 btmnav의 마진을 따로 잡아주고
wrap영역의 높이를 브라우저 높이에 맞게 꽉 채운다 
이부분을 지우는 법은
#fff를 추가해서 header부분을 하얀색으로 칠해버린다

아래부분의 겹치는 선도
footer에 색을 줘서 지울수 있다.

footer를 고정시킬려면
body와 footer부분을 독립적으로 만들고 구역을 정해준다.

그리고 footer부분을

를 해준다.
position은 relative로 해줘야 한다.



   
728x90

'CSS' 카테고리의 다른 글

css를 이용한 스프라이트 기법  (0) 2021.04.13
css 기억해야할거(선택자)  (0) 2021.03.21
CSS3 position  (0) 2021.03.20
CSS2, 삼각형그리기(border), float, position  (0) 2021.03.18
CSS2 (cascading style sheets)  (0) 2020.12.21

+ Recent posts