JAVA 웹개발 과정 국비 52일차 정리
52일차
※ 배우는 과정이므로 정확하지 않을 수 있습니다.
잘못된 점은 알려주시면 수정하도록 하겠습니다!
1. Dynamic Web Project
1) Tomcat 설치하기
- 네이버에 tomcat 검색
- 사이트 들어가서 왼쪽 Download에서 Tomcat 8 클릭
- (커리큘럼은 8.5이므로) 8.5.73버전의 32bit/64bit Windows Service installer 클릭
tools
폴더에 넣고 exe 파일 실행- shutdown Port
-1
대신8888
로 적어준다. (-1
이면 실행할때마다 에러가 뜸) - Login 계정은 혹시 모르니 생성한다. (User Name : admin / Password : admin)
- JRE 주소 찾아준다. (내PC > C: > Program Files > Java > openjdk 폴더 선택 )
- Setup 완료!
2) Port 번호 재설정
http://localhost:8080
에 들어갔을 때 로그인 창이 뜨면 다른 프로그램(ex 오라클)이 쓰고 있다는 것이므로 오라클의 포트번호를 변경해주어야 한다.- SQL Developer 실행
- System계정으로 접속 후
exec dbms_xdb.sethttpport (9090);
쿼리문 실행 - PL/SQL 프로시저가 성공적으로 완료되었습니다. 가 뜨면 오라클의 포트번호가 9090으로 바뀐 것이다.
- 다시
http://localhost:8080
에 들어가면 Apache Tomcat 메인 화면이 뜬다.
3) Web Server와 WAS
- Web Server
- 이미 만들어진 페이지 (html/css/js) 를 클라이언트의 요청에 따라 전달.
- 정적인 내용을 가진 내용들만 클라이언트에게 제공 가능.
- 신문 같은 것이라고 생각하면 됨.
- Apache 는 웹서버 중 하나임.
- Web Application Server(WAS)
- Web Server + Application 중개
- 클라이언트 요청을 프로그램에 연결하는 중개자 역할
- Middle ware라고도 불림.
- 클라이언트의 복잡한 요구를 해결 가능
- Tomcat 은 WAS 중 하나임.
4) Web Application 만들기
지금까지 기존의 자바 프로젝트는 이클립스 들어가서 오른쪽 상단 Open Perspective
를 눌러 Java
를 선택해서 진행해왔었지만, 지금부터는 기존 Default 값인 Java EE
로 프로젝트를 진행한다.
① Create a Dynamic Web project
새로운 Dynamic Web project를 생성한다.
이때, Target runtime
을 설정해주어야 한다. 프로그램을 만들고 실행할 때 서버와 클라이언트 개념이 없는 native 프로그램과는 달리, 웹 어플리케이션(WAS 서버에 들어가는 프로그램) 을 실행하려면 클라이언트의 요청이 필요하고 WAS가 앱에 요청을 전달하는 일련의 과정이 필요하기 때문이다. (앱만 덩그러니 실행할 수가 없음)
Ctrl + F11 누름 > Tomcat 을 키고 WAS 가동 > WAS야 프로그램들 좀 가지고있으렴 > 브라우저 킴 > 브라우저(클라이언트)한테 프로그램 요청하라고 명령 내림 > 프로그램 실행
이 과정에서 eclipse에 Tomcat이 어디있는지 알려줘야 하기 때문에 Target runtime
을 설정해주는 것이다.
② Target runtime 설정
- New runtime 클릭
- 맞는 버전의 Apache Tomcat 클릭 (8.5)
- Next 클릭
- Brouse 클릭
- Tomcat 위치 찾아주기 (내PC > C: > Program Files > Apache Software Foundation > Tomcat 8.5 > Tomcat 폴더 안에서 폴더 선택)
③ webapp 폴더와 src/main/java 폴더
프로젝트를 생성하면 여러가지 파일과 폴더가 보일텐데, 실질적으로 사용하는 폴더는 webapp
폴더와 src/main/java
폴더 두개이고, 나머지는 자동으로 쓰여진다.
- webapp 폴더
- HTML / CSS / JS
- 이미지파일, 음악파일 등
- 프론트 관련된 파일들을 모아두는 곳
- src/main/java 폴더
- 자바로 만든 프로그램들을 모아두는 곳
④ 인코딩 설정
이클립스 내에서 사용하는 모든 Text를 모두 utf-8
으로 설정해준다.
- Window > Preferences > 검색창에
encode
> CSS Files, HTML Files, JSP Files Encoding을EUC-KR
에서UTF-8
로 변경. - Content Types > Text > Java Source File 선택 후 아래쪽 Default encoding에
utf8
을 적어준다. - Workspace > 아래쪽 Text file encoding에 Other 클릭 >
UTF-8
선택
5) Servlet
① Servlet 이란?
클라이언트의 복잡한 요청을 처리하는 자바로 만들어진 백엔드 웹 어플리케이션
자바의 Class라고 생각하면 된다.
사실 클래스를 만드는 거지만 왜 이름이 서블릿이냐 하면 클라이언트로부터 넘어오는 요청을 처리하기 위해 필요한 기능들을 톰캣 서블릿을 개발한 사람들이 이미 만들어놨다.
그래서 클래스를 만들면서 이 서블릿 클래스를 상속받으면 그것을 서블릿이라고 부르는 것이다.
서블릿을 생성할 때 Class name을 쓰고, 밑에 Superclass 설정이 되어있는 것을 보면 이해가 될 것이다.
② @WebServlet
@WebServlet("/Exam_01")
을 어노테이션(Annotation)이라고 한다.
스프링에 가서야 자주 쓰이는 기술인데, 지금 상황에서는 쓸 일이 없어 간단하게 코드를 어떻게 이해하면 되는지만 알고 넘어가자.
클라이언트가 HTML, CSS, JS 파일이 아닌 기능을 요청하면 기능에 맞는 서블릿이 실행을 시켜줘야 한다.
예전에는 WAS에 기능별로 서블릿이 누구인지 쭉 연결해주는 문서(배포서술자-DD)가 xml 파일로 존재했는데, 이게 쓰기가 불편하다보니 서블릿이 업데이트 되면서 xml을 만드는 대신 어노테이션을 사용하여 간소화시킨 것이다.
간단히 말하면, 서블릿 이름의 주소가 오면 그 서블릿에게 보내라라는 설정이 되어있다.
③ protected
접근제한자로써 protected가 잘 쓰이지 않다보니, 일종의 컨벤션처럼 의미를 담게 되었는데 메소드에 protected를 사용하면 “이 메소드는 오버라이드를 해서 쓰는게 좋을껄?” 이라는 뜻을 가진다.
서블릿에서 doGet과 doPost 메소드에서 protected는 기술적인 의미는 없다.
④ servlet 의 역할
- 클라이언트의 복잡한 요청을 처리한다.
- 처리된 내용을 바탕으로 응답을 작성하여 반환한다.
서블릿은 request를 받아서 처리하고, response를 작성하여 클라이언트에게 돌려보낸다.
클라이언트가 버튼을 눌렀을 때, 현재 시간을 돌려주는 서블릿을 생성해보자.
<!-- index.html -->
<form action="Exam_01" method="post">
<input type="submit" value="현재시간은?">
</form>
@WebServlet("/Exam_01")
public class Exam_01 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 작업의 처리
String currentTime = new Date().toString();
// Response를 작성하는 작업
PrintWriter pw = response.getWriter();
pw.append(currentTime);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response){
doGet(request, response);
}
}
⑤ request
클라이언트에서 값을 전달할 때는 꼭 name
속성을 가져야 한다.
name
은 데이터에 대한 이름표이므로, name
이 없으면 서버에서 데이터를 꺼낼 방법이 없다.
서블릿에서 받을때는 getParameter
메소드를 이용한다. 파라미터는 name
을 받는다.
<form action="Servlet01" method="get">
<input type=text name="name">
<input type=text name="message">
<input type=submit>
</form>
String name = request.getParameter("name");
String message = request.getParameter("message");
⑥ response
response는 현재 빈 바구니와 같은 상태인데, 여기에 글을 쓰는 작성자 getWriter
메소드를 꺼내준 뒤, PrintWriter
라고 하는 자료형 변수에 담아준다.(getWriter 메소드의 리턴값이 PrintWriter)
append
메소드는 PrintWriter를 데려와서 이것좀 써봐! 라고 명령하는 메소드라고 생각하면 된다.
response 한 내용을 이쁘게 꾸며주기 위해 color와 size를 바꿔주었다.
이렇게 append로 태그를 직접 보내주는 것이 최초의 서블릿 response 동작 방법인데, 뒤에 더 최적화된 방법을 배울 것이다.
일단은 비효율적이더라도 이해를 돕기 위해 아래와 같은 방법을 사용한다.
PrintWriter pw = response.getWriter();
pw.append("<html>");
pw.append("<body>");
pw.append("<font color=pink size=20>");
pw.append(name + "'s message : " + message);
pw.append("</font>");
pw.append("</html>");
pw.append("</body>")
댓글남기기