728x90
[web.xml]
<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
             <param-value>/WEB-INF/spring/root-context.xml</param-value>
      </param-value>
</context-param>

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

web.xml에 설정된 파라미터를 getInitParameter()메서드를 통해 참조할 수도 있지만
단순 문자열이 아닌 객체를 참조하는 방법이 listener이다.

프로그래밍에서의 listener은 귀 기울여 기다리다가 실행되는 컴포넌트(메소드나 함수)를 말한다.

리스너는 이벤트가 발생함과 동시에 특정 행동을 하는데,
이걸 이벤트 핸들링이라고 한다.


위 박스에서 listener에 적힌 ContextLoaderListener은 2개 이상의 dispatcherServlet를 생성했을때 필요하다.

 

ContextLoaderListener를 선언하지 않고 dispatcherServlet을 A,B 두개를 선언하면 각각의 독립적인 context를 가지게 된다. 
근데 만약 A와 B 둘 모두에게 필요한 bean이 있어야 한다면 전역Context를 만들고 그안에 bean을 생성하면 어디서든 접근이 가능해진다.

이때, ContextLoaderListener을 사용해 전역 Context를 생성해 줄 수 있다.

출처 : https://pangtrue.tistory.com/136

 

[Spring MVC] ContextLoaderListener(전역 Context 설정)

1. ContextLoaderListener란? 아래와 같은 2개의 dispatcherServlet을 생성했다고 가정해보겠습니다. A-dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring-co..

pangtrue.tistory.com

 

https://pangtrue.tistory.com/136

 

 

 

 

출처 : 코끼리를 냉장고에 넣는 방법 :: [서블릿/JSP] 리스너(Listner)란? 이벤트 리스너의 개념 설명. 구현 및 등록하기 (tistory.com)

 

[서블릿/JSP] 리스너(Listner)란? 이벤트 리스너의 개념 설명. 구현 및 등록하기

리스너란? 이벤트, 리스너, 이벤트핸들러 간략 개념정리 리스너는 단어의 뜻으로 보자면 (소리를) 듣는 사람, 청취자입니다. 프로그래밍에서의 리스너는 무언가 소리를 듣는 사람을 뜻하기 보다

dololak.tistory.com

 

728x90
728x90
contextConfigLocation 
 - 스프링프레임 워크가 동작하기 위한 설정파일의 위치를 알려주는 파라미터
contextConfigLocation이라는 파라미터를 사용하면 Context Loader가 load할 수 있는 설정파일을 쓸 수 있다.
ContextLoaderListener
 - 스프링에서 제공하는 클래스중 하나로 ContextLoader와 ServletContextListener를 상속하고 있다.
서블릿 컨테이너 생명주기에 맏춰서 spting의 application context를 servlet attribute에 등록하고 제거한다

스프링 프레임워크가 동작하려면 가장 기본적으로 web.xml 파일에 스프링 설정 파일을 명시해 줘야 한다.

스프링 설정파일을 읽어들이기 위해서는 org.springframework.web.context.ContextLoaderListener가 필요하다.

이 리스너가 동작해야 설정파일을 읽어들이고 필요한 객체들을 등록하고 만들 수 있다.

그럼 리스너가 동작하기 위해서 설정파일의 위치를 알려줘야 한다.

그래서 <context-param>안에 contextConfigLocation이라고 해서 파라미터와 위치를 지정해 준다.

하나의 파일이든 여러개든 명시해서 읽어올 수 있다.
(= Context Loader가 load할 수 있는 설정파일을 여러개 쓸 수 있다.)


설정파일 안에는 dataSource, bean(dao, service)등 필요한 객체들이 들어있다.


여기서 또 ContextLoaderListener가 뭐냐면 

ContextLoaderListener
 - 스프링에서 제공하는 클래스중 하나로 ContextLoader와 ServletContextListener를 상속하고 있다.
서블릿 컨테이너 생명주기에 맏춰서 spting의 application context를 servlet attribute에 등록하고 제거한다

 =
