반응형

Day 1

 

1.아파치

아파치 소프트웨어 재단의 오픈소스 프로젝트. 일명 웹서버로 불리며, 클라이언트 요청이 왔을때만 응답하는 정적 웹페이지에 사용
  • 웹서버 = 80번 포트로 클라이언트 요청(POST,GET,DELETE)이 왔을때만 응답함.

  • 정적인 데이터만 처리한다.(HTML,CSS,이미지 등)

2.톰캣

dynamic(동적)인 웹을 만들기 위한 웹 컨테이너, 서블릿 컨테이너라고 불리며, 웹서버에서 정적으로 처리해야할 데이터를 제외한 JSP, ASP, PHP 등은 웹 컨테이너(톰캣)에게 전달한다.
  • WAS(Web Application Server)
  1. 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고 부름
  2. JSP,서블릿처리,HTTP요청 수신 및 응답
  3. 아파치만 쓰면 정적인 웹페이지만 처리하므로 처리속도가 매우 빠르고 안정적이다.

<전반적인 서버 운영>

-톰캣 운영

C:\Users\USER>cd \

C:\>cd apa*

C:\apache-tomcat-8.0.45>cd bin

 

C:\apache-tomcat-8.0.45\conf\server.xml -> 8080 포트 => 8081 로 변경

 

C:\apache-tomcat-8.0.45\bin>startup.bat

 

-> ipconfig 후 ipv4 주소 + 8081  => http://192.168.2.95:8081/

 

  • web은 실제로 파일 다운로드 소켓 프로그램 기본과 같다
    • Client :  웹 브라우저
    • Server : 톰캣(Web Application Server : WAS) 

 

  • 브라우저 => 톰캣 접속 => 서버의 파일 다운받아 보여줌

 

  • 톰캣 서버 하나에는 여러개의 Web Application 이 설치 가능=> context
    • Context가 가져야 하는 것 : 홈 디렉터리, 접근 경로

   C:\StudyHome\ 생성 
   C:\StudyHome\WEB-INF\
   C:\StudyHome\WEB-INF\classes
   C:\StudyHome\WEB-INF\lib

 

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

단, WEB-INF는 접근이 불가능하다(내부 설정파일 등을 놓는다)

 

classes : java class 파일을 놓는 곳

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

 

C:\StudyHome\WEB-INF>copy C:\apache-tomcat-8.0.45\webapps\ROOT\WEB-INF\web.xml
        1개 파일이 복사되었습니다.

-> WEB-INF 폴더에 web.xml 파일을 복사해 넣는다.

 

web.xml 이렇게 변경
http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1"
  metadata-complete="true">

= >기본적인 Context 설정은 되어있다 

=> 이것을 톰캣에 등록해야한다.

 

다시

->C:\apache-tomcat-8.0.45\conf / server.xml에서 변경

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context docBase="C:\StudyHome" path="/study" reloadable="true"></Context>

-> 다시 C:\apache-tomcat-8.0.45\bin>startup.bat

 

->StudyHome/test.html 생성

<html>
    <body> HelloWorld : ^^*</body>
</html>

http://192.168.2.95:8081/study/test.html로 연결

 

흐름도

C:\StudyHome\apple\test.html로 복사

http://192.168.2.95:8081/study/apple/test.html

 

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

 

C:\StudyHome\WEB-INF\test.html로 복사

http://192.168.2.95:8081/WEB-INF/test.html

오류 !

-WEB-INF 는 특수한 의미를 갖는다
-> 브라우저에 공개치 않는다 

 

-javaWork 에 클래스를 만들어보자

C:\StudyHome>cd C:\JavaWork

 

HelloWorld2.java를 만들자

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


public class HelloWorld2 extends HttpServlet{
public void service() throws IOException, ServletException{
}

}

C:\JavaWork>javac -d C:\StudyHome\WEB-INF\classes -classpath servlet-api.jar HelloWorld2.java

 

-HelloWorld2.java를 변경하자 -> 꼭 compile 하기!

-web.xml변경하자

<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true"> <servlet> <servlet-name>abcd</servlet-name> <servlet-class>apple.HelloWorld2</servlet-class> </servlet> <servlet-mapping> <servlet-name>abcd</servlet-name> <url-pattern>/study01</url-pattern> </servlet-mapping> </web-app>

-다시 서버 돌려보자

http://192.168.2.95:8081/study/study01

 

<tomcat>

29-Jul-2019 12:19:34.131 정보 [main] org.apache.catalina.startup.Catalina.start Server startup in 2683 ms
HelloWorld2 

 

-HelloWorld2 다시 수정

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 IOException, ServletException 
      {
         System.out.println("HelloWorld2");
PrintWriter out = response.getWriter();
out.println(""); out.println("    ");
out.println("HelloWorld 2: T 0 T *");
out.println("    "); out.println("");


out.close();
      }
   }
   

-> 이러고 서버 닫았다가 다시 키면 홈페이지에 out.println("HelloWorld 2: T 0 T *");  찍힌다

 

WEB-INF 사용 연결 방식

-> 서블릭의 동작 흐름

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

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

2. /study 로 경로를 설정한 Context 있나?

3. 2.에서 찾은 contetxt 의 docBase 폴더 (C:\StudyHome) 아래의 /WEB-INF/web.xml찾음

4. url-pattern 중 / study01에 해당하는 설정 -> servlet-mapping 아래에 -> 서블릿 abcd라는 것을 지명하고 있음
    -서블릿은 서버쪽에서 동작하는 것

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

6. apple.HelloWorld2 을 찾아 -> 인스턴스 생성 -> 오버라이딩 하는 service 함수호출한다

7. System.out.println ("HelloWorld2"); 은 서버쪽에서 찍힌다.

