안드로이드와 JSP 간단한 통신하는 방법

프로그래밍|2013. 1. 28. 21:15
안드로이드와 JSP 간단한 통신하는 방법

안녕하세요 황금너구리입니다.^^ 안드로이드에 관련된 내용 오랜만에 포스팅을 하고 있습니다. 프로그래밍을 접하면서 안드로이드와 JSP간에 서로 서로 연락을 취할 수 없는 방법을 생각을 하다가 바로 서로 간의 통신을 하는 방법을 찾아보았습니다.

JSP를 Tomcat으로 개인의 PC에서 구동을 시키고 안드로이드를 통해 가상 에뮬레이터 상 통신을 간단하게 하는 방법을 알려드리겠습니다. 하이브리드 앱 아니면 웹앱을 제작을 하시는 분들께 도움이 되실 것 같은 내용입니다.


안드로이드와 JSP간에 통신을 하기 위해서는 JSP 소스를 먼저 작성을 하여야 됩니다. 소스를 작성을 하시고 저장을 하시고 톰켓으로 작동을 해보시길 바랍니다.

androidtest.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html;  charset="UTF-8">
<title>안드로이드와 JSP간 통신</title>
<script>
function setMessage(arg) {
    document.getElementById('textMessageFromApp').innerHTML = arg;
}
function sendMessage(msg){
    window.hybrid.setMessage(msg);
}
  </script>
</head>
<body>
<h1>여기는 JSP입니다.</h1>
<font size = "3">안드로이드와 JSP간의 통신</font>
<button type = "button" name = "exit" onclick = "javascript:sendMessage('exit');">종료하기</button>
</body>
</html>


위의 소스를 텍스트문서에 작성하시고 위의 파일명으로 저장을 하시길 바랍니다. 저장을 하실 때 인코딩을 UTF-8로 저장하시는거 잊지 마세요. Tomcat으로 구동을 한 결과는 아래와 같습니다.


위의 처럼 정말로 간단하게 소스를 작성을 하였습니다. 위의 처럼 버튼이 하나 있는데 지금은 저 버튼은 동작을 하지 않습니다. 하지만 안드로이드 가상 에뮬레이터에서는 동작을 합니다.
안드로이드 소스도 공개해드리겠습니다. 마찬가지 간단하게 구성되어 있습니다.

안드로이드 main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />
</LinearLayout>

안드로이드 java 소스

package kr.dpu.Androidtest;
import kr.dpu.Androidtest.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class AndroidtestActivity extends Activity {
 WebView wv;
 private final Handler handler = new Handler();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        loadWeb("http://192.168.11.2:8088/test/androidtest.jsp");
      } //본인의 PC아이피와 포트번호를 적으시고 jsp파일 적으시면 됩니다.
      
      
      public class AndroidHandler { 
          public void setMessage(final String argv) {
              handler.post(new Runnable() {
              public void run() {
                  String msg = argv;
                   if(argv.equals("exit")) {
                   Append();      
                  }
              }
          });
             
      }
  }
     
     
      public void Append() { 
       AlertDialog.Builder builder = new AlertDialog.Builder(this);     
    builder.setMessage("종료하시겠습니까?")     
    .setCancelable(false)     
    .setPositiveButton("종료", new DialogInterface.OnClickListener() {     
        public void onClick(DialogInterface dialog, int id) {     
           
               finish();
        }     
    })     
      
       
    .setNegativeButton("아니요", new DialogInterface.OnClickListener() {     
        public void onClick(DialogInterface dialog, int id) {     
             
                dialog.cancel();     
        }     
    })     
    .show();     
      }
      public void onConfigurationChanged(Configuration newConfig) {
       super.onConfigurationChanged(newConfig);
       
       if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
       {}
        if (newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO)
        {}
      }

      private void loadWeb(String url) {
       final Context myApp = this;
       wv = (WebView)findViewById(R.id.webview);
       wv.clearCache(true);
       wv.getSettings().setJavaScriptEnabled(true);
          wv.addJavascriptInterface(new AndroidHandler(), "hybrid");
          wv.getSettings().setDomStorageEnabled(true);
       wv.setWebChromeClient(new WebChromeClient() {
        public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result)
        {
         new AlertDialog.Builder(myApp)
         .setIcon(R.drawable.ic_launcher)
         .setTitle("확인!")
         .setMessage(message)
         .setPositiveButton(android.R.string.ok,
           new AlertDialog.OnClickListener()
         {
          public void onClick(DialogInterface dialog, int which)
          {
           result.confirm();
          }
         })
         .setCancelable(false)
         .create()
         .show();
         
         return true;
        };
        
       });
       
       wv.loadUrl(url);
       wv.setWebViewClient(new HelloWebViewClient());
       wv.setHorizontalScrollBarEnabled(false);
       wv.setVerticalScrollBarEnabled(false);
      }
     

     
      @Override
      public boolean onKeyDown(int keyCode, KeyEvent event) {
       if((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {
        wv.goBack();
     
        return true;
        
       }
       return super.onKeyDown(keyCode, event);
       
       
      }
     
      public class HelloWebViewClient extends WebViewClient {
       public boolean shouldOverrideUrlLoding(WebView view, String url) {
        view.loadUrl(url);
        return true;
       }
      }
  }

안드로이드 androidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kr.dpu.Androidtest"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".AndroidtestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

총 3가지의 소스로 구성이 되어 있습니다. 약간은 복잡하지만 한번 작성하여 보시길 바랍니다. 안드로이드와 직접적으로 통신을 간단하게 하는 방법은 저도 처음 시도를 해봅니다.



위에는 안드로이드 에뮬레이터로 돌린 것입니다. JSP에서 작성한 내용이 안드로이드 에뮬레이터에 나와있습니다. 정말 간단하게 구성되어 있습니다. 여기에서 종료하기 버튼을 누르게 되면 메세지 창이 나옵니다.




메세지 창에서 만약에 종료를 누르면 앱이 종료가 되고, 아니요를 누르게 된다면 종료가 되지 않습니다. 간단하게 안드로이드와 JSP간 통신을 하는 방법입니다.

약간만 방법만 달리 하셔도 좋은 프로그래밍을 하실 수 있습니다. 초보자분들이 참조하시기에 좋은 내용입니다. 여러 자료들을 찾으면서 제일 알려드리기 쉬운 간단한 방법인거 같아요.ㅎ 한번 작성을 해보실 분은 작성을 하셔서 동작을 시켜보시길 바래요. JSP파일을 웹서버에 올리시고 안드로이드도 가상에뮬레이터 상이 아닌 스마트폰에 넣어서 실행시켜보시길 바랍니다.ㅎ 뭔가 색다르실 거에요.^^!! 언제 파싱을 하는 방법도 알아보고 싶네요.
파싱하는 방법을 알게 되면 그 때 포스팅을 하겠습니다.

프로그래밍을 하시는 분들 고생이 많으시겠어요..ㅎ 힘내시길 바래요^^! 파이팅!

댓글()