본문 바로가기

Programing/XML

Servlet - 기초예제

방문자의 요청객체로부터 ip를 알아내기


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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletEx02 extends javax.servlet.http.HttpServlet {

  @Override
  protected void service(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
  //첫 방문자든, 또는 두번째 방문자든 무조건 수행하는 부분이다.
   //우선 방문자의 요청객체로부터 ip를 알아낸다
.
   String s_ip = req.getRemoteAddr();
  
   //응답시 한글처리
   res.setContentType("text/html;charset=euc-kr"); 
   //응답을 하기위해 스트림 준비
   PrintWriter out = res.getWriter();
   out.println("<body>");
   out.println("<font color ='red'><b>"+s_ip+"</b></font>님 환영합니다.");
   out.println("</body>");
   out.close();
  }
 }

 

 

 

 

 

방문자들 접속횟수 구하기

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


 public class ServletEx03 extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
  int count;
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
  count++;
 
  //응답시 한글처리
  response.setContentType("text/html;charset=euc-kr");
 
  //응답시 필요한 스트림 생성
  PrintWriter out = response.getWriter();
 
  out.println("<body>");
  out.println(" <font color=blue><b>"+count+"</b></font>"+"번째 손님");
  out.println("</body>");
  out.close();
 }            
}






방문자들 접속횟수 구하기 2


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


 public class ServletEx4 extends javax.servlet.http.HttpServlet {
    private int count;
    private String path = "/txt/count.txt";

    //서버가 내려갈 때 또는
    // count값을 저장해야 할 필요성이 있을 때 count.txt파일에
    // 저장하기 위해 준비된 파일이다. 만약 GenericServlet으로 상속을
    // 받았다면 HTTP프로토콜 상의 작업이 조금은 제한 받게 된다.
    // 예를 들어
    // 사용자의 컴퓨터가 아닌 서버의 특정 위치에 있는 파일의
    // 절대 경로를 얻어내기가 어렵다. 그러므로 GenericServlet보다는
    // javax.servlet.http.HttpServlet을 상속 받는 것이
    // 바람직하다.
     
    //count.txt의 내용은 몇 번 읽어들이는 것이 좋을까?
    //방문자가 생길 때마다 읽는 것이 맞는지? 아니면 첫 방문자에
    //의해 단 한번만 읽는 것이 맞는지? 답은 후자이다.

    @Override
 public void init() throws ServletException {
  try{
   //count.txt파일의 경로를 절대 경로로 가져온다.
   //    getServletContext()  -> 현재 사용되고 있는
   //       웹 서버상의 공간(Context)
   //     예를 들면 현재 프로젝트가 하나의 Context이다.
   //     그 경로를 알아보면 "C:\jsp_sutdy\0527_Web" 가 된다.
   // 위와 같은 절대경로는 다음과 같이 얻을 수 있다.
   //    getServletContext().getRealPath("/");
   
   //"C:\jsp_sutdy\0527_Web\txt\count.txt"
   path = getServletContext().getRealPath(path);  //절대경로
   
   //생성된 경로를 따라 파일과 연결되는 스트림 생성
   BufferedReader in = new BufferedReader(
     new FileReader(path));
   //파일과 연결된 스트림으로 부터 읽어 그것을 int로 변환하여
   //count라는 변수에 대입한다.
   count = Integer.parseInt(in.readLine());
  }catch(Exception e){
   e.printStackTrace();
  }
 }
    //위의 init메서드는 첫 방문자에 의해 단 한번만 수행한다.

 @Override
 public void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  //현재 메서드는 모든 방문자들이 수행하는 부분이다.
  count++;
  //응답시 한글 처리
  resp.setContentType("text/html;charset=euc-kr");
 
  //응답을 위한 스트림 생성
  PrintWriter out = resp.getWriter();
 
  //응답 시작
  out.println("<body bgcolor='#336699'>");
  out.println("  <font size='3' color='white'>현재 접속자 수:"+
    "<font size='3' color='red'><b>"+count+
    "</b></font>명</font>");
  out.println("</body>");
 }
    
    private void saveCount(){
     try{
      //count값을 파일에 쓰기
      PrintWriter fout = new PrintWriter(
        new FileWriter(path),true);
      fout.println(String.valueOf(count));//파일에 쓰기
      fout.close();
     }catch(Exception e){}
    }

 @Override
 public void destroy() { //서버가 내려갈 때 호출 된다.
  saveCount();
 }    
}

 

'Programing > XML' 카테고리의 다른 글

XML -  (0) 2008.07.29
XML - xml 과 css  (0) 2008.07.29
XML - DTD  (0) 2008.07.29
XML - 기초  (0) 2008.07.29
XML - DTD 간단정리  (0) 2008.07.29