8. PrintWriter out = response.getWriter(); 를 이용하여 내보내는 것은 요청으로 들어온 브라우저 쪽으로 내보내진다

9. 요청했던 브라우저는 응답으로 전달된 내용을 받아 화면에 출력한다

 

<HelloWorld2.java> 변경한다
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 IOException, ServletException 
      {
         System.out.println("HelloWorld2");
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(Exception e){
//에러가 난 정보를 역추적해서 출력해준다
e.printStackTrace();
}


PrintWriter out = response.getWriter();
out.println(""); out.println("    ");
out.println("HelloWorld 2: T 0 T *");
out.println("    "); out.println("");


out.close();
      }
   }
   

-ojdbc.jar => 현재 컴파일 하고 있는 StudyHome > WEB-INF > lib 폴더 안에 복사 붙여넣기 

   -> oracle db와 톰캣을 함께 사용할 수 있게 된다.

 

<HelloWorld2.java> 또 바꿔..

 

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.Connection;
import java.sql.DriverManager;


public class HelloWorld2 extends HttpServlet {
@Override
   public void service( HttpServletRequest request, 
      HttpServletResponse response)
      throws IOException, ServletException 
      {
         System.out.println("HelloWorld2");
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);
conn.close();
}
catch(Exception e){
e.printStackTrace();
}


PrintWriter out = response.getWriter();
out.println(""); out.println("    ");
out.println("HelloWorld 2: T 0 T *");
out.println("    "); out.println("");


out.close();
      }
   }
   

-> 컴파일 하고 서버 돌리면 톰캣에 요렇게 찍힘

Context.reload Reloading Context with name [/study] is completed
HelloWorld2
oracle.jdbc.driver.T4CConnection@6b77a082
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.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.*;

public class HelloWorld2 extends HttpServlet {
@Override
   public void service( HttpServletRequest request, 
      HttpServletResponse response)
      throws IOException, ServletException 
      {
         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");

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(""); out.println("    ");
out.println("HelloWorld 2: T 0 T *" + theTime);
out.println("    "); out.println("");


out.close();
      }
   }
   

-> 이렇게하고 서버 실행하면 

HelloWorld 2: T 0 T *2019-07-29 14:28:26.0

<이클립스 다이나믹 프로젝트>

-프로젝트 -> context로 인식 -> src를 서버와 연결(add and remove) -> xml 변경 후


<?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"> <servlet> <servlet-name>abcd</servlet-name> <servlet-class>study2.HelloWorld3</servlet-class> </servlet> <servlet-mapping> <servlet-name>abcd</servlet-name> <url-pattern>/study2</url-pattern> </servlet-mapping> </web-app>

-> .java에서 Run as tomcat 서버로 돌리면 완성

 

<HelloWorld3.java>

 

package study2;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld3 extends HttpServlet {

   @Override
   public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub

      List ls = new ArrayList();
      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_THIME FROM bangmyung_t";
         ResultSet rs = stmt.executeQuery(sql);

         while (rs.next()) {
            BangMyungVO vo = new BangMyungVO();
            vo.setNo(rs.getInt(1));
            vo.setGul(rs.getString(2));
            vo.setTheTime(rs.getString(3));
            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("");       out.println("   ");
      for (BangMyungVO vo : ls) {
         out.println(vo.getNo() + "\t" + vo.getGul() + "\t" + vo.getTheTime());
      }
      out.println("   ");       out.println("");
      out.close();
   }

}
<BangMyungVO.java>

package study2;

public class BangMyungVO {
public Integer getNo() {
return no;
}
public void setNo(Integer no) {
this.no = no;
}
public String getGul() {
return gul;
}
public void setGul(String gul) {
this.gul = gul;
}
public String getTheTime() {
return theTime;
}
public void setTheTime(String theTime) {
this.theTime = theTime;
}
private Integer no = null;
private String gul = null;
private String theTime = null;
}

<test_01.html>


<!DOCTYPE html> <head> <body> test_01.html <!-- cellspacing="0" : 셀 간 간격 cellpadding="12" : 셀의 벽과 내용과의 간격 border="1" : 경계줄의 굵기 bgcolor="#ccddee" 배경색, 각각 16진수이고 앞 두자리 : red, 다음 두자리 : green, 마지막 두자리 : blue => RGB 값을 섞은 값 rowspan="3", colspan="2" : 엑셀에서의 셀 병합과 같은 개념 rowspan은 상하, colspan은 좌우 셀과 병합한다. <font size = "20px" face = "Impact">apple</font> : 브라우저에 깔린 글꼴만 가능 align ="left| center | right" : 내용물의 좌우 정렬 속성을 정한다 width : 셀의 폭을 결정함 같은 오와 열에 있는 것들은 자동으로 지정된 크기에 맞춰진다(일일이 모든 칸에 크기를 줄 필요가 없다) --> <table border="0" cellspacing="2" cellpadding="12"> <tr bgcolor="#aabbcc"> <td width = "400px" rowspan="2"><font size = "20px" face = "Impact">apple</font></td> <td width = "250px">banana</td> </tr> <tr> <td bgcolor="#ccddee">kiwi</td> </tr> <tr> <td colspan="2" bgcolor="#ccddee" align="center">kiwi</td> </tr> </table> </body> </html>



apple banana
kiwi
kiwi



 

반응형

'Language Study > Java' 카테고리의 다른 글

제주에서 자바_Week3_3  (0) 2019.07.31
제주에서 자바_Week3_2  (0) 2019.07.30
제주에서 자바_Week2_3  (0) 2019.07.25
제주에서 자바_Week2_2  (0) 2019.07.24
제주에서 자바_Week2_1  (0) 2019.07.22

+ Recent posts