WAS구동시에 web.xml을 읽어들여 웹 어플리케이션 설정을 구성하기위한 즉, 초기셋팅작업을 해주는 역할

ContextLoaderListener의 역할

  • ContextLoaderListener 와 DispatcherServlet 은 각각 WebApplicationContext 를 생성하는데, 스프링에서 사용되는 Context 간의 계층 관계를 연결해주는 부분
  • 웹 어플리케이션이 시작되고 종료되는 시점에 Servlet Context가 생성하는 이벤트를 연결
  • Servlet WebApplicationContext 에서는 Root WebApplicationContext 를 참조 가능하지만, 그 반대로 참조 불가

 

[web.xml]
<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

출처 : BlueMoon... : org.springframework.web.context.ContextLoaderListener (egloos.com)

 

org.springframework.web.context.ContextLoaderListener

 

mars0717.egloos.com

 

https://developer-latteya.tistory.com/21

 


 

<context-param>은 sts에서 기본적으로 제공해주는 설정 파일외에, 사용자가 직접 컨트롤하는 XML파일을 지정해주는 역활을 한다.
위 박스에서 설정되어 있는 root-content.xml은 모든 서블릿과 필터에서 사용되는 루트 스프링 컨테이너에 대한 설정이다.

 

위 박스의 listener는 스프링 설정 정보를 읽는다.

 

https://mkil.tistory.com/286

 

[SPRING 시작-2] # web.xml 설정엔 무엇이 있을까? (Eclipse+Spring+Maven)

(1) STS 에서 기본적으로 제공해주는 설정 파일 외에, 사용자가 직접 컨트롤 하는 XML파일을 지정해주는 역할을 한다. 에서 설정되어있는 root-context.xml은 모든 서블릿과 필터에서 사용되는 루트 스

mkil.tistory.com

 

 

https://galid1.tistory.com/524

 

SpringMVC - Spring MVC 동작원리 - 2(Servlet에서 IoC Container를 사용하기)

Spring IoC Container를 ServletWeb project에 연동 이제 ServletWebApplication에 Spring을 도입하도록 하겠습니다. 기존 ServletWeb Application에서 Spring을 도입한다면 다음과 같은 것을 이용한다는 의미 입..

galid1.tistory.com

 

728x90

'Spring' 카테고리의 다른 글

[spring] ContextLoaderListener란  (0) 2021.11.11
web, WEB-INF 차이점  (0) 2021.08.24
(추가 필요@RequestBody )@ResponseBody, @RequestMapping, @RequestParam, @ModelAttribute  (0) 2021.01.09
1/06 스프링 chapter06  (0) 2021.01.06
1/04 스프링  (0) 2021.01.04
728x90

web은 직접 접근이 가능한데

WEB-INF는 직접 접근이 불가능하다.

 

 => web아래에 있는 파일들은 a링크로 이동이 가능한데 WEB-INF아래에 있는 파일은 a링크로 이동이 불가능하다.
controller을 통한 이동만가능함

 

https://namubada.net/266

 

[스프링 개념] web과 WEB-INF 폴더에 관해서 및 WEB-INF에서의 앵커 태그에 관해서

다음과 같이 두개의 test.jsp 파일이 있다. 하나는 web폴더(webContent)에 있고 하나는 web폴더의 하위 폴더인 WEB-INF 폴더에 있다. 그럼 우선 web 폴더에 있는 test.jsp 파일에 접속해보겠다. 다음과 같이 web

namubada.net

 

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

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

어노테이ㅏ션으로 바꾸기

messageBeanImpl은 사진 처럼 값을 넣어주고
오토와이어를 걸어준다
어노테이션으로 바꿀려면 xml을 지워야 하는데 거기서 aspect라고 알렸었는데 어노테이션으로 바꿔도 알려야 한다

그걸 loggingAdvice클래스에서
사진처럼 한다

