요청 파라미터
- 클라이언트가 CGI(서블릿)으로 전송하는 데이터
- CGI가 일처리를 위해 클라이언트로부터 입력 받아야 하는 데이터
- HTML의 form 태그나 QueryString을 이용해 전송한다.
- name=value 형태로 전송된다.
요청 파라미터
- 클라이언트가 CGI(서블릿)으로 전송하는 데이터
- CGI가 일처리를 위해 클라이언트로부터 입력 받아야 하는 데이터
- HTML의 form 태그나 QueryString을 이용해 전송한다.
- name=value 형태로 전송된다.
javax.servlet.http.HttpServletRequest
- 클라이언트의 요청과 관련된 정보와 동작을 가지고 있는 객체
- Web Container가 생성하여 service()의 인수로 넘겨준다.
- ServletRequest의 하위
- 주요 기능
º 요청 파라미터 조회
º HttpSession 객체 조회
º request scope 상의 component간의 데이터 공유 지원
javax.servlet.http.HttpServletResponse
- 응답할 client에 대한 정보와 동작을 가지고 있는 객체
- Web container가 생성하여 service()의 인수로 넘겨준다.
- ServletResponse의 하위
- 주요 기능
º 응답 Header 정보 설정(Content type 설정)
º 응답 Stream 조회
º Redirect 방식으로 수행 넘기기
Service()가 실행될때마다 카운터 쌓기
1. 우선 클래스를 만들어준다.
2. 다음과 같이 코딩한다.
이 코딩은 서비스가 요청될때마다 카운터가 하나씩 쌓여서 화면에 출력하는걸 의미한다.
3. web.xml도 다음과 같이 코딩해준후 서버를 가동시킨다.
4. http://127.0.0.1:8088/myweb/counter로 들어가서 다음과 같이 나오는지 확인한다.
5. 새로고침 할때마다 서비스가 요청되어 카운터가 쌓이는걸 볼 수 있다.
6. 여러번 새로고침한 상황이다.
하지만 위와 같이 코딩하게 되면 서버를 재 실행하게 되면 카운터는 인스턴스 변수이기 때문에 초기화 된다.
그래서 외부자원을 이용해야 하지만 항상 서비스가 요청될때마다 읽고 쓰기가 되면 계속 작업을 하기 때문에 버벅거리게 된다.
이 문제를 해결하기 위해 destroy()에 저장하고 init()때 읽어 들이기를해야 한다.
1. Init()와 destroy()를 활용하여 코딩하기로 한다.
2. 우선 Init()를 코딩한다.
- init()에서는 파일을 읽어서 그 파일안에 있는 값을 로드하는 기능을 한다.
3. 그다음 Destroy()를 코딩한다.
- destroy()는 visitcount를 저장하는 역할을 하게 된다.
4. 그 다음 서버를 가동시키고 http://127.0.0.1:8088/myweb/counter를 실행하면 다음과 같이 나와야 한다.
밑 사진은 이미 22번째까지 새로고침을 한 것이다.
5. 이제 서버를 재가동하여 값이 제대로 저장되어 불러오는지 테스트한다.
6. 재가동하여 이전에 불러온값 +1이 적용되면 성공적으로 코딩한 것이다.
CounterServlet 소스코드
public class CounterServlet extends HttpServlet {
FileReader fr = null;
PrintWriter pw = null;
private int visitCount;
private String counter = "D:\\apc\\apache-tomcat-6.0.35\\counter.dat";
public void init() {
try {
fr = new FileReader(counter);
visitCount = fr.read();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("카운터 ");
out.println("");
visitCount++;// 카운터의 값을 1증가
out.println("당신은" + visitCount + "번째 방문자입니다.");
out.println("");
}
public void destroy() {
try {
pw = new PrintWriter(counter);
pw.write(visitCount);
} catch (IOException e) {
e.printStackTrace();
} finally {
pw.close();
}
}
}