Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.40 KB | None | 0 0
  1.  
  2. package org.ia.util;
  3.  
  4.  
  5. import java.io.*;
  6. import java.net.Socket;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.StringTokenizer;
  10.  
  11. public class ClientRequest {
  12.  
  13. String method;
  14. String file = null;
  15. String body = null;
  16. Socket connect;
  17. StringBuilder payload;
  18. String contentType;
  19. List<RequestData> requestDataList;
  20.  
  21.  
  22. BufferedReader in = null;
  23. private String protocol;
  24.  
  25.  
  26. public void initReaders() throws IOException {
  27. in = new BufferedReader(new InputStreamReader(connect.getInputStream()));
  28.  
  29. StringBuilder builder = new StringBuilder();
  30. String line;
  31. requestDataList = new ArrayList<>();
  32.  
  33. do
  34. {
  35. line = in.readLine();
  36. if (line.equals("")) break;
  37. //Bygger upp en lång sträng som den sparar. Används för att kunna läsa ut metoden och filen, se nedan.
  38. builder.append(line);
  39. builder.append(System.lineSeparator());
  40.  
  41. //Delar upp en rad i två delar mellan med kolontecken som separator. Det som är till vänster blir
  42. // type det andra blir value. Sparas sedan in som RequestData Objekt i arraylisten requestDataList.
  43. StringTokenizer tokenizer = new StringTokenizer(line, ": ");
  44. if (line.contains(":")) {
  45. String type = tokenizer.nextToken();
  46. String value = tokenizer.nextToken();
  47. requestDataList.add(new RequestData(type, value));
  48.  
  49. }
  50.  
  51. }
  52. while (true);
  53.  
  54.  
  55. StringTokenizer builderParse = new StringTokenizer(builder.toString());
  56. method = builderParse.nextToken().toUpperCase(); // we get the HTTP method of the client
  57. // we get file requested
  58. file = builderParse.nextToken().toLowerCase();
  59. protocol = builderParse.nextToken().toUpperCase();
  60. //Adds method, file and protocol to our requestObjectList
  61. requestDataList.add(0, new RequestData("Method", method));
  62. requestDataList.add(1, new RequestData("File", file));
  63. requestDataList.add(2, new RequestData("Protocol", protocol));
  64.  
  65.  
  66. printRequestObjectList();
  67.  
  68.  
  69. //kollar om det är post och om det finns en body med och kör nedre delen av readPostmetoden
  70. if (isPost() && bodyExists()) {
  71. payload = new StringBuilder();
  72. while(in.ready()){
  73. payload.append((char) in.read());
  74. }
  75.  
  76. if (getPayloadString()!=null && getPayloadString().length()>0) {
  77. requestDataList.add(new RequestData("Body", getPayloadString()));
  78. }
  79. }
  80.  
  81. }
  82.  
  83. public boolean bodyExists() {
  84. return Integer.parseInt(findFirstValueByType("Content-Length").trim()) > 0;
  85. }
  86.  
  87. public void printRequestObjectList() {
  88. for (RequestData r : requestDataList) {
  89. System.out.println(r.toString());
  90. }
  91. }
  92.  
  93. public String findFirstValueByType(String type) {
  94. //TODO: kolla för null
  95. return requestDataList.stream().filter(requestData -> requestData.getType().equals(type)).findFirst().get().getValue();
  96. }
  97.  
  98. public String getContentType() {
  99. return contentType;
  100. }
  101.  
  102. public void setContentType(String contentType) {
  103. this.contentType = contentType;
  104. }
  105.  
  106. public ClientRequest(Socket connect) {
  107. this.connect = connect;
  108. }
  109.  
  110. public void setMethod(String method) {
  111. this.method = method;
  112. }
  113.  
  114. public void setFile(String file) {
  115. this.file = file;
  116. }
  117.  
  118. public String getMethod() {
  119. return method;
  120. }
  121.  
  122. public String getFile() { return file; }
  123.  
  124. public boolean isGet() {
  125. if (method.equals("GET")) {
  126. return true;
  127. } else return false;
  128. }
  129.  
  130. public boolean isHead() {
  131. if (method.equals("HEAD")) {
  132. return true;
  133. } else return false;
  134. }
  135.  
  136. public boolean isGetOrHead() {
  137. return (isHead() || isGet());
  138. }
  139.  
  140. public boolean isGetOrHeadOrPost() { return isGetOrHead() || isPost(); }
  141.  
  142. public boolean isPost() {
  143. if (method.equals("POST")) {
  144. return true;
  145. } else return false;
  146. }
  147.  
  148.  
  149. public String getPayloadString() {
  150. return payload.toString();
  151. }
  152.  
  153. public void close() throws IOException {
  154. in.close();
  155. }
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement