Day 1
1.아파치
아파치 소프트웨어 재단의 오픈소스 프로젝트. 일명 웹서버로 불리며, 클라이언트 요청이 왔을때만 응답하는 정적 웹페이지에 사용
-
웹서버 = 80번 포트로 클라이언트 요청(POST,GET,DELETE)이 왔을때만 응답함.
-
정적인 데이터만 처리한다.(HTML,CSS,이미지 등)
2.톰캣
dynamic(동적)인 웹을 만들기 위한 웹 컨테이너, 서블릿 컨테이너라고 불리며, 웹서버에서 정적으로 처리해야할 데이터를 제외한 JSP, ASP, PHP 등은 웹 컨테이너(톰캣)에게 전달한다.
- WAS(Web Application Server)
- 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고 부름
- JSP,서블릿처리,HTTP요청 수신 및 응답
- 아파치만 쓰면 정적인 웹페이지만 처리하므로 처리속도가 매우 빠르고 안정적이다.
-톰캣 운영
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 *"); 찍힌다
-> 서블릭의 동작 흐름
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 |