안녕세계

[T아카데미] 모바일 서버 프로그래밍 기본 - 5일차 본문

[T아카데미] 모바일 서버 프로그래밍 기본 - 5일차

Junhong Kim 2016. 7. 1. 17:30
728x90
반응형

● Command Control(Front Control) Design Pattern : 실무에서 사용하는 디자인 패턴

 

DispatherServlet : 클라이언트 요청을 포워딩하는 서블릿

 

서블릿을 하나로 통합

 

  <servlet>
   <servlet-name>action</servlet-name>
   <servlet-class>com.tacademy.board.controller.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>action</servlet-name>
   <url-pattern>*.do</url-pattern>
  </servlet-mapping>

 

여기서 do는 보통 회사이름 nhn, daum, nexon 등으로 한다.

서블릿을 위처럼 설정하면 어떤 주소던지 *.do 를 통해서 들어오기 때문에 하나로 통합할 수 있음.

 

그렇다면 *.do 까지의 주소를 먼저 뽑아내야 한다.

 

String uri = request.getRequestURI();
StringBuffer url = request.getRequestURL();

 

System.out.println("uri : " + uri);
System.out.println("url : " + url);

 

uri : /board/*.do                           -> /*.do 만 필요함
url : http://localhost/board/*.do

 

String path = uri.substring(uri.lastIndexOf("/")); //  - > 마지막 "/"  부터 뽑아내기

 

 

DispatherServelet 에서 요청 처리 역할 혼자 다함

HandlerMappings 에서는 HashMap으로 저장(등록)하고 해당하는 것 리턴함

Controller 에서는 인터페이스

 

 

결론, url -> 컨트롤 기능 -> 맵핑하면 끝!!!

 

커맨드 커트롤 디자인 패턴을 사용하는 이유는

기존 MVC는 서블릿을 변환해서 새로운 기능을 추가할 때 서버를 꺼야하는 치명적인 상황 발생

 

새로운 기능 추가하기가 용이하기때문에 이방법을 쓴다.

 

 

framework 만들어진틀 가져다가 쓰기.. servlet 절대 손델일이없음.

그래서 우리는 현업에서 사용하는 Command Control Design 패턴을 사용한 것임.

 

이것은 Servlet 을 절대 건들일 일이 없음. url 지정하고, 컨트롤에 기능 넣고, 핸들러맵핑에 등록해서 기능 추가

 

심지어 Spring FrameWork를 가져다 쓰면 거기에 HandlerMapping과 Controller 가 다 있음....

가져다 쓰면 됨

 

● JSON 형태로 데이터 보내기 (GSON 활용)


1) 데이터 하나를 JSON으로 보낼 때

Gson gson = new Gson();

String result = gson.toJson(vo);

request.setAttribute("result", vo);


2) 데이터 리스트를 JSON으로 보낼 떄

if( type.equals("0")) { // JSON 타입으로 반환

ProductListVO voResult = new ProductListVO();

voResult.setCount(list.size()); // 리스트 크기

voResult.setStatus("success"); // 성공여부

voResult.setList(list); // 리스트

Gson gson = new Gson();

String result = gson.toJson(voResult);

request.setAttribute("result", result);

} else { // XML 타입으로 반환

request.setAttribute("result", list);

}

}


* json형태 데이터는 항상 객체로 VO로 만들자


1) Client 요청 - > Control (Servlet) -> 2) javabeans 이용JavaBeans(Model) - 가공처리 <-> JSP(View ) -> 4) Client 응답

                                        ㄴ> 3) JSP(View) 결과화면으로 forwarding

 

● 한글이 께질 때

 

* GET 방식

String data = request.getParameter("data");
  if(request.getMethod().contentEquals("get")) {
   byte[] brr = data.getBytes("iso-8859-1");
   String newData = new String(brr, "utf-8");
  }

 

* POST 방식

request.setCharacterEncodig("utf-8")

 

 

포트는 : sever.xml

* 모바일

1) 네이티브

2) 웹앱 (구글 플레이에 올릴 수 있도록 안드로이드 컴포넌트 webView)

3) 하이브리드

 

 

//

 

● 웹앱(WebApp) 구현의 모든 것

 : 웹에서 만든 것이 스마트폰에서 구현이 되는것, 이러한 방식을 쓰는 이유는 스토어에 올리기 위해서이다.

   - 단순히 웹 사이트를 앱으로 옮긴 것 밖에 없다.

package com.example.tacademy.helloproject;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
WebView view;
WebSettings settings;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

view = (WebView) findViewById(R.id.webView);
view.loadUrl("http://192.168.201.121/board/login.jsp");
settings = view.getSettings();
settings.setJavaScriptEnabled(true);

// default는 인터넷에 있는것으로 되어 있어서 내것과 연결.
view.setWebViewClient(new MyWebViewClient());
}

// 스마트폰 내 인터넷 앱 따라가지 않게.
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// <a> 태그 누루면 다 여기로 들어 옴. 현재 뷰로 바꾸는 것 임.
view.loadUrl(url);
return true;
}
}
}

/* 이것이 웹 앱의 모든 것 */
/* 내가 만든 것이 아니라 웹이 다 만든 것임, 이렇게 하는 이유는 스토어에 올리기 위해서 */


728x90
반응형
Comments