5줄이 @Aspect 한줄로 바뀐다
aop:config부분은 사진처럼 바뀐다
이렇게 변한다
그리고 xml에 aspect를 어노테이션으로 쓰고 있다는 것을 알려야 한다.

 

@EnableAspectJAutoProxy는 xml파일에서
<aop:aspectj-autoproxy/>를 대신하는 코드이다
   

 


 
leader부분에서
MssageBeanImpl 클래스를 읽어올 수 있게 한다
인터페이스가 여러개면 배열로 넣으면 된다.
구현부에는 사진처럼 작성하면
익명클래스가 들어온다.

프록시를 처리할 수 있도록 핸들러를 만들어야 한다
 
   
   

 

1번과 2번은 같은내용이다 둘중 하나만 사용하면 된다
이건 다른파일에 DB에 연결하는 긴 문구를 따로 적어두고
네임스페이스를 사용하는 방법이다

${}를 사용할려면 참조하는 파일 위치를 알려줘야 한다

3가지 방법중 1개를 사용하면된다.

   
*JdbcTemplate

데이터베이스와 연동하기 위해 드라이브를 로드하고,
커넥션 객체를 가져와 연결하고,
자원을 해제하는 단계를 계속 반복하여 코드로 작성해야 하는 JDBC의 단점 때문에

스프링에서는 JdbcTemplate을 제공해준다.

   
전에는 impl
DB의 동작들을 템플릿이 해준다.

그래서 템플릿한테 커넥션풀을 줘야 한다.
위에 위에 사진에서 처럼 생성하고 값넣고 생성 하는걸

*JdbcTemplate가 대신해서 다한다.

https://blog.naver.com/rjh4820/221962598895
   
jdbc템플릿을 빈으로 설정하지 않고
스프링이 만들어서 제공하게 만들기

(사진처럼 안하기)

JdbcTemplate와NamedParameterJdbcTemplate는 상속관계

NamedParameterJdbcDaoSupport안에 
NamedParameterJdbcTemplate가 있다


xml에서 JdbcTemplate를 직접 bean으로 생성하지 않고

상속받아서 사용할 것이다.
아래처럼 상속을 이용한다.
상속하고 있는 NamedParameterJdbcDaoSupport클래스의

getJdbcTemplate() 메소드를 이용한다
getJdbcTemplate() 메소드안에 dataSource가 있기 때문에
xml에서 따로 뭐 생성을 안해줘도 property로 값을 받을 수 있다.

1번은 2번클래스에 setter를 찾는데 거기에 setter가 없다
근데 2-1을 보면 3을 상속받고 있는데
3번은 스프링에서 제공하고 있고 그 클래스 안에는 
1번에 대한 setter가 있기 때문에 정상작동한다
UserDAOImpl 클래스에서

getJdbcTemplate() 사용하면 2,3번을 사용해야 한다

3번방법에서는 ?는 헷갈릴수 있어서 알아보기 쉽게 :name 처험 쓴다
   
 
   

DB와 연결을 좀더 쉽게 하기 위해 설정을 미리 잡아두는게 커넥션풀

커넥션풀을 관리하는건 데이터 소스(DataSource)


자바와 DB를 분리해서 xml에서 DB를 관리하는걸 ORM이라고 한다
mybtis를 사용
   
수정부분
queryForObject()??
BeanPropertyRowMapper<>();????


 

???

https://github.com/benelog/spring-jdbc-tips/blob/master/spring-jdbc-core.md

 

benelog/spring-jdbc-tips

Spring JDBC 활용팁, SQL 관리 방안 등. Contribute to benelog/spring-jdbc-tips development by creating an account on GitHub.

github.com

 


 
property가 setter이기 때문에 위에서 set으로 받는다
   
  생성자는 빈을 만들면 자동으로 들어오기 때문에 오토와이어가 피료없다

set은 이름에 set이 붙기 때문에 자동으로 찾을 수 없어서 오토와이어를 붙어야 한다
 
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
1/04 스프링  (0) 2021.01.04
12/30  (0) 2020.12.30

+ Recent posts