beomboo

[JSP] GET방식으로 서버DB에 데이터 저장하기 본문

기타

[JSP] GET방식으로 서버DB에 데이터 저장하기

dev_beom_12 2019. 6. 24. 13:26
반응형

설명에 앞서 아래와 같이 제 개발환경을 알려드리겠습니다.

 

  • 서버
    Cafe24 Tomcat JSP광호스팅 비즈니스 
  • 데이터 베이스
    MySQL 5.5.x UTF-8
  • 데이터 베이스 프로그램
    HeidiSQL 10.2.0.5599
  • JSP 작성툴
    Eclipse Remote system
  • 송·수신 클라이언트
    Android Studio로 디버깅한 앱 또는 릴리즈앱 

저는 주로 클라이언트에서 GET 방식으로 서버내의 jsp에 파라미터를 보내 원하는 데이터를 

가져오는 형식을 주로 사용합니다.

1. GET방식

  • URL에 변수(데이터)를 포함시켜 요청
  • 보안에 취약

2. 구현

저는 어플리케이션에서 서버 데이터베이스에 접근해서 데이터를 조회/추가/수정/삭제 할때에 사용하고 있으며

아래와 같이 AsyncTask 방식을 이용해 jsp에 파라미터를 전달합니다.
AsyncTask에 대한 설명은 아래 하이퍼링크를 통해 학습해주시면 될 것 같습니다.

https://itmining.tistory.com/7

 

[안드로이드] AsyncTask란? (개념 및 사용법)

이 글은 PC 버전 TISTORY에 최적화 되어있습니다. 서론 안드로이드에서 UI를 조작할 수 있는 방법에 대해서 두 가지를 배웠습니다. Handler와 Looper 사용하기 runOnUiThread( ) 사용하기 두 가지 사용법을 자세히..

itmining.tistory.com

- Android Studio 

  class test extends AsyncTask<String, String, String> {
        StringBuffer sBuffer = new StringBuffer();
        String xml = null;
        String val1, val2;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @SuppressWarnings("deprecation")
        protected String doInBackground(String... args) {
            try {
                String urlAddr = "https://www.test.kr/test.jsp?param1=" + val1 + "&param2=" + val2;
                URL url = new URL(urlAddr);
                HttpURLConnection conn = (HttpURLConnection) url
                        .openConnection();
                if (conn != null) {
                    conn.setConnectTimeout(20000);
                    conn.setUseCaches(false);
                    if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                        // 서버에서 읽어오기 위한 스트림 객체
                        InputStreamReader isr = new InputStreamReader(
                                conn.getInputStream());
                        // 줄단위로 읽어오기 위해 BufferReader로 감싼다.
                        BufferedReader br = new BufferedReader(isr);
                        // 반복문 돌면서읽어오기
                        while (true) {
                            String line = br.readLine();
                            if (line == null) {
                                break;
                            }
                            sBuffer.append(line);
                        }
                        br.close();
                        conn.disconnect();
                    }
                }
                xml = sBuffer.toString(); // 결과값 변수에 담기
            } catch (Exception e) {
                // TODO: handle exception
            }
            return null;
        }

        protected void onPostExecute(String file_url) {

        }
    }

'https://www.test.kr/test.jsp?param1=[변수1]&param2=[변수2]'

 

위와 같은 형태로 Android Studio 에서는  HttpURLConnection을 이용해서 전달을 하면됩니다.

 

여기서 test.jsp에 대해 param1 과 param2 라는 파라미터명은 jsp에서도 동일해야합니다.

예를들어 Intent를 통해 PutExtra 할경우 ("파라미터명",변수) 형태와 비슷하게 이해하시면 됩니다.

 

- JSP 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>


<%
	Class.forName("com.mysql.jdbc.Driver"); 
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/데이터베이스명", "데이터베이스 아이디" , "데이터베이스 패스워드"); 
	
	ResultSet rs = null;
    PreparedStatement stmt = null;
    boolean flagStatus = false;
    
	String param1 = request.getParameter("param1");
	String param2 = request.getParameter("param2");	
	
	application.log("S_NUM: "+S_NUM+" LAST_DATE: "+LAST_DATE);
	
    try{	  
 	   String sql = "SELECT * FROM 테이블명  WHERE A ="+ param1 + " AND B="+ param2;
 	   
	   stmt = conn.prepareStatement(sql);
	   rs = stmt.executeQuery();
		if(rs.next()){
			out.println("TRUE");	   		
		}else{
			out.println("FALSE");
		}
    }catch(SQLException sqlex){
    	application.log("sqlex="+sqlex.getMessage());		
	}catch(Exception ex){
		application.log("ex="+ex.getMessage());		
	}finally{
		if(rs!=null)
			try{rs.close();}
		catch(SQLException ex){}
		if(stmt!=null)
			try{stmt.close();}
		catch(SQLException ex){}
		if(conn!=null)
			try{conn.close();}
		catch(Exception ex){}
		
	}

%>


(1) JSP 에서는 우선 SQL.Connection 을 통해 localhost 또는 외부 데이터 베이스에 대한 연동을 해주셔야 합니다.

번거로우실지 모르겠지만 Android에서 외부 데이터베이스로 바로 연동하는건 안된다고 하기에

서버를 걸쳐서 주고 받는방식(PHP,JSP,HTML)을 이용해야합니다. 

 

(2) 쿼리 실행을 위해 Statement, ResultSet을 import한 후 쿼리를 돌려주시면 됩니다.

rs = stmt.executeQuery();
		if(rs.next()){
			out.println("TRUE");	   		
		}else{
			out.println("FALSE");
		}

(3) 로그출력

jsp에서 application.log(); 를 통해 catalina log를 txt형태로 확인 가능합니다.

 

위 소스코드는 SQL 쿼리 문자열안에 있는 쿼리에 대하여 실행결과가 존재할경우 HTML에 "TRUE" 라는 문자열을

뿌려주도록 간단하게 구현을 해보았습니다. 

Android Studio 소스코드 중 아래 메서드에서 xml을 출력할 경우 "TRUE"라는 값을 확인 가능합니다.

 protected void onPostExecute(String file_url) {}

 

 

감사합니다. 

 

 

반응형

'기타' 카테고리의 다른 글

중소기업전세대출 연장심사  (0) 2022.10.13
[JAVA&JSP] 현재 시간 출력하기  (0) 2019.06.25
[JSP] JDBC 프로그래밍 파악하기  (0) 2019.06.25