public void start(){
		try {
			//ServerSocket serverSocket = new ServerSocket(port);
			while(true){
				if(shutdown){
					break;
				}
				Socket socket = getServerSocket().accept();
				Request request = new Request(socket);
				Response response = new Response(socket);
                                
                                // >> SessionCookie
                                determineSession(request, response);
                                // << SessionCookie
                                
				// >> File Handling
				if(request.getPath().startsWith("/public/")){
					request.getPath().replace("../", "");
					request.getPath().replace("/..", "");
					
					byte[] content = getFileReader().getFileContent(request.getPath());
					if(content.length == 0){
						response.setStatus(Response.STATUS_NOT_FOUND);
					}else{
						response.setBinContent(content);
						response.setContentType(getFileReader().getContentType(request.getPath()));	
					}
				}else{
				// << File Handling
					for(ThinServerAction action:actions){
                                            if(request.getRequestProcessState().stopProcessing()){
                                                break;
                                            }
                                            if(action.mapActionPath(request)){
                                                action.doAction(request, response);
                                            }
					}
				}
				if(response.getBinContent().length > 0){
					OutputStream outputstream = socket.getOutputStream();
					outputstream.write(response.getBinResponse());
					outputstream.flush();
					outputstream.close();
				}else{
					PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
					writer.println(response.getResponse());
					writer.println("\r\n");
					writer.flush();
					writer.close();
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}