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) 기법이다.
요점 : 커넥션을 미리 일정 객체를 만들어둔 후 그 객체들을 가져가서 사용후, 작업이 끝난 후에는 반납을 통하여 다시 객체를 받고, 다음에 다시 사용하도록 대기상태로 두어 매번 객체의 생성을 할 필요가 없다는 것이 장점이다.
'Web > JSP국비지원 수업 정리' 카테고리의 다른 글
제이쿼리를 이용한 form의 attribute 설정 (0) | 2023.07.10 |
---|---|
jsp-Session (0) | 2023.07.07 |
Web 수업(JQUERY사용법 / HTML를 쓰는 뼈대 / CSS를 통한 동적 활용) (0) | 2023.06.30 |
Web DB 연동 수업내용(JQUERY-1회차) (0) | 2023.06.29 |
Web 6일차 수업내용(javascript이어서 + jquery) (0) | 2023.06.26 |