반응형

 정말 우라지게도 시도를 하다가 학교 서버는 외부접근이 불가능하다는

걸 방정맞게 알게 된 이후로 그 허무감과 드디어 해결했다는 통쾌함이

짜릿했다. 


 나처럼 고생하는 사람이 없길 바라며 정리를 좀 해본다.



 우선 통신하려면 당연히 안드로이드 매니페스트에는 인터넷 사용요구를

정의해야 한다. 좀 더 외국스럽게 말하자면 시스템에 퍼미션을 요청해야한다는 뜻


 <uses-permission android:name="android.permission.INTERNET />


 이라고 <application>태그 위에 두면, 시스템에서 아, 이녀석이 인터넷을

사용하려는구나 알았어 허가해 줄게 하면서 인터넷을 쓰게 해준다.


 그 다음으론 이제 실제로 인터넷 주소를 불러오는 일이 필요하다.

 사용하는 방법은 URL을 이용하던 http를 이용하던 무관하지만, 좀 더 있어보이게

HttpPost를 이용하려 한다.


// 이 친구는 인터넷 주소를 알아와서 post방식으로 값을 보낸다는 뜻이다. 

HttpPost post = new HttpPost("http://175.210.155.212:8080/diary_server/hello.jsp");


// 이건 내가 클라이언트고, 그 클라이언트에서 행할 일을 선언할 때 쓰는데 사실 execute가 가장 중요하다.

DefaultHttpClient client = new DefaultHttpClient();


// 자. 우리가 우리는 post의 값을 수행하면서 바로 값을 가져오길 대기한다.

HttpResponse response = client.execute(post);

// 사실 값을 보내기만 할 것이라면 

client.execute(post); // 라고만 써도 된다.



 

 그럼 값을 받을 땐 어떻게 해야할까?

 그 땐 버퍼클래스를 이용하게 된다.

 BufferedReader bufreader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8"));

 // 소스를 잘 보면 reponse 인스턴스를 이용해서 getEntity()와 getContent()를 가져오는데, 이 동작이 바로 값을 가져오는

 // 행위이다. 이렇게만 해주면 값을 알아서 받아온다. 옆에 소심하게 "utf-8"이라고 정의된 친구는 

 // 이 값을 어떤 인코딩 방식으로 받아올 것인지를 의미한다. JSP가 utf-8 으로 값을 보내면 거기에 맞게, euc-kr로 보내면

 // 또 거기에 맞게 설정해주면 된다.


 


 이제 톰캣은 어떻게 정의되야 하는지 알아보자.


 톰캣은 당연히 유동아이피가 아니여야하고, 외부접근이 허용된 곳이어야한다. 고로, 집에서

직접 선 꼽고 사용할 수 있는 환경이 최고다. 나 처럼 학교에서 해보려다 3일을 버리지 말고

전기세 나가도 꼭 집에서 하길...

외부 접근 허용 설정 방법


 어쨌든 톰캣을 켜두고, 로컬 폴더에 JSP 파일을 넣어주면 되는데, JSP파일은

HTML 설정은 일체 하지말고 단순히 <% %>를 이용해서 정의해주고 보낼 부분은 out.println이나

<%= %>를 이용하면 된다.


 이것 처럼

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="EUC-KR" 
    import="java.sql.*" 
    import = "java.util.*"%>

<%
	request.setCharacterEncoding("utf-8");
	
	// 데이터베이스 드라이버와 연결
	Class.forName("com.mysql.jdbc.Driver");
	
	// 데이터베이스와 연결 - 로컬호스트:포트번호/테이블명
	String url="jdbc:mysql://localhost:3306/Diary";
	Connection connection = DriverManager.getConnection(url,"root","1234");
	
	// 쿼리를 실행하기 위한 선언
	Statement stmt = connection.createStatement();
	
	// 호출되면서 넘어온 값 받기
	String bookName = request.getParameter("book_name");
	String bookGenre = request.getParameter("book_genre");
	String bookWriter = request.getParameter("book_writer");
	String bookPublisher = request.getParameter("book_publisher");
	
	// 쿼리 실행
	String query =  
		"insert into diarydb.books"  // bookstable 이란 테이블에
		+ " (book_name, book_writer, book_genre, book_publisher)" // 이 속성의 값들을
		+ " values ('"+bookName+"', '"+bookWriter+"', '"+bookGenre+"', '"+bookPublisher+"') ";
	
	stmt.executeUpdate(query);
	
	stmt.close();
	connection.close();
%>


DB 연결 부분은 필요한 사람은 보면 되겠고, 중요한건 단순히 스트릿트와 디스트립트로 이루어진다는 것이다.

이 것만 말면 충분히 잘 연결할 수 있으리라.

반응형

WRITTEN BY
데르벨준

,