You will be fine

<Spring> 9. MVC pattern

by BFine
반응형

1. MVC

  • MVC란 Model- View -Controller 로 구현을 세가지 영역으로 나눈 것이다.

  • 기존 방식에서는 연결->연결->연결 .... 로 이루어저 구현이 복잡하고 보기가 힘들다. 

  • 클라이언트 -->  Controller  --->  Model  ------데이터----->  View  ------화면-----> 클라이언트

  • Controller : 요청받고 분석 후 Model에 명령, Model : 받은 명령에 따라 데이터를 생성하고 View에 전달

  • 장점 : 유지보수 편리, 확장성

2. Filter

  • 한글 설정을 위해 사용, UTF-8 ( Dynamic web project의 경우 )

  • implements : init() doFilter() destroy() 상속받는다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
=================Encoding==========================================
String encoding;
    public void destroy() {
        // TODO Auto-generated method stub
    }
  public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
  encoding=fConfig.getInitParameter("encoding");
       // xml에서 설정한 값 불러오기 
    }
    public void doFilter(ServletRequest request, 
    ServletResponse response, FilterChain chain) 
    throws IOException, ServletException {
 
        request.setCharacterEncoding(encoding);
        chain.doFilter(request, response);
    }
===================================================================
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
=============web.xml===============================================
 <filter>
    <display-name>encoding</display-name>
    <filter-name>encoding</filter-name>
    <filter-class>test.Encoding</filter-class>
<!- encoding 설정한 class -->
<init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
<!- encoding을 전범위에 설정>
  </filter-mapping>
==================================================================
cs


3. Request mapping(using xml)

  • src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
===================xml===============================
<beans:bean id="객체명" class="클래스명"></beans:bean>
<!--매핑되어지는 객체 생성-->
 
<beans:bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- url를 매핑 시켜주는 bean 객체 생성 -->
    <beans:property name="mappings">
<!--참조변수 mappings에 값 등록,  여러개 가능-->
      <beans:props>
        <beans:prop key="/main">MainView</beans:prop>
        <beans:prop key="/매핑명">위의 객체명</beans:prop>
<!--url로 key값이 들어오면 객체가 실행된다-->   
      </beans:props>
    </beans:property>
</beans:bean>
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
===================java=====================
public class MainView implements Controller{
// Controller interface를 상속
@Override
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
 
ModelAndView mv=new ModelAndView(); 
// 전달 가능
     mv.addObject("이름", 객체 );
    // 전달받은 곳에서 request를 통해 사용가능
     mv.setViewName("test");
      // 실행할 jsp 매핑명 test.jsp
        return mv; 
       // 매핑명 실행 
    }
}
cs

4. @RequestMapping

  • uri mapping 과정을 Annotation을 활용하는 방법, RequestMapping("[프로젝트]/경로")

  • @Controller , @Requestmapping 메소드/클래스 @ModelAttribut: 매개변수/메소드

  • 프로젝트 오른쪽클릭 -> 맨아래 두번째 spring tools -> show RequestMappings : URL 매핑과 메소드를 볼수 있다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven /><!--@Controller 사용-->
 
<!-- Resolves views selected for rendering by @Controllers 
@Controller를 통해 번역된 view들을 jsp resource로 분해
to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean
 
<!--@Component @Service @Autowired 등 어노테이션 쓸수있게 설정-->
<context:component-scan base-package="com.java.annotaion" />
    
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// view 이름을 return 하지 않을 경우 매핌명.jsp 이동
    @RequestMapping("/test")
    public void test(){}
    
// /WEB-INF/views/+ String +.jsp
    @RequestMapping("/test2")
    public String test2(HttpServletRequest request){
      HttpSession session=new HttpSession();
     session=request.getsession();
        return "a";
    }
    
// ModelAndView or Model
    @RequestMapping("/test3")
    public ModelAndView test3(Model model){
        ModelAndView mv=new ModelAndView();
        model.addAttribute(""); // 객체전달
        mv.addObject("");//객체전달
        mv.setViewName("전달이름");
        return mv;
    }
    
//방식을 달리하면 똑같은 매핑명 사용가능 
    @RequestMapping(value="/test4",method=RequestMethod.POST)
    public void test4(){}
    @RequestMapping(value="/test4",method=RequestMethod.GET)
    public void test5(){}
    
// 매개변수는 객체형태로 전달가능
    @RequestMapping("/test5")
    public void test6( @ModelAttribute("매핑이름") Test ts){}
 //@ModelAttribute 사용하지 않을경우 클래스 앞글자를 소문자로 바꾼 이름이 전달 모델이 된다



※ form 태그에서 설정한 name태그 속성이 사용자가 만든 클래스와 일치하면 객체를 매개변수로 사용할 수 있다.

※ @RequestParam(value, defaultValue, required=true[꼭있어야함 없을시 에러발생(400에러)] ) 자료형 변수

      defalutValue="", required=false --> 없을경우 설정할 값

      보통 @RequestParam("매핑할 name 태그") String 원하는 이름 [ 태그와 이름을 맞춰주면 쓸 필요 없다.]


5. xml, @ModelAttribute

  • 메소드 앞에 @ModelAttribute를 쓸 수 있다. -> return값을 매개변수로 사용할 수 있다.

  • root-context.xml bean설정파일 (mvc 아닌곳에서도 사용할 수 있는), servlet-context.mxl : mvc 와 관련된 설정파일

  • 프로젝트 오른쪽클릭 -> 맨아래 두번째 spring tools -> show RequestMappings : URL 매핑과 메소드를 볼수 있다.

반응형

'공부(2018~2019) - 스킨변경전 > Spring' 카테고리의 다른 글

<Spring> 11. File Upload&Download  (0) 2018.05.15
<Spring> 10. internationalization, Spring JSON  (1) 2018.05.15
<Spring> 8. AOP  (0) 2018.05.04
<Spring> 7. Annotation  (0) 2018.05.03
<Spring> 6. Spring basic, IoC, DI  (0) 2018.04.30

블로그의 정보

57개월 BackEnd

BFine

활동하기