일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AI Tech 4기
- 장고
- AI Tech
- 부스트캠프
- 파이썬
- 웹
- Naver boostcamp
- 대회
- 네이버
- 프로그래머스
- 2021 Dev-matching 웹 백엔드 개발자
- 레벨2
- P Stage
- cs50
- Customer service 구현
- 웹 프로그래밍
- sts
- 서버
- 프로그래밍
- QNA 봇
- 4기
- 백준
- 서블릿
- BOJ
- Django
- boostcourse
- 구현
- Naver boostcourse
- 백엔드
- 풀스택
- Today
- Total
daniel7481의 개발일지
[웹 프로그래밍(풀스택)] Servlet(1) 본문
1. Servlet이란?
자바 웹 어플리케이션
-방금 만든 firstweb 프로젝트로 만들어진 것이 자바 웹 어플리케이셔이다. 자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet, package, 인터페이스 등), 각종 설정 파일 등이 포함된다. 앞에서 만든 프로그램은 아주 간단한 자바 웹 어플리케이션이다.
자바 웹 어플리케이션 폴더 구조
WAS등의 미들웨어에게 도움을 받을 때는 혹은 프레임워크를 사용할 때에는 정해진 약속을 지켜야 한다. 자바 웹 어플리케이션도 이러한 파일 구조를 따라야 한다. WEB-INF 폴더 안에는 web.xml파일이 존재한다. 이 웹 어플리케이션에 대한 정보를 다 가지고 있는 프로그램이다. lib(라이브러리) 안에는 자료 파일(jar)을 넣을 수 있다. classes 폴더에는 패키지, class들(서블릿 포함)이 들어간다. 같은 경로에 폴더, 이미지, 리소스들을 넣을 수 있다.
C:\Coding\workspace(workspace를 저장해놓은 주소)\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\firstweb\WEB-INF에 들어가면 lib폴더와 classes폴더를 볼 수 있다. classes 폴더 안에는 우리가 작업했던 examples 패키지 안의 Helloservlet.class가 있다.
Servlet이란?
자바 웹 어플리케이션구성 요소중 동적인 처리를 하는 프로그램의 역활
정의
- WAS에서 동작하는 Java 클래스이다
- 서블릿은 HttpServlet 클래스를 상속받아야 한다
- 서블릿과 JSP로부터 최상의 결과를얻으려면 웹 페이지를 개발할 때 이 두가지(JSP, 서블릿)을 조화롭게 사용해야 한다.(응답결과에서 웹 페이지를 구성하는 화면(HTML)은 JSP로 표현하고 복잡한 프로그래밍은 서블릿으로 구현한다.
2. Servlet 작성 방법-1
Servlet 작성 방법은 2가지로 나뉜다.
1. Servlet 3.0 spec 이상
- web.xml파일을 사용하지 않음
- 자바 어노테이션(annotation)을 사용
- 앞에서 실습했던 firstweb에서 사용
2. Servlet 3.0 spec 미만
- Servlet을 등록할 때 web.xml파일에 등록
3. Servlet 작성 방법-2
먼저 exam31이라는 프로젝트를 만들어보자. 우리는 1부터 10까지 출력하는 동적인 프로그램을 만들 것이다. 먼저 프로젝트를 생성할 때 output folder가 Build\classes라고 되어있는데, 명령 프롬프트에서 tree f/를 쳤을 때 Build라는 디렉토리 예하에 classes라는 폴더에 우리가 작업한 내용이 저장된다는것이다. Context root는 URL에서 프로젝트 명이고, 그 밑에 Generate web.xml deployment descriptor이라는 체크박스가 있는데 앞에서 설명한 바와 같이 Servlet 3.0 spec이상부터는 어노테이션에 작성하여 web.xml이 필요없기 때문에 만들 필요는 없다. 그러나 나중에 Spring같은 프레임워크를 사용할 때에 다른 설정 부분을 web.xml에 추가할 필요가 있기 때문에 반드시 web.xml을 생성해야 한다. 이제 Servlet 하나를 패키지명 exam, class이름을 TenServlet이라고 하자. 클래스 이름은 TenServlet이지만 URL 상에서는 그냥 Ten이라고 하기로 했기 때문에 URL mapping에서 Ten으로 바꿔주자. 서블릿은 동적으로 응답 결과를 만들어내는 것이다. 이는 응답할 페이지를 미리 만들어놓은 것이 아니라 요청이 들어왔을 때 서블릿이 실행되면서 응답할 코드를 만들어내고 그 때에만 그 코드로 응답을 하는 것이다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8")
PrintWriter out = response.getWriter()
}
위 코드를 봤을 때 매개변수로 주어지는 request와 response는 클라와 서버의 요청과 응답을 모아놓은 것이다. 응답하는 모든 객체는 response로, 요청하는 모든 객체는 request로 표현을 한다. 브라우저에게 무엇을 응답 받을지 알려줘야 하기 때문에 response.setContentType("type;encoding")형식으로 표현한다. 밑의 줄은 response.getWriter메소드로 PrintWriter 객체를 생성하여 out이라는 PrintWriter 객체를 생성해준다. 그 이후로 out.println으로 출력할 수 있다. 이제 1부터 10까지 출력하기!를 h1으로 print하고 그 밑으로 for문을 사용하여 1부터 10까지 출력해보자. 매 줄마다 줄바꿈(<br>)을 넣어줘야 한다. 어노테이션 @WebServlet("/Ten")에서 /Ten을 다른 것으로 바꿔주면 URL mapping이 자동으로 바껴서 url주소가 바뀌게 된다.
4. Servlet 작성 방법 -3
이제 3.0 미만에서 작성하는 방법을 배워보자. 먼저 Servlet 2.5 spec으로 exam25라는 프로젝트를 생성하자. 그 다음 1부터 10까지 출력하는 TenServlet을 작성해볼 것이다. 똑같이 Dynamic Web Project를 생성해주는데 이번에는 Dynamic Web module version을 2.5로 설정한다. 그러면 앞에서 체크되지 않았던 체크박스(Generate web.xml deployment descriptor)가 자동으로 체크되어 있는 것을 볼 수 있다. 만들어놓은 후 src\main\webapp\WEB-INF\lib\web.xml\이 있을 것이다. 실행시키면 Design과 Source가 나타나 있다. 똑같이 TenServlet을 만들어준다. 이젠 annotation(@WebServlet("/Ten"))이 사라졌다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>exam25</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>TenServlet</display-name>
<servlet-name>TenServlet</servlet-name>
<servlet-class>exam.TenServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TenServlet</servlet-name>
<url-pattern>/Ten</url-pattern>
</servlet-mapping>
</web-app>
자 이제 맨 밑에 </servlet>이라는 항목이 생겼다. 먼저 <servlet-mapping>을 살펴보자. <url-pattern>은 /Ten이라는 URL이 요청으로 들어오면 TenServlet이라는 이름을 가진 서블릿(<servlet-name>)을 가지고 servlet이라는 태그 안에서 똑같은 이름을 가진 Servlet이 있는지 확인한다. 실제로 실행시킬 서블릿이 누군지(Exam.TenServlet)를 확인하는 것이다. 그 외로 출력하는 부분의 코드는 앞과 똑같다. 이 버전에서 만약 url mapping을 바꿔주고 싶으면 url-patterns를 바꿔주면 된다. 여기서 중요한 점은 web.xml파일이 바뀌면 반드시 서버를 다시 돌려야 한다.
'Naver Boostcourse' 카테고리의 다른 글
[웹 프로그래밍(풀스택)] Servlet -BE(3) (0) | 2022.01.23 |
---|---|
[웹 프로그래밍(풀스택)] Servlet - BE(2) (0) | 2022.01.22 |
[웹 프로그래밍(풀스택)] 개발 환경 설정-BE (0) | 2022.01.22 |
[웹 프로그래밍(풀스택)] HTML CSS를 마치며 (0) | 2021.12.10 |
[웹 프로그래밍(풀스택)]CSS-FE(3) (0) | 2021.12.10 |