Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.12 KB | None | 0 0
  1. import java.io.*;
  2. import java.net.*;
  3. import java.nio.file.Files;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6.  
  7. public class ServerWeb {
  8. public static final String continutPath = "D:\\SCOALA\\PW\\Laborator6\\proiect1-IureaBogdan\\continut\\";
  9. public static int connectedUsers = 0;
  10.  
  11. public static void main(String[] args) throws IOException {
  12. System.out.println("#########################################################################");
  13. System.out.println("Serverul asculta potentiali clienti.");
  14. // pornește un server pe portul 5678
  15. ServerSocket serverSocket = new ServerSocket(5678);
  16. while (true) {
  17. Socket clientSocket = serverSocket.accept();
  18. connectedUsers++;
  19. System.out.println("###CLIENT NOU###");
  20. // socketWriter - wrapper peste fluxul de ieșire folosit pentru a transmite date
  21. // clientului
  22. // PrintWriter socketWriter = new PrintWriter(clientSocket.getOutputStream(),
  23. // true);
  24.  
  25. // socketReader - wrapper peste fluxul de intrare folosit pentru a primi date de
  26. // la client
  27. BufferedReader socketReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  28. // este citită prima linie de text din cerere
  29. String linieDeStart = socketReader.readLine();
  30. System.out.println("##### " + linieDeStart + " #####");
  31. // mesajul citit este transmis la client
  32. // interpretarea sirului de caractere `linieDeStart` pentru a extrage numele resursei cerut
  33. String requestedFile = StringRequestInterpretter(linieDeStart);
  34. boolean isFound = searchFile(requestedFile);
  35.  
  36. // trimiterea răspunsului HTTP
  37. String path = continutPath + requestedFile;
  38. String contentType = "";
  39. switch (getFileType(linieDeStart)) {
  40. case 1:
  41. contentType = "Content-Type:text/html; charset=UTF-8";
  42. break;
  43. case 2:
  44. contentType = "Content-Type:text/css";
  45. break;
  46. case 3:
  47. contentType = "Content-Type:application/js";
  48. break;
  49. case 4:
  50. contentType = "Content-Type:text/png";
  51. break;
  52. case 5:
  53. contentType = "Content-Type:text/jpeg";
  54. break;
  55. case 6:
  56. contentType = "Content-Type:text/gif";
  57. break;
  58. case 7:
  59. contentType = "Content-Type:image/x-icon";
  60. break;
  61. }
  62. byte[] response = createResponse(isFound, path, contentType);
  63. clientSocket.getOutputStream().write(response);
  64.  
  65. // închide conexiunea cu clientul
  66. // la apelul metodei close() se închid automat fluxurile de intrare și ieșire
  67. // (socketReader și socketWriter)
  68.  
  69. clientSocket.close();
  70.  
  71. //conditie pusa doar ca serverul sa dea eroare la 30 de cereri ca apoi sa se inchida
  72. if (connectedUsers > 30)
  73. serverSocket.close();
  74. }
  75. }
  76.  
  77. private static String StringRequestInterpretter(String input) {
  78. int nrOfSl = 0;
  79. for (int i = 0; i < input.length(); i++) {
  80. if (input.charAt(i) == '/') {
  81. nrOfSl++;
  82. }
  83. }
  84. String temp = "";
  85. if (nrOfSl >= 2) {
  86. temp = input.substring(input.indexOf("/") + 1, input.indexOf("HTTP/") - 1);
  87. } else {
  88. temp = "index.html";
  89. }
  90. if (temp.contains("/")) {
  91. temp = temp.replace("/", "\\");
  92. }
  93. return temp;
  94. }
  95.  
  96. private static int getFileType(String input) {
  97. int fileType = 0;
  98. if (input.contains(".html")) {
  99. fileType = 1;
  100. } else if (input.contains(".css")) {
  101. fileType = 2;
  102. } else if (input.contains(".js")) {
  103. fileType = 3;
  104. } else if (input.contains(".png")) {
  105. fileType = 4;
  106. } else if (input.contains(".jpg") || input.contains(".jpeg")) {
  107. fileType = 5;
  108. } else if (input.contains(".gif")) {
  109. fileType = 6;
  110. } else if (input.contains(".ico")) {
  111. fileType = 7;
  112. }
  113. return fileType;
  114. }
  115.  
  116. private static boolean searchFile(String input) {
  117. File dir;
  118. int fileType = getFileType(input);
  119. File[] files;
  120. List<File> retFiles = new ArrayList<>();
  121. if (fileType == 1) {
  122. dir = new File(continutPath);
  123. files = dir.listFiles();
  124. for (File file : files) {
  125. if (file.getName().contains(".html")) {
  126. retFiles.add(file);
  127. }
  128. }
  129. } else if (fileType == 2) {
  130. dir = new File(continutPath + "\\css\\");
  131. files = dir.listFiles();
  132. for (File file : files) {
  133. if (file.getName().contains(".css")) {
  134. retFiles.add(file);
  135. }
  136. }
  137. } else if (fileType == 3) {
  138. dir = new File(continutPath + "\\js\\");
  139. files = dir.listFiles();
  140. for (File file : files) {
  141. if (file.getName().contains(".js")) {
  142. retFiles.add(file);
  143. }
  144. }
  145. } else if (fileType == 4 || fileType == 5 || fileType == 6 || fileType == 7) {
  146. dir = new File(continutPath + "\\imagini\\");
  147. files = dir.listFiles();
  148. for (File file : files) {
  149. if (file.getName().contains(".jpeg") || file.getName().contains(".jpg")
  150. || file.getName().contains(".gif") || file.getName().contains(".ico")
  151. || file.getName().contains(".png")) {
  152. retFiles.add(file);
  153. }
  154. }
  155. }
  156. boolean found = false;
  157. for (File file : retFiles) {
  158. if (!input.equals("index.html")) {
  159. String tempReqFile = input.substring(input.lastIndexOf('\\') + 1, input.length());
  160. if (file.getName().equals(tempReqFile)) found = true;
  161. }
  162. else found = true;
  163. }
  164. return found;
  165. }
  166.  
  167. private static byte[] createResponse(boolean flag ,String path,String contentType) throws IOException
  168. {
  169. String response="", status="",length,type,server, CRLF,messageBody;
  170. int filetype=getFileType(path);
  171. if(filetype!=0)
  172. {
  173. byte[] imgFile=extractBytes(path);
  174. int messageLength=imgFile.length;
  175. status="HTTP:/1.1 200 OK\r\n";
  176. length="Content-Length:"+messageLength+"\r\n";
  177. type=contentType+"\r\n";
  178. server="Server:IBI\r\n";
  179. CRLF="\r\n";
  180. response=status+length+type+server+CRLF;
  181. byte[] byteReturn=new byte[response.getBytes().length+imgFile.length];
  182. System.arraycopy(response.getBytes(), 0, byteReturn, 0, response.getBytes().length);
  183. System.arraycopy(imgFile, 0, byteReturn, response.getBytes().length, imgFile.length);
  184. return byteReturn;
  185. }
  186. else
  187. {
  188. status="HTTP/1.1 404 Not Found\r\n";
  189. messageBody="<html><body><h1>Pagina ceruta nu exista sau este indisponibila!</h1></body></html>";
  190. length="Content-Length:"+messageBody.length()+"\r\n";
  191. type="Content-Type:text/html; charset=UTF-8\r\n";
  192. server="Server:IBI\r\n";
  193. CRLF="\r\n";
  194. response=status+length+type+server+CRLF+messageBody;
  195. }
  196. System.out.println(status);
  197. return response.getBytes();
  198. }
  199.  
  200. private static byte[] extractBytes (String input) throws IOException {
  201. File file = new File(input);
  202. byte[] fileContent = Files.readAllBytes(file.toPath());
  203. return fileContent;
  204. }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement