방문자의 요청객체로부터 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 |