Count 기능을 구현할 때 2개의 Servlet 과 1개의 클래스로 MVC 패턴을 적용한 예제
Controller (CounterServer.java)
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class CounterServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
private CountModel model;
public void init(){
model = new CountModel(this);
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("count", String.valueOf(model.getCount()));
request.getRequestDispatcher("/CountView").forward(request, response);
}
}
Model (CountModel.java)
import java.io.*;
import javax.servlet.http.*;
public class CountModel {
private HttpServlet servlet;
private String counterPath;
private long cnt;
private DataInputStream din;
private DataOutputStream dout;
private FileInputStream fin;
private FileOutputStream fout;
public CountModel(HttpServlet servlet) {
this.servlet = servlet;
counterPath = servlet.getServletContext().getRealPath("/WEB-INF/count.dat");
File f = new File(counterPath);
if(!f.exists()){
createCounterFile();
}
}
public long getCount() throws IOException {
if(cnt==0) cnt = getCountFromFile()+1;
else{
cnt++;
if(cnt%5==0) saveCount();
}
return cnt;
}
private long getCountFromFile() throws IOException {
try{
fin = new FileInputStream(counterPath);
din = new DataInputStream(fin);
long cnt = din.readLong();
din.close();
return cnt;
}catch(FileNotFoundException fe){
try{
if(din!=null)din.close();
}catch(Exception e){}
createCounterFile();
return 0L;
}catch(IOException ioe){
throw ioe;
}
}
private void createCounterFile(){
try{
fout = new FileOutputStream(counterPath);
dout = new DataOutputStream(fout);
dout.writeLong(0L);
dout.close();
}catch(Exception e){}
}
private void saveCount(){
try{
dout = new DataOutputStream(new FileOutputStream(counterPath));
dout.writeLong(cnt);
dout.close();
}catch(FileNotFoundException fe){
}catch(IOException ie){}
}
}
View (CountView.java)
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CountView extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=KSC5601");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("Count:"+request.getAttribute("count"));
out.println("</body></html>");
}
}