개발자의 오르막

SW 심화교육 15일차 본문

교육과정 ( SW 개발자 심화과정 )/Java

SW 심화교육 15일차

계단 2019. 7. 29. 11:01

# Apach-Tomcat 사용

- 압축 풀기

- CMD 창에서 Tomcat\bin 으로 들어가서 startup.bat or shutdown.bat 실행

- JRE_HOME 환경 연결 X라는 메시지 뜸

  → 환경변수, 시스템 변수에서 새로 만듬

  → JAVA_HOME 으로 변수를 새로 생성

  → JDK 폴더로 경로 잡아준 후 확인

- cmd 창에서 Tomcat\bin 으로 들어가서 startup.bat 실행

 

# 포트번호 바꾸기

- Tomcat\conf\server.xml 들어가기

- 포트번호 8080을 8081로 변경

 

# 톰캣 실행

- apach\bin 폴더 경로에서 startup.bat 을 실행시킴

- cmd 창에서 ipconfig로 ip 주소확인,

- 인터넷 주소창에 ipaddress:포트번호 입력

 

* Web은 실제로 파일 다운로드 소켓 프로그램과 기본은 같다.

- 클라이언트 : 웹 브라우저

- 서버 : 톰캣 ( Web Application Server : WAS )

- 브라우저가 톰캣에 접속해서 서버의 파일을 다운로드 받아 보여준다.

 

# Context

- 톰캣 서버 하나에는 여러개의 Web Application 이 설치 가능하다.

  이것은 Context 라고 한다.

- Context 가 가져야 하는 것 : 홈 디렉토리, 접근 경로

- C:\StudyHome\ 폴더 생성  ( mkdir c:\StudyHome\

C:\StudyHome\WEB-INF 폴더 생성

C:\StudyHome\WEB-INF\classes 폴더 생성

C:\StudyHome\WEB-INF\lib 폴더 생성

 

* 클라이언트는 홈 디렉토리 아래의 모든 파일을 다운 가능하다.

* 단 WEB-INF 는 접근이 불가능하다.

  (WEB-INF 는 브라우저가 접근해서는 안되는 내부 설정 파일 등을 놓는다.)

* classes : java class 파일을 놓는 곳

* lib : 동작에 필요한 jar 파일을 놓는 곳

 

- copy C:\apache-tomcat-8.0.45-windows-x64\apache-tomcat-8.0.45

  \webapps\ROOT\WEB-INF\web.xml    / 파일 복사

- <!-- --> : xml 주석

 

# Context를 Tomcat에 등록

- Tomcat\conf\server.xml의 파일을 편집

- <Host name >.. 밑에 <Context> 태그 생성

- <Context docBase="C:\StudyHome" path="/study" reloadable="true"></Context>

- 톰캣 서버 실행 후 정상적 작동여부 확인

- 경로하고, docbase로 이루어짐

 

- HTML 문서 작성

  C:\StudyHome\test.html

 

- StudyHome\ 에 apple 폴더 생성 및 test.html 파일 복사

- 경로 설정 후 실행 확인 /   study/apple/test.html

 

* docBase 디렉토리 하위폴더의 파일은 폴더명을 경로명으로 바꾸어 접속할 수 있다.

* c:\StudyHome\WEB-INF\test.html  은 접속 안됨. (클라이언트에서 접근 불가)

 


# JAVA 프로그래밍과 연동

- /javawork  디렉토리에 tomcat\lib\servlet-api.jar 파일을 복사

package apple;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

public class HelloWorld2 extends HttpServlet {

	@Override
	public void service(HttpServletRequest request, HttpServletResponse response ) 
	throws ServletException, IOException{
		System.out.println("Helloworld2");
		
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("HelloWorld 2 : ^^*");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}
/*
- javac -d C:\StudyHome\WEB-INF\classes -classpath servlet-api.jar Helloworld2.java
- @Override 어노테이션은 해당 메소드 이름이 상속된 클래스에 존재하는지 검사함.
*/

이후 web.xml 파일에 밑의 태그 추가

<servlet>

    <servlet-name>abcd</servlet-name>

    <servlet-class>apple.HelloWorld2</servlet-class>

</servlet>

    <servlet-name>abcd</servlet-name>

    <url-pattern>/study01</url-pattern>

    </servlet-mapping>

 

</web-app>

 

- /study01 패턴은 abcd라는 서블릿을 찾게 됨.

- abcd 서블릿은 apple.HelloWorld2 경로의 클래스파일을 찾게 됨.

 

 

- 서블릿의 동작 흐름

0. WAS 쪽에 적절히 설정이 되어 있다고 가정한다.

1. 브라우저에서 /study/study01 으로 요청이 들어온다.

2. /study 로 경로를 설정한 Context를 찾는다. - 있음

3. 2 에서 찾은 Context 의 docBase 폴더 아래의 /WEB-INF/web.xml 찾음

4. 거기의 url-pattern 중 /study01 에 해당하는 설정

   이것은 어떤 서블릿 이름을 지명하나?  abcd

5. abcd 로 이름 붙여진 서블릿 클래스가 있나? 있음

   apple.HelloWorld2

6. apple.HandWorld2 를 찾아 인스턴스 생성, 오발이딩하는 service 함수 호출

7. System.out.println("HelloWorld 2")는 서버 쪽에 찍히는 것

8. PrintWriter out = response.getWriter() 는 이것을 요청했던 브라우저

   쪽으로 값을 내보내줌

9. 요청했던 브라우저는 응답으로 화면에 내보내줌

package apple;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.sql.*;

public class HelloWorld2 extends HttpServlet {

	@Override
	public void service(HttpServletRequest request, HttpServletResponse response ) 
	throws ServletException, IOException{
		System.out.println("Helloworld2 바껴라");
		String theTime = null;
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521/XE","HR","HR");
			System.out.println(conn);
			
			Statement stmt = conn.createStatement();
			
			String sql = "SELECT SYSDATE FROM DUAL";
			ResultSet rs = stmt.executeQuery(sql);
			if(rs.next()){
				theTime = rs.getString(1);
			}
			rs.close();
			stmt.close();
			conn.close();
		} catch (Exception e){
			e.printStackTrace();
		}
		
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("HelloWorld 2 : ^^*" + theTime);
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}

 


# eclipse

- switch workspace 를 선택해서, 기존에 사용하던 워크스페이스를 변경한다.

- 클래스파일을 생성한 후 HttpServlet 을 상속받게 하여, import 를 해준다.

- souce 메뉴에서 오버라이드를 통해 service()를 호출한다.

- try/catch 문 안에 jdbc, oracle과 연결하여 표를 산출한다.

package study2;

public class HelloWorld3 extends HttpServlet{

	@Override
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String theTime = null;
		List<BangMungVO> ls = new ArrayList<BangMungVO>();
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521/XE","HR","HR");
			Statement stmt = conn.createStatement();
			
			String sql = "SELECT no, gul, the_time from bangmyung_t";
			ResultSet rs = stmt.executeQuery(sql);
			while(rs.next()) {
				BangMungVO vo = new BangMungVO();
				vo.setNo(rs.getInt("NO"));
				vo.setGul(rs.getString("GUL"));
				vo.setTheTime(rs.getString("The_Time"));
				ls.add(vo);
			}
			rs.close();
			stmt.close();
			conn.close();
		} catch(Exception e) {
			e.printStackTrace();
		}
		
		response.setContentType("text/html;charset=euc-kr");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("<table border='1' cellspacing='2' cellpadding='12'>");
		for(BangMungVO vo : ls) {
			out.println("<tr>");
			out.println("<td>");
			out.println(vo.getNo());
			out.println("</td>");
			out.println("<td>");
			out.println(vo.getGul());
			out.println("</td>");
			out.println("<td>");
			out.println(vo.getTheTime());
			out.println("</td>");
			out.println("</tr>");
		}
		out.println("</table>");
		out.println("</body>");
		out.println("</html>");
		out.close();
		
	}
	
}

 

# servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>study2</display-name>
  <servlet>
  <servlet-name>abcd</servlet-name>
  <servlet-class>study2.HelloWorld3</servlet-class>
  </servlet>
  
  <servlet>
  <servlet-name>defg</servlet-name>
  <servlet-class>study2.HelloWorld4</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>abcd</servlet-name>
  <url-pattern>/study2</url-pattern>
  </servlet-mapping>
  
  <servlet-mapping>
  <servlet-name>defg</servlet-name>
  <url-pattern>/study3</url-pattern>
  </servlet-mapping>
  
</web-app>

- 하나의 화면 당 서블릿 코드가 들어간다.

 

 

# html

- cellspacing = "0" : 셀 간으 ㅣ간격
- cellpadding="2" : 셀의 벽과 내용과의 간격
- border="1" : 경계줄의 굵기
- bgColor="#aabbcc" 배경색깔, 각각 16진수 숫자
- 앞의 두자리는 red, 그 다음 두자리는 green, 그 다음 두자리는 blue
- rowspan="3" : 엑셀에서의 셀 병합과 같은 개념, 위 아래로 트는 것
- colspan="2" : 셀병합과 같은 개념, 가로로 트는 것
- align : left, right, center 로 정렬이 가능하다.
- font size, face="impact" : 브루아주어ㅔ 깔린 글꼴만 가능
- width : cell의 가로 넓이, height : cell의 높이
- 같은 오와 열에 있는 것들은 자동으로 지정된 크기에 맞춰진다.
- (일일이 몯느 칸에 크기를 줄 필요는 없다.)

for (int j = 1; j < 10; j++) {
	String rgb = String.format("#%02x%02x%02x", (int) (Math.random() * 256), 
    				(int) (Math.random() * 256), (int) (Math.random() * 256));
	out.println("<td bgColor='" + rgb + "'>");
	out.println(i + " * " + j + " = " + i * j);
	out.println("</td>");
}

숫자형식을 String 폼으로 맞춰줄 수 있다.

'교육과정 ( SW 개발자 심화과정 ) > Java' 카테고리의 다른 글

SW 심화과정 17일차  (0) 2019.07.31
SW 심화과정 16일차  (0) 2019.07.30
SW 심화교육 12일차  (0) 2019.07.26
SW 심화교육 11일차  (0) 2019.07.25
SW 심화과정 D-9  (0) 2019.07.24
Comments