Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.net.*;
- import java.nio.file.Files;
- import java.util.ArrayList;
- import java.util.List;
- public class ServerWeb {
- public static final String continutPath = "D:\\SCOALA\\PW\\Laborator6\\proiect1-IureaBogdan\\continut\\";
- public static int connectedUsers = 0;
- public static void main(String[] args) throws IOException {
- System.out.println("#########################################################################");
- System.out.println("Serverul asculta potentiali clienti.");
- // pornește un server pe portul 5678
- ServerSocket serverSocket = new ServerSocket(5678);
- while (true) {
- Socket clientSocket = serverSocket.accept();
- connectedUsers++;
- System.out.println("###CLIENT NOU###");
- // socketWriter - wrapper peste fluxul de ieșire folosit pentru a transmite date
- // clientului
- // PrintWriter socketWriter = new PrintWriter(clientSocket.getOutputStream(),
- // true);
- // socketReader - wrapper peste fluxul de intrare folosit pentru a primi date de
- // la client
- BufferedReader socketReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
- // este citită prima linie de text din cerere
- String linieDeStart = socketReader.readLine();
- System.out.println("##### " + linieDeStart + " #####");
- // mesajul citit este transmis la client
- // interpretarea sirului de caractere `linieDeStart` pentru a extrage numele resursei cerut
- String requestedFile = StringRequestInterpretter(linieDeStart);
- boolean isFound = searchFile(requestedFile);
- // trimiterea răspunsului HTTP
- String path = continutPath + requestedFile;
- String contentType = "";
- switch (getFileType(linieDeStart)) {
- case 1:
- contentType = "Content-Type:text/html; charset=UTF-8";
- break;
- case 2:
- contentType = "Content-Type:text/css";
- break;
- case 3:
- contentType = "Content-Type:application/js";
- break;
- case 4:
- contentType = "Content-Type:text/png";
- break;
- case 5:
- contentType = "Content-Type:text/jpeg";
- break;
- case 6:
- contentType = "Content-Type:text/gif";
- break;
- case 7:
- contentType = "Content-Type:image/x-icon";
- break;
- }
- byte[] response = createResponse(isFound, path, contentType);
- clientSocket.getOutputStream().write(response);
- // închide conexiunea cu clientul
- // la apelul metodei close() se închid automat fluxurile de intrare și ieșire
- // (socketReader și socketWriter)
- clientSocket.close();
- //conditie pusa doar ca serverul sa dea eroare la 30 de cereri ca apoi sa se inchida
- if (connectedUsers > 30)
- serverSocket.close();
- }
- }
- private static String StringRequestInterpretter(String input) {
- int nrOfSl = 0;
- for (int i = 0; i < input.length(); i++) {
- if (input.charAt(i) == '/') {
- nrOfSl++;
- }
- }
- String temp = "";
- if (nrOfSl >= 2) {
- temp = input.substring(input.indexOf("/") + 1, input.indexOf("HTTP/") - 1);
- } else {
- temp = "index.html";
- }
- if (temp.contains("/")) {
- temp = temp.replace("/", "\\");
- }
- return temp;
- }
- private static int getFileType(String input) {
- int fileType = 0;
- if (input.contains(".html")) {
- fileType = 1;
- } else if (input.contains(".css")) {
- fileType = 2;
- } else if (input.contains(".js")) {
- fileType = 3;
- } else if (input.contains(".png")) {
- fileType = 4;
- } else if (input.contains(".jpg") || input.contains(".jpeg")) {
- fileType = 5;
- } else if (input.contains(".gif")) {
- fileType = 6;
- } else if (input.contains(".ico")) {
- fileType = 7;
- }
- return fileType;
- }
- private static boolean searchFile(String input) {
- File dir;
- int fileType = getFileType(input);
- File[] files;
- List<File> retFiles = new ArrayList<>();
- if (fileType == 1) {
- dir = new File(continutPath);
- files = dir.listFiles();
- for (File file : files) {
- if (file.getName().contains(".html")) {
- retFiles.add(file);
- }
- }
- } else if (fileType == 2) {
- dir = new File(continutPath + "\\css\\");
- files = dir.listFiles();
- for (File file : files) {
- if (file.getName().contains(".css")) {
- retFiles.add(file);
- }
- }
- } else if (fileType == 3) {
- dir = new File(continutPath + "\\js\\");
- files = dir.listFiles();
- for (File file : files) {
- if (file.getName().contains(".js")) {
- retFiles.add(file);
- }
- }
- } else if (fileType == 4 || fileType == 5 || fileType == 6 || fileType == 7) {
- dir = new File(continutPath + "\\imagini\\");
- files = dir.listFiles();
- for (File file : files) {
- if (file.getName().contains(".jpeg") || file.getName().contains(".jpg")
- || file.getName().contains(".gif") || file.getName().contains(".ico")
- || file.getName().contains(".png")) {
- retFiles.add(file);
- }
- }
- }
- boolean found = false;
- for (File file : retFiles) {
- if (!input.equals("index.html")) {
- String tempReqFile = input.substring(input.lastIndexOf('\\') + 1, input.length());
- if (file.getName().equals(tempReqFile)) found = true;
- }
- else found = true;
- }
- return found;
- }
- private static byte[] createResponse(boolean flag ,String path,String contentType) throws IOException
- {
- String response="", status="",length,type,server, CRLF,messageBody;
- int filetype=getFileType(path);
- if(filetype!=0)
- {
- byte[] imgFile=extractBytes(path);
- int messageLength=imgFile.length;
- status="HTTP:/1.1 200 OK\r\n";
- length="Content-Length:"+messageLength+"\r\n";
- type=contentType+"\r\n";
- server="Server:IBI\r\n";
- CRLF="\r\n";
- response=status+length+type+server+CRLF;
- byte[] byteReturn=new byte[response.getBytes().length+imgFile.length];
- System.arraycopy(response.getBytes(), 0, byteReturn, 0, response.getBytes().length);
- System.arraycopy(imgFile, 0, byteReturn, response.getBytes().length, imgFile.length);
- return byteReturn;
- }
- else
- {
- status="HTTP/1.1 404 Not Found\r\n";
- messageBody="<html><body><h1>Pagina ceruta nu exista sau este indisponibila!</h1></body></html>";
- length="Content-Length:"+messageBody.length()+"\r\n";
- type="Content-Type:text/html; charset=UTF-8\r\n";
- server="Server:IBI\r\n";
- CRLF="\r\n";
- response=status+length+type+server+CRLF+messageBody;
- }
- System.out.println(status);
- return response.getBytes();
- }
- private static byte[] extractBytes (String input) throws IOException {
- File file = new File(input);
- byte[] fileContent = Files.readAllBytes(file.toPath());
- return fileContent;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement