13. 웹 프로그래밍 설계 모델
13-1 웹 프로그래밍 구축하기 위한 설계모델
Model 1 :
브라우저 ⇔ WAS(웹 어플리케이션 서버) ⇔ 데이터 베이스
(JSP ⇔ Service & DAO)
HTML에 java 태그를 동시 사용... 유지보수 어려움.
Model 2 :
브라우저 ⇔ WAS(웹 어플리케이션 서버) ⇔ Model ⇔ 데이터 베이스
(Controller ⇔ Service ⇔ DAO)
View (JSP)
13-2 스프링 MVC 프레임워크 설계구조
브라우저 ⇔ DispatcherServlet ⇒ HandlerMapping
⇔ HandlerAdapter ⇔ Controller
⇒View(jsp) ⇒ 브라우저
⇒ ViewResolver : 처리 결과를 출력할 view 선택
사진 출처 : http://wondongho.tistory.com/59
13-3 DispatcherServlet 설정
web.xml 서플릿을 맴핑
스프링 설정파일 있으면(servlet-context.xml) 맵핑 하여--> 스프링 컨테이너생성 : HanderMapping, HandlerAdapter, ViewResolver
초기화 파라메터에서 스프링 설정 파일 지정하지 않은경우 서블릿 별칭( appServlet-context.xml)을 이용 --> 스프링 컨테이너 생성 : HanderMapping, HandlerAdapter, ViewResolver
13-4. Controller 객체 @Controller
DispatcherServlet ⇔ HandlerAdapter ⇔ Controller
servlet-context.xml :
<annotation-driven/> |
@Controller public class HomeContoller{} |
13-5 Controller 객체 @RequestMapping
DispatcherServlet ⇔ HandlerAdapter ⇔ Controller
@RequestMapping("/success") public String success(Model model){ return "success"; } |
13-6 Controller 객체 Model 타입의 파라메터
DispatcherServlet ⇔ HandlerAdapter ⇔ Controller
@RequestMapping("/success") public String success(Model model){ model.setAttribute("tempData", "model has data!!"); return "success"; } |
: 개발자는 Model 객체에 데이터를 담아서 DispatcherServlet 에전달가능
: DispatcherServlet에 전달된 Model 데이터는 View 에서 가공되어 클라이언트에게 응답처리
13-7. View 객체
DispatcherServlet ⇔ HandlerAdapter ⇔ Controller
<!-- Resolves views selected for rendering by @Controllers 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> |
:: 리턴값을 갖고 viewResolver 설정 값을 합쳐서 jsp를 만들어줌.
13-8. 전체적인 웹 프로그래밍 구조
브라우저: 최초 사용자 요청 ex) ip/cho4/sucess
⇒ DispatcherServlet
⇔ Controller : @Controller 적용 클래스 검색
⇔ @RequestMapping("success") :사용자 요청 해당 메서드 실행
⇒ ViewResolver : 처리 결과를 출력할 view 선택
⇒ View : 브라우저에 JSP 응답
14. 스프링 MVC 웹서비스
14-1. 웹 서버(Tomcat)다운로드
현재 실무에서 7, 8 주로사용
Binary Distributions > Core: >zip (pgp, sha512)
14-2. 웹 서버(Tomcat)와 이클립스 연동
Tomcat 더블클릭
Server Location > Use Tomcat Installation ( Takes control of Tomcat Installation)
Server Options > Publish module contexts to seprate XML files
Ports > HTTP/1.1 8090 (Oracle 8080 을 써서 임의 변경)
cf) 톰캣 재설치 불가 가이드 : http://linguist79.tistory.com/24
http://localhost:8090/ or http://127.0.0.1:8090/ 접속
14-3. 이클립스 STS (String Tool Suit) 설치
Eclips Marketspace > sts 설치
14-4. STS를 이용한 웹 프로젝트 생성
Spring Legacy Projedt 생성
Spring MVC Project 선택
패키지명 등록
프로젝트 명등록
com.drengneer.spring -->접속주소 : http://localhost:8090/spring/
14-5. 스프링 MVC 프레임워크를 이용한 웹 프로젝트 분석
15. 스프링 MVC 웹서비스2
15-1. 프로젝트 전체구조
webapp: 웹과 관련된 파일 : 스프링 설정파일, jsp, HTML, 등
resources: JSP 파일을 제외한 HTML, css, js 파일등 위치
spring 폴더 스프링 컨테이너를 생성하기 위한 스프링 설정파일이 위치
views. jsp 파일
pom.xml 메인 레파지토리에서 프로젝트에 필요한 라이브러리를 내려받기 위한 메이븐 설정파일
15-2. web.xml
<servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> |
15-3. DispatcherServlet
웹 어플리케이션 최초 사용자의 요청이 발생되면 DispatcherServlet이 사용자의 요청을 받는다.
따라서 DispatcherServlet을 서블릿으로 등록해주는 과정을 설정해주어야 하고 요청을 받기 위해 서블릿 맵핑 경로는 "/" 로 설정
브라우저 ⇔ DispatcherServlet ⇒ HandlerMapping
⇔ HandlerAdapter ⇔ Controller
⇒ ViewResolver ⇒View(jsp) ⇒ 브라우저
HandlerMapping : 컨트롤러 검색
HandlerAdapter : 메서드 실행요청
Model And View 객체 이용
15-4. servlet-context.xml
<annotation-driven /> : 어노테이션 사용을 위한 태그
<resources mapping="/resources/**" location="/resources/" /> : 리소스 : index.html, common.css...
<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>
<context:component-scan base-package="com.drengineer.spring" /> : 패키지 이름
15-5. Controller
15-6. View
16. STS를 이용하지 않은 웹 프로젝트
16-1. 스프링 MVC 웹 에플리케이션 제작을 위한 폴더 생성
16-2. pom.xml 및 이클립스 import
16-3. web.xml
16-4. 스프링설정파일(servlet-context.xml)생성
16-5. root-context.xml 작성
16-6. 컨트롤러와 뷰 작성
16-6. 실행
17. Service & DAO 객체 구현
17-1. 웹 어플리케이션 준비
17-2. 한글 처리
<!-- 한글설정 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter>
<filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- //한글설정 --> |
17-2. 서비스 객체 구현
서비스 빈생성
//@Component
//@Repository
@Service
빈연결
// MemberService memberService = new MemberService();
// @Autowired 스프링 전용, 타입으로 지정
// @Inject 자바 전용, 타입으로 지정
@Resource(name="memberService") //자바전용 이름으로 지정, java 8부터 설정이 바뀌어 annotation 임포트 여부 확인 필요
18. Controller 객체 구현
18-1. 웹 어플리케이션 준비
18-2. @RequestMapping을 이용한 URL 맵핑
@RequestMapping("/member")
public class MemberController {
@RequestMapping(value = "/memberJoin", method = RequestMethod.POST)
public String memberJoin(Model model, HttpServletRequest request, Member member) {
18-3. 요청 파라메터
// Member member = new Member();
// member.setMemberId(request.getParameter("memberId"));
// member.setMemberPhone2(request.getParameter("memberPhone1"));
// @RequestParam(value = "memberId", required = true) String memberId,
// @RequestParam(value = "memberId", required = false, defaultValue = "010") String memberPhone1
// member.setMemberId(memberId);
// member.setMemberPhone1(memberPhone1);
1. 멤버 커맨드 객체이용
public String memberJoin(Model model, HttpServletRequest request, Member member) {
2. 중첩 커맨드 객체이용
PHONE: <input type="text" name="phoneList[0].memberPhone1"/>-
<input type="text" name="phoneList[1].memberPhone3"/>
19. Controller 객체 구현
19-1. @ModelAttribute
1. 닉네임 기능 : java 코드에서는 member로 사용하고 jsp 에 mem으로 사용
public String memberJoin(@ModelAttribute("mem") Member member) { // Member :: 커멘드 객체 |
2. 공통실행 기능
@ModelAttribute("serverTime") public String getServicerTime(Locale locale) { Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); return dateFormat.format(date); } |
19-2. Model @ ModelAndView
Model 은 view에 데이터만 전달하기위한 개게
Model And View 데이터 뷰를 함께 전달 Model
ModelAndView mav = new ModelAndView(); mav.addObject("memberIp", request.getRemoteAddr()); mav.setViewName("memberLoginOk"); return mav; |