<Spring> 9. MVC pattern
by BFine1. 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