728x90

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;






+ Recent posts