Java и web-приложение [закрыт]

85
11 декабря 2020, 23:10
Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

Закрыт 1 год назад.

Улучшить вопрос

Около полугода учу java, на данный момент довольно неплохо знаю core, перерешал кучу задач и написал одного вк бота. И сейчас загорелся идеей сделать свое web-приложение (сайт с редактированием картинок). Так вот хотелось бы узнать, с помощью каких технологии сейчас реализуют web-проекты? Что мне нужно изучать, чтобы создать свое web-приложение? Как мне научиться правильно планировать структуру своего проекта? Свободного времени у меня много и я хочу полностью посвятить себя java.

Answer 1

Конечно Java EE и Spring это круто, но сейчас пошла такая тенденция, использования фреймворков в слепую. Рынок набит джунами которые размахивают своим спрингом, как работает cors или или http толком ответить не могут.

В качестве учебных целей полезно написать свое первое веб приложение на core java, я не говорю что нужно пытаться учесть все особенности типа аутентификации или сессий, хотя и это посильная задача.

После этого, вооружившись спрингом или JavaEE вы уже будете понимать что Вам нужно сделать на более глубоком уровне, вы будете понимать что делает фреймворк, а не просто в слепую набивать код кусками найденными в интернете, и тем более будет мотивация использовать фреймворк, а главное, я надеюсь, будет понимание, когда его можно вовсе не использовать :)

В общем случае полезно знать веб технологии, в которых достаточно много тонкостей, не имеющих отношения к языку программирования, на котором реализуется веб приложение.

Крайне полезно понимать что ждет от сервера фронтенд, по этому в этот лес тоже стоит заглянуть и отныне html js и css (как минимум) - Ваши заклятые друзья.

Вот простенький пример:

index.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Kali fractal</title> 
</head> 
<body> 
    <canvas></canvas> 
 
    <script type='glsl/vertex'> 
      attribute vec2 coords; 
      void main(void) { 
        gl_Position = vec4(coords.xy, 0.0, 1.0); 
      } 
    </script> 
 
    <script type='glsl/fragment'>precision highp float; 
       uniform vec4 mr; // (m)ouse position and screen (r)esolution 
       void main(void) { 
         vec2 p = gl_FragCoord.xy; 
         vec2 q = (p + p - mr.ba) / mr.b; 
         for(int i = 0; i < 13; i++) 
              q = abs(q)/dot(q,q) -  mr.xy/mr.zw; 
         gl_FragColor = vec4(q, q.x/q.y, 1.0); 
       } 
    </script> 
 
    <script> 
      let canvas = document.querySelector('canvas'); 
      canvas.width = window.innerWidth; 
      canvas.height = window.innerHeight; 
      let gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); 
      var h = gl.drawingBufferHeight; 
      var w = gl.drawingBufferWidth; 
 
      let pid = gl.createProgram(); 
      shader('glsl/vertex', gl.VERTEX_SHADER); 
      shader('glsl/fragment', gl.FRAGMENT_SHADER); 
      gl.linkProgram(pid); 
      gl.useProgram(pid); 
 
      let array = new Float32Array([-1,  3, -1, -1, 3, -1]); 
      gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer()); 
      gl.bufferData(gl.ARRAY_BUFFER, array, gl.STATIC_DRAW); 
 
      let al = gl.getAttribLocation(pid, "coords"); 
      gl.vertexAttribPointer(al, 2 /*components per vertex */, gl.FLOAT, false, 0, 0); 
      gl.enableVertexAttribArray(al); 
 
      let mr = gl.getUniformLocation(pid, 'mr');  // (m)ouse position and screen (r)esolution 
 
      window.addEventListener('mousemove', draw); 
      window.addEventListener('touchmove', draw); 
 
      draw(); 
 
      function draw(e) { 
        let ev = e && e.touches ? e.touches[0] : e; 
        let x = ev ? ev.clientX : 250; 
        let y = ev ? h - ev.clientY: 111; 
        gl.uniform4f(mr, x, y, w, h); 
        gl.viewport(0, 0, w, h); 
        gl.clearColor(0, 0, 0, 0); 
        gl.drawArrays(gl.TRIANGLES, 0, 3 /* 3 vertices */); 
      } 
 
      function shader(name, type) { 
        let src = [...document.scripts].find(s => s.type === name).innerText; 
        let sid = gl.createShader(type); 
        gl.shaderSource(sid, src); 
        gl.compileShader(sid); 
        gl.attachShader(pid, sid); 
      } 
    </script> 
 
    <style> 
      body { 
        margin: 0; 
        overflow: hidden; 
      } 
    </style> 
</body> 
</html>

SimpleWebServer.java

import com.sun.net.httpserver.HttpExchange; 
import com.sun.net.httpserver.HttpHandler; 
import com.sun.net.httpserver.HttpServer; 
 
import java.io.ByteArrayOutputStream; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.PrintWriter; 
import java.io.StringWriter; 
import java.net.InetSocketAddress; 
import java.util.HashMap; 
import java.util.Map; 
 
public class SimpleWebServer implements HttpHandler { 
 
    public static void main(String[] args) throws IOException { 
        HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); 
        server.createContext("/", new SimpleWebServer("/", "./static/")); 
        server.start(); 
        System.out.println("server started, please visit http://localhost:8080/index.html"); 
    } 
 
    private String routePath; 
    private String fsPath; 
 
    private Map<String, String> headers = new HashMap<String, String>(){{ 
        put("html", "text/html"); 
    }}; 
 
    public SimpleWebServer(String path, String filesystemPath) { 
        routePath = path; 
        fsPath = filesystemPath; 
    } 
 
    @Override 
    public void handle(HttpExchange http) throws IOException { 
        OutputStream outputStream = http.getResponseBody(); 
        http.getRequestBody(); 
        String request = http.getRequestURI().getRawPath(); 
        byte[] result; 
        int code; 
        try { 
            try { 
                String path = fsPath + request.substring(routePath.length()); 
                System.out.println("requested: " + path); 
                result = read(new FileInputStream(path)).toByteArray(); 
                String ext = request.substring(request.lastIndexOf(".") + 1); 
                if (headers.containsKey(ext)) 
                    http.getResponseHeaders().add("Content-Type", headers.get(ext)); 
                code = 200; 
            } catch (IOException e) { 
                result = (404 + " " + request).getBytes(); 
                code = 404; 
            } 
        } catch (Exception e) { 
            StringWriter sw = new StringWriter(); 
            e.printStackTrace(new PrintWriter(sw)); 
            result = sw.getBuffer().toString().getBytes(); 
            code = 500; 
        } 
        http.sendResponseHeaders(code, result.length); 
        outputStream.write(result); 
        outputStream.close(); 
    } 
 
    static ByteArrayOutputStream read(InputStream is) throws IOException { 
        ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
        int nRead; 
        byte[] data = new byte[1024]; 
        while ((nRead = is.read(data, 0, data.length)) != -1) { 
            buffer.write(data, 0, nRead); 
        } 
        buffer.flush(); 
        is.close(); 
        return buffer; 
    } 
}

Answer 2

более/менее универсальный (и несложный) ответ/совет:

Сборщик/менеджер зависимостей (Maven или Gradle), Фреймворк (SpringBoot), БД (PostgreSQL или MySQL) + SpringData и Hibernate, контейнер для выполнения java кода (Tomcat), Logger (Log4j), Тестирование (JUnit + Mockito)

кроме этого (позже) пригодится nginx и Linux Server (например Debian) - это чтобы уже написанное приложение в интернете крутилось

P.S. Могут быть вариации

READ ALSO
Здравствуйте. Нужна помощь по заданию с использованием библиотеки jQuery

Здравствуйте. Нужна помощь по заданию с использованием библиотеки jQuery

1Покрасить имя людей в зависимости от пола в розовый или голубой цвет

120
Помощь с использованием библиотеки jQuery

Помощь с использованием библиотеки jQuery

задание - После имени человека Добавить

98
Слайдеры на весь экран

Слайдеры на весь экран

Всем привет! Хотелось узнать какие сейчас самые лучшие полноэкранные слайдеры для содержания контента сайта и перемещения по немуНапример...

134