안녕세계
[T아카데미] 모바일 서버 프로그래밍 기본 - 5일차 본문
[T아카데미] 모바일 서버 프로그래밍 기본 - 5일차
Junhong Kim 2016. 7. 1. 17:30● 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;
}
}
}
/* 이것이 웹 앱의 모든 것 */
/* 내가 만든 것이 아니라 웹이 다 만든 것임, 이렇게 하는 이유는 스토어에 올리기 위해서 */
'My Trace > T아카데미' 카테고리의 다른 글
[T아카데미] 모바일 서버 프로그래밍 기본 - 4일차 (0) | 2016.06.30 |
---|---|
[T아카데미] 모바일 서버 프로그래밍 기본 - 3일차 (0) | 2016.06.29 |
[T아카데미] 모바일 서버 프로그래밍 기본 - 2일차 (0) | 2016.06.28 |
[T아카데미] 모바일 서버 프로그래밍 기본 - 1일차 (0) | 2016.06.27 |
[T아카데미] 모바일 서버 프로그래밍 기본 과정 합격! (0) | 2016.06.26 |