태그

2019년 8월 31일 토요일

helloworld1,2 공부



#################### helloworld1 공부

1. @RequestParam
   ex)
   @RequestParam(value="query",required=false) String query
   @RequestParam(value="page",defaultValue="1") int page

    /board/search?query=zzz&page=4 와 같이 
HTTP요청 파라미터를 메서드의 파라미터로 전달받을 때 사용   
[ SearchController.java 참조 ]

2. 뷰 이름 자동 지정
메소드의 리턴타입이 Model이나 Map,void 인 경우
뷰 이름이 URL이 됨.
리턴된 model이나 map은 request scope에 담겨서 해당되는 뷰에 전달된다.

3. @ModelAttribute()
  1>커맨드객체앞에 붙으면 객체의 이름을 바꾸는것이고
  2>일반 메서드 이것이 붙으면 메서드의 리턴값을 모델에 넣어주겠다라는뜻
 리턴하는것을 모델에 추가해줌. -> 리턴값이 Board 클레스(사용자 정의클래스) or List<ABC> 등등...이면 @ModelAttribute()가 (메소드 위에)붙는다고 생각..
              말그대로 Model을 다루네!

    @ModelAttribute() 메서드에서 초기화 해줄 수 도 있다.
  예) 처음 요청했을 때, get방식인데 <input type="text"의 > 초기값을 채우고 싶다.
제일 처음 요청들어갔을때 초기화로 값세팅을 하는방법임 -> boardInit() 메소드 참고!
    
    @ModelAttribute() 는 같은 파일에 있는 다른 메서드가 이를 request로 담아간다.
즉. @ModelAttribute() 는 항상 호출된다. 
  그리고  다른 메서드에 모델로써 전달된다.
>> 즉, XXXXController가 처리하는 모든 URL(~메소드)에 모델을 넣어주겠다.

  사용가능 ${}로써

4. @Initbinder vs @Valid
@Initbinder: 스프링은 @InitBinder 어노테이션이 적용된 메서드를 이용해서 폼과 커맨드 객체 사이의 매핑을 처리해주는 WebDataBinder를 초기화할 수 있도록 하고 있다. 이 메서드에서 WebDataBinder.setValidator() 메서드를 이용해서 커맨드 객체의 유효성 여부를 검사할 때 사용할 Validator를 설정하게 됨

@Valid 와 @InitBinder
 : validate() 메소드를 직접 호출하지 않고 스프링프레임워크에서 호출하는 방법.
[ JSP's form과 커맨드 객체의 관계 ]
https://snoopy81.tistory.com/324

[회원가입 폼 예제]
https://bbiyakbbiyak.tistory.com/4?category=718247
https://bbiyakbbiyak.tistory.com/3?category=718247

5. //redirect:라서 url 요청이 되므로, jsp로 넘어가는게 아니다. 메핑되는 메서드로 넘어간다.
   return "redirect:/board/write";  
   //이때 전달되는 모델 개수는 1개 : keywords 
   // submit메소드 참조

6. 메소드의 리턴타입이 ModelAndView인 경우.... setViewName()을 이용해서 view를 정할 수 있다.   
   -> view가 보여질 경로 설정 가능.( 리턴타입이 일반적인 String 같네..? -> 그럼 String과 ModelAndView의 차이점은 model을 담을수 있냐
         유무인데.. 헌데 String리턴타입 메소드는 어떻게 모델을 담드냐? -> 매개변수 쪽에 Model을 받아서 처리~!) 
   
    VS 리턴타입이 Map, Model, void 인 경우 - > Requestmapping URL이 뷰이름됨.

   [ HelloController.java 참조 ]



7.  handlerMapping 안거치고 Url을 바로 뷰로 매핑하기.. 
  => 홈피에서 정적인 부분은 바로 뷰로 넘길때. UrlFilenameViewController가 처리해줌
  (단,xml에서 세팅해줘야함)



#################### helloworld2 공부

1. hibernate 유효성 검사 vs Validator 유효성 검사
- hibernate를 활용하면 어노테이션만으로도 유효성체크가 가능해진다.

2. 서버와 클라이언트(기존 폼 태그)

3. form 태그( form:form )
 spring버전 2.0부터 데이터바인딩과 관련된 광범위한 태그를 제공
기본 형식은 아래와 같은 형태로 입력하며, 입력값이 없을시 method는 'post'로, action값은 '현재 요청URL'값이 설정된다. 
<form:form> </form:form>

예) <form:form path="userId">
 <!-- path는 Member.java에 있는 property(변수)와 연결  -->

        <!-- web으로 실행 후 소스보기를 통해 비교해 볼 것 -->

이렇게 변환된다! <input id="userId" name="userId" type="text" value="">

4. @RequestMapping(value="/login",method=RequestMethod.GET)
public String logForm(Login login) {
return "login";
}
//get방식에서도 모델객체 사용.
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
사용하면 내부적으로 자바코드가 돌기 때문에 모델객체가 있어야함!
따라서 폼페이지에서 내부적으로 getter,setter 사용가능.

// 변경사항 : jsp에서 commandName이 아닌 modelAttribute로 변경하여 사용할 것!!
// ex) <form:form modelAttribute="login">


 #################### helloworld3 공부


https://m.blog.naver.com/scw0531/220986622908
1. @Servcie()의 선언 위치 그리고 컨트롤러에서 서비스 생성할때 @Autowired와의 관계는? =>
# 해당 클래스가 service라는것을 알리기위해 @Service 붙임.
# 인터페이스로 구성시 확장성과 유연성이 좋아진다. 인터페이스를 구현할 클래스에 
@Service붙이는것..

# xml의 beans에 등록해주어야지 싱글톤(=인스턴스 재사용)과 @Autowired가 가능함.
# 즉,순서가...... @Service를 붙이면 자동으로 검색해서 빈으로 등록함. 그 이후에야 컨트롤러 단 같은 부분에서 @Autowired 선언이 가능한것.

# 컨트롤러 단에서 서비스를 호출하기 위해서 우선 서비스 정보를 가지고 있는 클래스를
선언한다. 클래스는 Impl파일들을 의미하게 되고 new로 객체생성 없이 하기 위해서
@Autowired를 써준다. Autowired같이 자동적으로 객체를 만들어주고 사용할 수 있게
해주는 것을 스프링에서는 DI 라고 한다.

# 해당 클래스가 DAO라는것을 알리기위해서 @Repository를 붙여준다.

# 최초 @Controller시작 -> @Service -> @Repository 까지 이어짐.
 그 과정에서 @Autowired로 이루어진다는 점!

#servlet-context와 root-context의 차이점 + form을 이용한 화면이동 부분 
https://m.blog.naver.com/scw0531/220988401816
https://m.blog.naver.com/scw0531/220984890046

2. JSTL이란 html에서 제어로직을 추가하여 데이터를 조작하는 가능하게 하는 기술
ex) <c:forEach>

3. 스프링부트란?
http://bitly.kr/RgkvLI

스프링부트 이용시, myBatis의 기존방법인 XML 설정파일에 상응하는 놈을 자바파일로 만들어서 세팅해준다. https://m.blog.naver.com/scw0531/221067648218
이를 위해서는 @Configuration 을 사용. 이 @를 통해 스프링부트에서는 XML 설정파일로 인식

spring_chapter1공부

#################### spring_chapter1공부

1. 싱글톤이란?

2. 의존이란?

3. DIP 의존 역전 원칙 ,방법 ,예제    


4. @Autowired  vs @Resource  = @Autowired 어노테이션이 타입을 이용해서 주입할 객체를 검색했다면, @Resource  어노테이션은 빈의 이름을 이용해서 주입할 객체를 검색한다. 
> 만약 같은 '타입'의 bean이 2개일 경우 > @Qualifier 어노테이션 사용 > 사용 방법? 

http://bitly.kr/h03Kmc 

 +  @Resource 어노테이션은 생성자에 적용할 수 없고 필드나 메서드에만 적용할 수 있다.
   
    - @Qualifier 사용법
    @Autowired
    @Qualifier(" ")   해주고 -> xml에서 빈 속성으로 qualifier 태그 달아줌
  


5. property란?

6. @Component   클래스앞에 붙이면 자동으로 빈을 xml에 등록시켜줌  , <bean>을 자동등록

7.  모델(Model)이란?

8. @Autowired를 함으로써 생성자나 setter를 이용한 주입방법을 피할 수 있다. 디폴트생성자로 가능(spring_chapter2 참고)

9. <beans:beans xmlns = 와 xmlns : 의 차이점

10. <resources mapping="/resources/**" location="/resources/" /> 의미
  
11. @Component vs @Controller비교 

12. 스코프 비교 4가지. 이에 따른 req,resp

page 1.  JSP가 생성시 pageContext 생성.
                  pageContext로 페이지 레벨(page-level) 객체들 저장,조회가능. 
          2. 페이지 스코프에 있는 객체는 각 페이지의 PageContext에 저장됨.
          3. PageContext는 객체를 생성한 JSP페이지를 통해서만 접근 가능. 
          4. 응답을 클라이언트에 보내거나 서버내에서 포워드하면 해당 객체 사용 불가.
              
request 서버는 클라이언트의 HTTP 요청이 있을 때마다 (HttpServletRequest 인터페이스를 구현한) 객체를 생성. 
서버는 요청을 처리하면 클라이언트에 응답을 돌려보낸다. 클라이언트는 자신에 되돌아온 요청과 해당 요청의 속성을 더는 이용할 수 없고 JVM의 가비지 컬렉션 대상이 된다.
session 웹 컨테이너는 다중 페이지 요청 시 사용자를 식별하기 위하여 HttpSession 인터페이스를 구현한 객체를 생성.  일정 시간이 지나면 소멸
application서블릿 컨테이너는 ServletContext 인터페이스를 구현한 객체를 생성.
                      객체는 켄테이너가 처음으로 시동될 때 실행된다.
                      요청 스코프와 세션 스코프의 상위 스코프는 ServletContext다. ServletContext는 모든 애플리케이션에서 애플리케이션 객체를 조회하고 저장할 수 있도록 한다. 또한 애플리케이션 객체의 수명은 서버가 살아있는 동안이다.


13.@Controll 가 붙여있으면 handlerMapping의 검색 대상이 된다.

14. POJO

15. command객체................JSP's form 태그에서 submit되면 백단 메소드의 커멘드 객체와 연결!

게시물

DP 공부