Advertisement
MikecIT

rokijev

Nov 25th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.43 KB | None | 0 0
  1. package app;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.io.PrintWriter;
  9. import java.net.ServerSocket;
  10. import java.net.Socket;
  11. import java.net.URLDecoder;
  12. import java.util.ArrayList;
  13.  
  14.  
  15. public class Server {
  16.    
  17.     public static final int TCP_PORT = 12312;
  18.     public static final String[] GRADOVI = {
  19.         "Beograd",
  20.         "Novi Sad",
  21.         "Niš",
  22.         "Subotica",
  23.         "Kragujevac"
  24.     };
  25.     public static ArrayList<Klub> klubovi = new ArrayList<Klub>();
  26.     public static int izmenaIndex = -1;
  27.  
  28.     public static void main(String[] args) {
  29.         ServerSocket ss = null;
  30.         try {
  31.             ss = new ServerSocket(TCP_PORT);
  32.            
  33.             while (true) {
  34.                 Socket sock = ss.accept();
  35.                 PrintWriter out = new PrintWriter(new OutputStreamWriter(
  36.                         sock.getOutputStream(), "UTF8"));
  37.                 BufferedReader in = new BufferedReader(new InputStreamReader(
  38.                         sock.getInputStream(), "UTF8"));
  39.                
  40.                 String request = in.readLine();
  41.                 String userAgent = "";
  42.                 String line;
  43.                
  44.                 while(!(line = in.readLine()).equals("")) {
  45.                     if(line.contains("User-Agent")) {
  46.                         userAgent = line;
  47.                         break;
  48.                     }  
  49.                 }
  50.                
  51.                 String[] httpReq = request.split(" ");
  52.                
  53.                 if(httpReq.length != 3) {
  54.                     sock.close();
  55.                     continue;
  56.                 }
  57.                
  58.                 if(!httpReq[0].equals("GET")) {
  59.                     sock.close();
  60.                     continue;
  61.                 }
  62.                
  63.                
  64.                 String url = httpReq[1];
  65.                 url = URLDecoder.decode(url, "UTF8");
  66.                 String[] queryParams = url.split("\\?");
  67.  
  68.                 String route = queryParams[0].substring(1); // izbacuje / sa pocetka string-a
  69.                
  70.                 if(!route.equals("")) {
  71.                     if(userAgent.contains("Trident")) {
  72.                         out.println("HTTP/1.0 200 OK");
  73.                         out.println("Content-Type: text/html; charset=utf-8");
  74.                         out.println();
  75.                         out.println("<html><head><meta charset=\"utf-8\"><title>IE</title></head>");
  76.                         out.println("<body><p align=\"center\" style=\"color: red;\">Aplikacija ne podržava vaš "
  77.                                 + "trenutni internet pregledač.</p></body></html>");
  78.                         out.println();
  79.                         out.flush();
  80.                     }
  81.                 }
  82.                
  83.                 switch (route) {
  84.                     case "":
  85.                         httpHome(out);
  86.                         break;
  87.                     case "klubovi":
  88.                         if (queryParams.length < 2) {
  89.                             sock.close();
  90.                             continue;
  91.                         }
  92.                         else
  93.                             httpKlubovi(out, queryParams[1].split("&"));
  94.                         break;
  95.                     case "izmena":
  96.                         httpIzmena(out, queryParams[1].split("&"));
  97.                         break;
  98.                     case "vodeci":
  99.                         httpVodeci(out);
  100.                         break;
  101.                     default:
  102.                         httpNotFound(out, route);
  103.                         break;
  104.                 }
  105.                 sock.close();
  106.                
  107.             }
  108.         } catch (Exception ex) {
  109.             ex.printStackTrace();
  110.         }
  111.         finally {
  112.             if (ss != null)
  113.                 try {
  114.                     ss.close();
  115.                 } catch (IOException e) {
  116.                     e.printStackTrace();
  117.                 }
  118.         }
  119.     }
  120.    
  121.     public static void httpNotFound(PrintWriter out, String route) {
  122.         out.println("HTTP/1.0 404 Not Found");
  123.         out.println("Content-Type: text");
  124.         out.println();
  125.         out.println("Url not found.");
  126.         out.println();
  127.         out.flush();
  128.     }
  129.    
  130.     public static void httpKlubovi(PrintWriter out, String[] args) {
  131.         String arg1 = "";
  132.         String arg2 = "";
  133.         boolean aktivan = false;
  134.         boolean bodoviInd = false;
  135.        
  136.         if (args.length < 2 && args.length > 3)
  137.         {
  138.             out.println("HTTP/1.0 400 Bad Request");
  139.             out.println("Content-Type: text");
  140.             out.println();
  141.             out.println("Not valid argument length.");
  142.             out.println();
  143.             out.flush();
  144.             return;
  145.         }
  146.        
  147.         String[] argVal = args[0].split("=");
  148.         if(argVal[0].equals("klub")) {
  149.             bodoviInd = true;
  150.         }
  151.        
  152.         if(argVal[0].equals("naziv") || argVal[0].equals("klub")) {
  153.             arg1 = argVal[1];
  154.         }
  155.         else {
  156.             arg1 = null;
  157.         }
  158.        
  159.         argVal = args[1].split("=");
  160.         if(argVal[0].equals("gradovi") || argVal[0].equals("bodovi")) {
  161.             arg2 = argVal[1];
  162.         }
  163.         else {
  164.             arg2 = null;
  165.         }
  166.        
  167.         if (args.length == 2) {
  168.             aktivan = false;
  169.         }
  170.         else {
  171.             argVal = args[2].split("=");
  172.             if(argVal[0].equals("aktivan")) {
  173.                 aktivan = true;
  174.             }
  175.         }
  176.        
  177.         if (arg1 == null || arg2 == null)
  178.         {
  179.             out.println("HTTP/1.0 400 Bad Argument");
  180.             out.println("Content-Type: text");
  181.             out.println();
  182.             out.println("Not valid arguments.");
  183.             out.println();
  184.             out.flush();
  185.             return;
  186.         }
  187.        
  188.         if(izmenaIndex != -1) {
  189.             klubovi.get(izmenaIndex).setNaziv(arg1);
  190.             klubovi.get(izmenaIndex).setGrad(arg2);
  191.             klubovi.get(izmenaIndex).setAktivan(aktivan);
  192.             izmenaIndex = -1;
  193.         }
  194.         else {
  195.             if(!bodoviInd)
  196.                 klubovi.add(new Klub(arg1, arg2, aktivan));
  197.             else {
  198.                 for(Klub k : klubovi) {
  199.                     if(k.getKlubGrad().equals(arg1)) {
  200.                         k.setBrojBodova(Integer.parseInt(arg2));
  201.                         break;
  202.                     }
  203.                 }
  204.             }
  205.         }
  206.        
  207.         out.println("HTTP/1.0 200 OK");
  208.         out.println("Content-Type: text/html; charset=utf-8");
  209.         out.println();
  210.         out.println("<html><head><meta charset=\"utf-8\">");
  211.         out.println("<title>Prikaz klubova</title></head><body>");
  212.         out.println("<div align=\"center\">");
  213.         out.println("<h1 style=\"color: blue;\"><b>Tabela</b></h1>");
  214.         out.println("<table border=1>");
  215.         out.println("<tr><th>#</th><th>Klub</th><th>Bodovi</th><th>Akcije</th></tr>");
  216.         for(int i = 0; i < klubovi.size(); i++) {
  217.             out.println(String.format("<tr><td>%d</td>%s<td><a href=\"http://127.0.0.1:12312/izmena?klub=%d\">"
  218.                     + "Izmena podataka</a></td></tr>",
  219.                     i + 1, klubovi.get(i).getHTMLTableRow(), i));
  220.         }
  221.         out.println("</table>");
  222.         out.println("<a href=\"http://127.0.0.1:" + TCP_PORT + "\">Dodaj novi klub</a><br/><br/>");
  223.         out.println("<a href=\"http://127.0.0.1:" + TCP_PORT + "/vodeci\">Prikaži vodeći klub</a>");
  224.         out.println("<h1 style=\"color: blue;\"><b>Upis bodova</b></h1>");
  225.         out.println("<br/><form accept-charset=\"UTF-8\" action=\"http://127.0.0.1:" + TCP_PORT + "/klubovi\" method=\"GET\">");
  226.         out.println("<table><tr><td>Klub</td><td><select name=\"klub\">");
  227.        
  228.         String bodovi = "";
  229.         for(Klub k : klubovi) {
  230.             out.println("<option value=\"" + k.getKlubGrad() + "\"");
  231.             if(k.getKlubGrad().equals(arg1)) {
  232.                 out.println("selected");
  233.                 bodovi = arg2;
  234.             }
  235.             out.println(">" + k.getKlubGrad() + "</option>");
  236.         }
  237.         out.println("</select></td></tr><tr><td>Bodovi</td><td><input type=\"text\""
  238.                 + " value=\"" + bodovi + "\" name=\"bodovi\"</td></tr>");
  239.         out.println("<tr><td></td><td><input type=\"submit\" value=\"Unesi\"</td></tr></table></form>");
  240.         out.println("</div>");
  241.         out.println();
  242.        
  243.         out.flush();
  244.     }
  245.    
  246.     public static void httpHome(PrintWriter out) {
  247.         try {
  248.             BufferedReader in = new BufferedReader(new FileReader("html/registracija.html"));
  249.             String str;
  250.             out.println("HTTP/1.0 200 OK");
  251.             out.println("Content-Type: text/html; charset=utf-8");
  252.             out.println();
  253.             while ((str = in.readLine()) != null) {
  254.                 out.println(str);
  255.             }
  256.             in.close();
  257.             out.println();
  258.             out.flush();
  259.         } catch (IOException e) {
  260.             e.printStackTrace();
  261.         }
  262.     }
  263.    
  264.     public static void httpVodeci(PrintWriter out) {
  265.         String vodeci = "";
  266.         int bodovi = 0;
  267.         for(Klub k : klubovi) {
  268.             if (bodovi < k.getBrojBodova()) {
  269.                 bodovi = k.getBrojBodova();
  270.                 vodeci = k.getKlubGrad();
  271.             }
  272.         }
  273.         out.println("HTTP/1.0 200 OK");
  274.         out.println("Content-Type: text/html; charset=utf-8");
  275.         out.println();
  276.         out.println("<html><head><meta charset=\"utf-8\">");
  277.         out.println("<title>Vodeci klub</title></head><body>");
  278.         out.println("<p align=\"center\" style=\"font-size: 30;\">Trenutno vodeći klub: <b>" + vodeci + "</b></p>");
  279.         out.println("</body></html>");
  280.        
  281.         out.flush();
  282.     }
  283.    
  284.     public static void httpIzmena(PrintWriter out, String[] args) {
  285.         if(args.length != 1) {
  286.             out.println("HTTP/1.0 400 Bad Request");
  287.             out.println("Content-Type: text");
  288.             out.println();
  289.             out.println("Not valid argument length.");
  290.             out.println();
  291.             out.flush();
  292.             return;
  293.         }
  294.         int index = -1;
  295.         String[] argVal = args[0].split("=");
  296.         if(argVal[0].equals("klub")) {
  297.             index = Integer.parseInt(argVal[1]);
  298.         }
  299.        
  300.         if(index == -1) {
  301.             out.println("HTTP/1.0 400 Bad Argument");
  302.             out.println("Content-Type: text");
  303.             out.println();
  304.             out.println("Not valid argument.");
  305.             out.println();
  306.             out.flush();
  307.             return;
  308.         }
  309.        
  310.         izmenaIndex = index;
  311.         Klub izabran = klubovi.get(izmenaIndex);
  312.        
  313.         out.println("HTTP/1.0 200 OK");
  314.         out.println("Content-Type: text/html; charset=utf-8");
  315.         out.println();
  316.         out.println("<html><head><meta charset=\"utf-8\">");
  317.         out.println("<title>Izmena podataka</title></head><body>");
  318.         out.println("<div align=\"center\"><h1 style=\"color: green;\">Izmena podataka</h1>");
  319.         out.println("<br/><form accept-charset=\"UTF-8\" action=\"http://127.0.0.1:12312/klubovi\"><table><tr><td>Naziv</td><td><input type=\"text\"");
  320.         out.println("value=\"" + izabran.getNaziv() + "\" name=\"naziv\"></td></tr>");
  321.         out.println("<tr><td>Grad</td><td><select name=\"gradovi\">");
  322.         for(String grad : GRADOVI) {
  323.             out.println("<option value=\"" + grad + "\"");
  324.             if (grad.equals(izabran.getGrad())) {
  325.                 out.println("selected");
  326.             }
  327.             out.println(">" + grad + "</option>");
  328.         }
  329.         out.println("</select></td></tr><tr><td>Aktivan</td><td><input name=\"aktivan\" type=\"checkbox\"");
  330.         if (izabran.isAktivan())
  331.             out.println("checked");
  332.        
  333.         out.println("></td></tr><tr><td></td><td><input type=\"submit\" value=\"Izmeni\">");
  334.         out.println("</td></tr/></table></form></body></html>");
  335.         out.flush();
  336.     }
  337. }
  338.  
  339. /*
  340. <!DOCTYPE html>
  341. <html>
  342.     <head>
  343.         <meta charset="UTF-8">
  344.         <title>Registracija klubova</title>
  345.     </head>
  346.     <body>
  347.         <div align="center">
  348.             <h1 style="color: red">
  349.                 <b>Unos novog kluba</b>
  350.             </h1>
  351.             <br/>
  352.             <form method="GET" action="http://127.0.0.1:12312/klubovi" accept-charset="UTF-8">
  353.                 <table>
  354.                     <tr>
  355.                         <td>Naziv </td>
  356.                         <td><input type="text" name="naziv"/></td>
  357.                     </tr>
  358.                     <tr>
  359.                         <td>Grad </td>
  360.                         <td>
  361.                             <select name="gradovi">
  362.                                 <option value="Beograd">Beograd</option>
  363.                                 <option value="Novi Sad">Novi sad</option>
  364.                                 <option value="Niš">Niš</option>
  365.                                 <option value="Subotica">Subotica</option>
  366.                                 <option value="Kragujevac">Kragujevac</option>
  367.                             </select>
  368.                         </td>
  369.                     </tr>
  370.                     <tr>
  371.                         <td>Aktivan </td>
  372.                         <td><input type="checkbox" name="aktivan"/></td>
  373.                     </tr>
  374.                     <tr>
  375.                         <td></td>
  376.                         <td><input type="submit" value="Dodaj"></td>
  377.                     </tr>
  378.                 </table>
  379.             </form>
  380.         </div>
  381.     </body>
  382. </html>
  383. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement