=> 웹 서비스를 위한 자바 클래스
(자바를 이용한 웹을 만들기 위해 필요한 기술)
=> 자바 어플리케이션 코딩을 하듯
웹 브라우저용 출력 화면(HTML) 을 만드는 방법
웹 프로그래밍에서 클라이언트의 '요청(Request)'을 처리하고
그 결과를 다시 클라이언트에게 '응답(Response)'하는
Servlet클래스의 구현 규칙을 지킨 자바 프로그래밍 기술
브라우저 -> 서버 ( Request )
서버 -> 브라우저 ( Response )
[ 단점 ]
servlet에 작성한 html 코드 변경 시 재컴파일 해야 하는 단점이 있음
-> 다음 장 설명 참고
Http Request를 전송 받은 Servlet Container는 아래 두 객체를 생성
HttpServletRequest(요청 관련 내용이 저장된 객체),
HttpServletResponse(응답 관련 내용이 저장된 객체)
DD (배포서술자, Deployment Descriptor) = web.xml은
사용자가 요청한 URL을 분석하여 어떤 서블릿 클래스에 요청 내용을 전달할지 찾음
해당 서블릿에서 init() 메소드를 먼저 호출한 후 service() 메소드를 호출하여
클라이언트로부터 전송 받은 방식인 GET, POST 여부에 따라 해당 메소드(doXXX()) 를 호출함.
doGet() / doPost() 메소드는 동적 페이지를 생성 후 HttpServletResponse객체에 응답을 보냄
응답 종료 시 HttpServletRequest, HttpServletResponse 객체 소멸
클라이언트(브라우저)가 서버로 요청을 보내는 방법
[ 장점 ]
[ 단점 ]
ex) Name1 = 홍길동&Name2 =유은서의 경우
json 타입이라면
{
"Name1" : "value1"
"Name2" : "value2"
....
}
[ 장점 ]
[ 단점 ]
=> Tomcat9.0 설치
[ 처음 설정 ]
=> Window-> preferences
1) 메모리 정리하기
General-> Show heap status
2) 빌드하기전에 리프레시를 자동 진행
General -> Workspace -> Refresh using native hooks or polling
3) 한글도 출력될 수 있게 설정
General -> Workspace -> Text file encoding =>"UTF-8"
4) 다른 파일도 한글 출력될 수 있게 설정
검색에 "enc" -> Content Types -> Text -> Default encoding => "UTF-8"
->CSS Files -> Encoding => "ISO 10646/Unicode(UTF-8)
->HTML Files -> Encoding => "ISO 10646/Unicode(UTF-8)
->JSP Files -> Encoding => "ISO 10646/Unicode(UTF-8)
5) 실행할 서버가 어디있는지 등록
Server-> Runtime Enviroments -> Add -> Apache -> "9.0V" -> Browser-> 톰캣 저장소 연결
6) Servers / Console / Package Explorer 작업화면에 표시
[ 작업 ]
1) Server 설정
=> New Server -> Apache => Tomcat 9.0 -> name => "Servlet Server"
=> 포트 번호 확인가능
2) 자바 프로젝트 열기
=> New -> Other -> Dynamic Web Project -> 프로젝트 이름
-> Target runtime : Tomcat9.0
-> Dynamic -> 4.0
-> Confignuration -> Default Configuration for Apache Tomcat v9.0
=> Next => Next -> Context root : / (최상위 주소 )
-> Generate web.xml deployment descriptor (배포 서술자 생성)
+) web.xml(배포 서술자(설명서))
Server가 켜지자 마자(Start) 제일 처음 읽는 문서
<display-name>ServletProject</display-name>
<!-- 메인페이지로 사용할 파일 명 목록 (webapp 폴더에 파일 생성)-->
<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>
1) index.html 파일을 src\main\webapp에 표시 => 메인페이지 화면 출력
2) web.xml에서 연결시키기
<!-- 특정 클래스(/example1)를 Servlet으로 등록하고 이름을 지정하는 태그 -->
<servlet>
<!-- 등록할 Servlet을 지칭할 명칭 -->
<servlet-name>ex1</servlet-name>
<!-- Servlet으로 등록할 클래스의 패키지명 + 클래스명 -->
<servlet-class>edu.kh.servlet.controller.ExampleController1</servlet-class>
</servlet>
3) web.xml에서 요청 주소를 처리할 Servlet 연결
<servlet-mapping>
<!-- 등록할 Servlet을 지칭할 명칭 -->
<servlet-name>ex1</servlet-name>
<!-- 연결할 요청 주소 -->
<url-pattern>/example1</url-pattern>
</servlet-mapping>
4) java 코드 작성
=> get 방식 또는 post 방식 이용하여 처리 가능
먼저, HttpServletRequest와 HttpServletResponse 이용
public class ExampleController1 extends HttpServlet {
// 오버라이딩해서 사용해야 함.
// doGet() 메서드
// -> Get 방식 요청을 처리하는 메서드
// HttpServlet의 메서드를 오버라이딩
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// HttpServletRequest
// - 클라이언트 요청 시 생성되는 객체
// - 클라이언트 데이터 + 요청관련 데이터
// HttpServeltResponse
// - 클라이언트 요청 시 서버에서 생성하는 객체
// - 서버가 클라이언트에게 응답하기 위한 방법을 제공하는 객체
System.out.println("--- 이름, 나이를 입력받아 처리하는 코드 ---");
// 요청 시 입력된 이름, 나이를 전달 받아오기
// parameter : 매개변수 == 다른곳의 값을 전달 받아올 때 사용
// req.getParameter("name 속성값");
// -> 요청 시 전달된 데이터 중
// name 속성 값이 일치하는 데이터의 value를 얻어와
// String 형태로 반환
String name = req.getParameter("inputName"); // 홍길동을 반환
String age = req.getParameter("inputAge"); // 12 (number Type이지만, String으로 얻어옴)
//number 값으로 받아와도 html에서 얻어온 값은 모두 String 형태
System.out.println("입력 받은 이름 : " + name);
System.out.println("입력 받은 나이 : " + age);
// 서버 -> 클라이언트 응답하기
//HttpServletResponse객체 이용
// 응답하는 문서의 형식과 문자 인코딩을 지정
// - text/html : 글자가 작성된 html 문서
// - charset=UTF-8 : UTF-8 형식의 문자 인코딩으로 작성됨
resp.setContentType("text/html; charset=UTF-8");
// 서버 -> 클라이언트로 연결되는 스트림 얻어오기
PrintWriter out = resp.getWriter();
// 서버 -> 클라이언트에게 쓰다 (출력)
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>서버 응답 결과</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>");
out.println(name + "님의 나이는 " + age + "세 입니다.");
out.println("</h1>");
out.println("</body>");
out.println("</html>");
// Servlet만 사용하면 위와 같은 형태로 html형태를 작성해야함 .
}
5) jsp이용하여 server의 값들을 받아 동작
<%-- jsp 표현식
<% %> : 스크립틀릿 -> 자바코드 작성
<%= %> : 표현식 -> 자바, 서버에서 받아온 값을 표현할 때, 출력 %-->
<h3 style="color:palevioletred"><%= requst.getPa%>님의 가입을 환영합니다.</h3>
<ul>
<li>id : user01</li>
<li>pw : pass01</li>
</ul>
<h4>자기소개</h4>
<p>안녕하세요?</p>
1) 동작이 제대로 안되는 경우
① Server -> clean
② Project -> clean
③ 강제 새로고침 -> Ctrl + shift + R