Servlet - 기초예제
Temp
2010. 9. 13. 17:36
방문자의 요청객체로부터 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(""); out.println("<font color="red"><b>"+s_ip+"</b></font>님 환영합니다."); out.println(""); 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(""); out.println(" <font color="blue"><b>"+count+"</b></font>"+"번째 손님"); out.println(""); 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(""); out.println(" <font color="white" size="3">현재 접속자 수:"+ "<font color="red" size="3"><b>"+count+ "</b></font>명</font>"); out.println(""); } 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(); } }
[출처] Servlet - 기초예제|작성자 비틀박