HTML & CSS

HTML, Tomcat, JAVA의 시작 2020-05-25 : HttpServlet

리차드 2020. 5. 26. 11:56

HTML을 시작했다 (어제).

 

JSP와 Servlet은 컴포넌트, 톰캣은 컨테이너 라고 간단하게 개념정리를 하고 시작했다.

톰캣을 통해서 JSP와 Servlet을 처리하는 거다.

 

 

 


 

1. 톰캣 설치 및 환경변수 설정

Win+R -> sysdm.cpl ,3  -> 환경변수 진입

시스템변수에 이름 CATALINA_HOME 경로 톰캣 설치위치 (나는 C:\Tomcat) 

설정 완료 확인을 위해 cmd가 실행중이라면 재실행 후 set catalina_home 입력해서 경로가 나오는지 확인

 

 


 

2. html 작성 및 접속하기

자바에서 java -> package -> project 라면 톰캣에서 Context는 project의 느낌이다.

default Context가 webapps\ROOT\ 이다

톰캣 설치 경로 내 webapps\ROOT\ 안에 html파일을 저장하면

ip주소:8080/파일명.html 로 접속하여 해당 파일을 확인할 수 있다.

아래는 html 기본 문법을 연습한 예제이다

https://codepen.io/hj-rich/pen/BaoEoQx

 

 

 


3. 자바 파일 + 톰캣

Win+R -> sysdm.cpl ,3 -> 환경변수 내 시스템변수 새로만들기 -> 이름 classpath 경로 .;c:\Tomcat\lib\servlet-api.jar;

위 작업을 통해 자바 파일을 작성하고 컴파일할 때 servlet 관련 class를 활용할 수 있도록 설정해준다.

 

자바 파일을 통해 서버 역할을 하기 위해 저장하고 컴파일할 경로는 아래와 같다

C:\Tomcat\webapps\Root\web-inf\src\*.java
C:\Tomcat\webapps\Root\web-inf\class\
C:\Tomcat\webapps\Root\web-inf\lib\

 

자바 파일은 ROOT\web-inf\src\ 여기에 보관하고 컴파일 할 때

javac -d ..\class 파일명.java 로 해서 class 폴더 안에 컴파일 결과가 저장되도록 한다

추가할 jar파일은 web-inf 내의 lib 폴더에 두도록 한다

 

 

 


4. 서블릿의 생성, init(), doGet(), dePost(), destroy().

init()메소드는 콜백 메소드다. 호출시점은 서블릿이 생성되는 시점이다.

 

다음에서 '사과'를 검색했을 때 주소창에 있는 값

doGet()메소드는 검색했을 때 끝에 값이 보인다 지금은 끝에 사과가 보인다

doPost()는 보이지 않는다. 따라서 로그인과 같이 값을 숨겨야할 경우에 사용된다.

PreparedStatement에서 ?처리하는 게 생각난다.

doGet()메소드가 default이기 때문에 doPost()를 사용해야 하는 경우엔 지정을 해줘야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.hello;
 
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.PrintWriter;
 
public class HelloServlet extends HttpServlet {
    
    public void init() {
        System.out.println("init()...");
    }
 
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException{
        System.out.println("doGet()...");
 
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet Page</title>");
        out.println("<body>HelloServlet!!<br>안녕하세용용융용 앙냥냥 no Korean T.T</body>");
        out.println("</head>");
        out.println("</html>");
    }
 
    @Override
    public void destroy() {
        System.out.println("destroy()...");
    }
//이게 기본 라이프 사이클이다
//서블릿 생성되면 콜백 init() 호출. -> doPost() -> destroy()
}
 
cs

HttpServlet 클래스를 상속받아서 메소드들을 오버라이드 했다.

HttpServletResponse 객체 resp를 이용해서 한 줄 한 줄 html문을 전송해줘서 클라이언트가 그 결과를 보게 처리한다.

맨 위에 setContextType을 UTF-8로 지정해주지 않으면 한글은 깨지게 된다.

 

 

 

 


5. 톰캣 서버측 설정

톰캣 내 ROOT\Web-INF\web.xml 파일을 열어서

  <servlet>
   <servlet-name>hello</servlet-name>
   <servlet-class>com.hello.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
   <servlet-name>hello</servlet-name>
   <url-pattern>/hello</url-pattern>
  </servlet-mapping>

톰캣 내 conf 경로 내 context.xml 파일을 열어서

<Context reloadable="true" privileged="true">

reloadable = "true" 값을 주면 컴파일할 때마다 알아서 destory()후 재실행한다

privileged = "true" 값을 주면 권한을 부여한다.

 

 

 

숙제

https://codepen.io/hj-rich/pen/JjYVXzj