Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.net.*;
- import java.util.ArrayList;
- import java.util.List;
- import javax.imageio.ImageIO;
- import java.awt.image.BufferedImage;
- 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;
- System.out.println("##############");
- System.out.println(path);
- 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;
- }
- String response = createResponse(isFound, path, contentType);
- clientSocket.getOutputStream().write(response.getBytes());
- // închide conexiunea cu clientul
- // la apelul metodei close() se închid automat fluxurile de intrare și ieșire
- // (socketReader și socketWriter)
- clientSocket.close();
- System.out.println("S-a terminat comunicarea cu clientul.");
- System.out.println();
- System.out.println();
- System.out.println();
- //conditie pusa doar ca sa dea eroare la 30 de accesari ca sa se inchida sv
- 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;
- System.out.println("\n\n#######CAUT FISIER###########");
- for (File file : retFiles) {
- System.out.println("FISIER###" + file.getName() + "#");
- if (!input.equals("index.html")) {
- String tempReqFile = input.substring(input.lastIndexOf('\\') + 1, input.length());
- System.out.println("testez cu ###" + tempReqFile + "###" +file.getName().equals(tempReqFile));
- if (file.getName().equals(tempReqFile)) found = true;
- }
- else found = true;
- }
- System.out.println("########" + found + "##########\n\n");
- return found;
- }
- private static String readFile(String path) {
- File file = new File(path);
- int filetype = getFileType(path);
- String content = "";
- if (filetype == 1 || filetype == 2 || filetype == 3) {
- try (BufferedReader br = new BufferedReader(new FileReader(file))) {
- String line;
- while ((line = br.readLine()) != null) {
- content += line + "\n";
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- } else if (filetype == 4) {
- try
- {
- BufferedImage image = ImageIO.read(file);
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
- else if(filetype==5)
- {
- }
- else if(filetype==6)
- {
- }
- else if(filetype==7)
- {
- }
- return content;
- }
- private static String createResponse(boolean flag ,String path,String contentType)
- {
- String response,CSSlink, status,length,type,server, CRLF,messageBody;
- if(flag){
- messageBody=readFile(path)+"\r\n";
- int messageLength=messageBody.getBytes().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";
- CSSlink="Link: <D:\\SCOALA\\PW\\Laborator6\\proiect1-IureaBogdan\\continut\\css\\stil.css>; rel=stylesheet\r\n";
- response=status+length+CSSlink+type+server+CRLF+messageBody;
- }
- else{
- status="HTTP/1.1 404 Not Found";
- messageBody="ERROR\r\n";
- response=status+messageBody;
- }
- System.out.println(status);
- return response;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement