Servlet [01] 개념, 출력

totwo·2024년 7월 9일

JSP/Servlet/JSTL

목록 보기
1/15
post-thumbnail
  • CGI(Common Gateway Interface) : 웹 서버 상에서 사용자 프로그램을 동작시키기 위한 방법
  • WAS(Web Application Server) : 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크
  • JVM(Java Virtual Machine) : 자바 프로그램 실행환경을 만들어 주는 소프트웨어

새로운 유저가 접속할 때마다 process를 생성해야 하기 때문에
많은 사람이 접속할 경우 Server 허용량을 초과한다.

Client → 요청(url) → Server → CGI → Program → DB
→ Program(HTML만듦) → CGI → Server → 반응(HTML) → Client


그렇다면 Server가 많은 사람이 접속할 때를 생각하면 어떤 process를 사용해야 하나?

multi thread
: 유저가 접속해도 1개의 process에서 thread로 생성되기 때문에 많은 수의 유저가 과부하가 작다.

✅ Servlet

Server + Applet 합성어로
여기서 Applet은 Java 프로그램이 웹 서버에서 자동으로 설치되어 동작하는 프로그램을 말함

  • Server상에서 작동하는 프로그램
    Java를 기반으로 Web Application Programming 기술을 뜻함.
  • Client의 요청에 작동하고 응답은 HTML을 이용함
  • HTTP Servlet 클래스를 상속받음
    → Java 코드 안에 HTML을 가지고 있다.

  • Servlet은 Java 기반으로 .java 확장자를 가짐
    .class로 컴파일되어 JVM(자바 프로그램 관리 서버)을 통해 호출
  • Java Multi Thread를 이용하여 동작함
    → 속도와 메모리 면의 효율성
  • 객체 지향적이어서 대규모 Application 개발에 적합함.



Apache Tomcat 사이트에서 Tomcat 9 Software Downloads 해줌.
https://tomcat.apache.org/download-90.cgi

[apache-tomcat-9.0.90] 설치하여 해당 폴더 생성하고 Tomcat Server 설정해주기

Tomcat 9.0이니까 9.0으로 연결해주기

Server 더블클릭하여 Port Number 확인하기
Port Number 8080인데 Oracle DB도 Port Number가 8080이라서 8081로 변경해줌.(원하는 번호로 바꾸면 됨)

Port 번호 변경 후에 Server 우클릭하여 Start 해주기

엑세스 허용해주기

New Dynamic Web Project 눌러서 Project 생성
Target runtime Tomcat v9.0으로 정하기

폴더 확인하기

Java Resources - src/main/java에 Servlet 클릭

Servlet을 만들 때는 Package를 꼭 만들어준다.
Package명과 Class name 써주기

Servlet에서는 실행하기 위해 service() 메서드를 사용함
service() 체크 후 완료

@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet { 
 
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

여기서 자동생성된 @WebServlet()는 무엇?

URL Mapping

  • Java Servlet 파일을 Web에서 실행시키기 위해 URL을 맵핑(연결)한 것
  • 보통 Class명을 따라가나 수정이 가능하다.
  • 변경시 접근 편리 혹은 보안에 강하다

또한 Java에서 실행시키기 위한 main() 메서드를 똑같이 사용하는 게 아니라
Servlet에서는 실행시키기 위해서는 service() 메서드가 필요하다

  • Java는 main()
  • Servlet는 service()
	System.out.println("Hello Servlet!!");

serivce 안에 원하는 출력문 작성하고 실행하면 웹페이지 창을 띄울 수 있는데

내 Tomcat 선택하고 Finish 해서 Run 해주기!


해당 웹사이트로 연결되며
'HTTP 상태 404 – 찾을 수 없음'이라고 창이 뜬다.
그래서 url 구조를 파악하고 변경해주어야 한다.

url 구조는 ip: port/ContextPath/request로 이루어져 있으며
port는 DNS(domain name system)를 말하고
server WAS내의 project는 ContextPath 구분함.

나머지는 지우되 '/Servlet'과 해당 url mapping (자동생성된 이름) '/HelloServlet'를 함께 작성해준다.

localhost = 127.0.0.1 이기 때문에 이렇게 작성하여도 같은 창이다.

해당 창을 요청(새로고침)을 하면

console창에 계속 response가 된다.

localhost나 127.0.0.1가 아니라 내 ip를 알고 싶다면
cmd prompt 창에서 내 ipconfig를 적으면 ip를 확인할 수 있다.

ip 주소를 복사하여 localhost란에 작성하여도 동일한 창을 띄우고 타인에게 공유할 수 있다.

해당 url를 공유하여 다른 접속자가 들어올 때마다 console 창에 출력문이 계속 출력되는 걸 볼 수 있다.



[실습] html을 이용하여 환영인사 출력해보기

  // .java (Servlet)
		// request(요청) 객체
		String ip = request.getRemoteAddr();   // 요청한 주소
		System.out.println("접속한 IP : " + ip);
		
		// response(응답) 객체
        // : 응답하는 HTML문서에 글자나 태그를 작성하는 객체 
		
		// 응답 객체에 한글 인코딩 하는 방법 EUC-KR or UTF-8
		response.setCharacterEncoding("EUC-KR"); 
		 
		// PrintWriter (출력시 사용) import 해주기 
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<body>");
		
		out.println("<img src='img/tingcle.png'><br>");
		out.println("<h2>" + ip + "님 방문을 환영합니다.</h2>");  
		
		out.println("</body>");
		out.println("</html>");

요청한 ip주소가 console창에 출력될 수 있게 했기 때문에
웹사이트에 방문한 사람의 IP가 뜬다




[실습]
팀끼리 서로의 ip를 공유하고, TeamServlet에
팀장이 접속시 : '팀장님 안녕하세요?'
짝궁 접속시 : '짝궁 하이?'
그외 팀원이 접속시 : '우리팀 최고 짱짱'
모르는 사람 접속시 : '반갑습니다. 처음 뵙겠습니다 v('v')' 뜰 수 있게 만들어보자~

  // .java (Servlet)
		String ip = request.getRemoteAddr();
		System.out.println("접속한 IP : " + ip);

		response.setCharacterEncoding("EUC-KR");
		PrintWriter out = response.getWriter();
		out.println("<HTML>");
		out.println("<body>");
		if (ip.equals("192.xxx.xx.xx")) {
			out.println("<h1>팀장님 안녕하세요?</h1>");
		} else if (ip.equals("192.xxx.xx.xx")) {
			out.println("<h1>짝궁 하이?</h1>");
		} else if (ip.equals("192.xxx.xx.xx") || ip.equals("192.xxx.xx.xx") || ip.equals("192.xxx.xx.xx")) {
			out.println("<h1>우리팀 최고 짱짱</h1>");
		} else {
			out.println("<img src='img/tingcle.png'><br>");
			out.println("<h1>반갑습니다. 처음 뵙겠습니다 v('v')</h1>");
		}
		out.println("</body>");
		out.println("</HTML>");
		
	}

console 창에는 웹사이트에 방문한 사람의 IP가 뜬다

팀장 접속시

profile
Hello, World!

0개의 댓글