Web/JSP국비지원 수업 정리

Web 수업(servlet )
깝몬 2023. 7. 3. 18:01

Servlet

servlet의 생명주기

1. 서블릿로딩 : 서블릿컨테이너를 서블릿 클래스에 로드한다.

 init()을 호출한다.

 

2. 초기화

init() : 설정값을 초기화하고, DB를 연동한다.

 

 

3. 요청처리 : client가 요청할때마다 service 메서드를 호출한다. 요청방식에 따라 호출되는 메서드가 달라진다.

요청을 처리하고 응답을 생성

doGet() : get방식 요청시 호출

doPost() : post방식 요청시 호출

doPut() : put방식 요청시 호출

doDelete() : delete방식 요청시 호출

 

 

※getMethod() 를 통해서 확인하여 사용할 수 있다.

 

4. 소멸

destory() : DB연갤해제, 리소스 반환 등등..

 

jsp에서의 java코드 <% %> 를 통한 호출과

 

java파일의 class

 

 

Servlet을 이용하여 java파일을 web에 출력하기

web.xml에서 진행

httpServlet을 상속하는 java파일을 만들어준다.

그리고 위에서 언급한 doGet이나 doPost 그리고, init과 destory들을 상속하여 만들어준다.

package ch17;

import java.io.IOException;
import java.io.PrintWriter;

import javax.jws.WebService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//Servlet클래스는 jsp문서가 자바적인 요소로 변환한 상태
//Servlet클래스는 httpServlet클래스를 상속받아서사용

public class NowServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet 호출");
		System.out.println("request.getMethod() = "+request.getMethod());
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter(); // 브라우저에 출력
		out.println("<!DOCTYPE html>\r\n <html>\r\n <head>\r\n <meta charset=\"UTF-8\">");
		out.println("<title>jsp를 테스트하는 문서입니다.</title>");
		out.println("</head><body>");
		out.println("지금의 시간은? : new Date()");
		out.println("<hr>");
		out.println("	 Date today = new Date();");
		out.println("	 out.println(\"이번엔 서블릿 안에서 시간\"+today);\r\n");
		out.println("<hr>");
		out.println("또 시간 : today");
		out.println("<hr>");
		out.println("</body></html>");
		
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("dopost 호출");
	}

	@Override
	public void destroy() {
		System.out.println("destroy 호출");
	}

	@Override
	public void init() throws ServletException {
		System.out.println("init 호출");
	}

}

그다음 doGet에 우리가 사용할 html코드를 PrintWriter의 객체를 생성하여 객체를 이용해 원하는 대로 작성한다.

이렇게 만들어진 httpservlet의 상속 java파일은 아직 web으로 진행할 수 없다. 주소를 가지지 않았기 때문이다.

이 servlet을 이름을 부여하며 그 파일이라고 지정 한 후에 url주소를 어떻게 정할지 tomcat서버의 web.xml에 추가해주자.

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app>
<welcome-file-list>

  <welcome-file>index.html</welcome-file>

  <welcome-file>index.htm</welcome-file>

  <welcome-file>index.jsp</welcome-file>

</welcome-file-list>
<servlet>
	<servlet-name>now</servlet-name>
	<servlet-class>ch17.NowServlet</servlet-class>
</servlet>

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

</web-app>

이렇게 지정해주는 경우에 우리는 이 클래스의 이름을 now로 지정한 것이며

 

그 이름을 가진 servlet에게 url-pattern을 이용하여 /now라는 주소를 부여하여

 

우리가 만든 class의 주소인 jsppro/now에 접속하면 doGet에 입력해둔 html코드를 불러와 읽게 되는 것이다.

 

 

 

 

annotation(@)을 이용

위의 방식은 xml파일을 관리하는 방식이었는데, 이것이 아닌 다른 방식으로 선언을하면

 

Class 선언 앞부분을 잘 살펴보자.

package ch17;

import java.io.IOException;
import java.io.PrintWriter;

import javax.jws.WebService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//Servlet클래스는 jsp문서가 자바적인 요소로 변환한 상태
//Servlet클래스는 httpServlet클래스를 상속받아서사용
@WebServlet(urlPatterns = "/hihi")
public class HiServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet 호출");
		System.out.println("request.getMethod() = "+request.getMethod());
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter(); // 브라우저에 출력
		out.println("<!DOCTYPE html>\r\n <html>\r\n <head>\r\n <meta charset=\"UTF-8\">");
		out.println("<title>jsp를 테스트하는 문서입니다.</title>");
		out.println("</head><body>");
		out.println("애노테이션~~~");
		out.println("<hr>");
		out.println("	 Date today = new Date();");
		out.println("	 out.println(\"이번엔 서블릿 안에서 시간\"+today);\r\n");
		out.println("<hr>");
		out.println("또 시간 : today");
		out.println("<hr>");
		out.println("</body></html>");
		
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("dopost 호출");
	}

	@Override
	public void destroy() {
		System.out.println("destroy 호출");
	}

	@Override
	public void init() throws ServletException {
		System.out.println("init 호출");
	}

}

 

@WebServlet(urlPatterns = "/주소")

위와 같은 양식으로 annotation을 해당 servlet의 주소를 설정할 수 있다.

 

 

 

커넥션풀

 

커넥션풀이란?

 

커넥션의 생성은 우리가 해본 적이 있다.

JDBC를 만들어 커넥션 객체를 만들어 그 객체를 이용해 STATEMENT를 생성하고 RESULTSET까지

 

하나의 커넥션을 통해서 이런 작업을 진행했지만, 이제는 웹사이트가 되었을때, 하나의 커넥션으로는 관리가 어렵거나, 작업처리속도에 한계가 생길 수 있다.

 

그래서 나온 방식이 커넥션풀(Pool) 기법이다.

 

 

요점 : 커넥션을 미리 일정 객체를 만들어둔 후 그 객체들을 가져가서 사용후, 작업이 끝난 후에는 반납을 통하여 다시 객체를 받고, 다음에 다시 사용하도록 대기상태로 두어 매번 객체의 생성을 할 필요가 없다는 것이 장점이다.