Ошибка «java.io.FileNotFoundException» связана с номером порта 8080, который является функцией patameter - PullRequest
0 голосов
/ 07 декабря 2018

Я практикую учебник Clojure "Основы веб-разработки" http://clojure -doc.org / Articles / Tutorials / basic_web_development.html

В конце концов, я столкнулся с проблемой,Когда я выполняю

$ java -jar target/clojure-webapp-0.1.0-SNAPSHOT-standalone.jar 8080

, происходит ошибка

Exception in thread "main" java.io.FileNotFoundException: 8080 (No such file or directory)

Таким образом, номер порта анализируется как имя файла файла, который не может быть найден.

IЯ не знаком с Java, но я думаю, что ситуация ясна.Номер порта - это типичный параметр функции, а не имя файла.Пожалуйста, объясните мне это и скажите, как это исправить.Подробнее:

s@lokal:~/Dropbox/clojure-webapp$ lein uberjar
Created /home/s/Dropbox/clojure-webapp/target/clojure-webapp-0.1.0-SNAPSHOT.jar
Created /home/s/Dropbox/clojure-webapp/target/clojure-webapp-0.1.0-SNAPSHOT-standalone.jar
s@lokal:~/Dropbox/clojure-webapp$ cat ~/Dropbox/clojure-webapp/src/clojure_webapp/handler.clj 
(ns clojure-webapp.handler
  (:require [clojure-webapp.views :as views]
            [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.adapter.jetty :as jetty]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]])
  (:gen-class))
(defroutes app-routes ; replace the generated app-routes with this
  (GET "/"
       []
       (views/home-page))
  (GET "/add-location"
       []
       (views/add-location-page))
  (POST "/add-location"
        {params :params}
        (views/add-location-results-page params))
  (GET "/location/:loc-id"
       [loc-id]
       (views/location-page loc-id))
  (GET "/all-locations"
       []
       (views/all-locations-page))
  (route/resources "/")
  (route/not-found "Not Found"))

(def app
  (wrap-defaults app-routes site-defaults))


(defn -main
  [& [port]]
  (let [port (Integer. (or port
                           (System/getenv "PORT")
                           5000))]
    (jetty/run-jetty #'app {:port  port
                            :join? false})))
s@lokal:~/Dropbox/clojure-webapp$ java -jar target/clojure-webapp-0.1.0-SNAPSHOT-standalone.jar 8080
Exception in thread "main" java.io.FileNotFoundException: 8080 (No such file or directory)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112)
    at clojure.lang.Compiler.loadFile(Compiler.java:7449)
    at clojure.main$load_script.invokeStatic(main.clj:278)
    at clojure.main$script_opt.invokeStatic(main.clj:338)
    at clojure.main$script_opt.invoke(main.clj:333)
    at clojure.main$main.invokeStatic(main.clj:424)
    at clojure.main$main.doInvoke(main.clj:387)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.lang.Var.applyTo(Var.java:702)
    at clojure.main.main(main.java:37)
s@lokal:~/Dropbox/clojure-webapp$

1 Ответ

0 голосов
/ 07 декабря 2018

Я считаю, что этот урок немного староват.ИМХО, вы все равно можете быть счастливее, если используете пьедестал вместо кольца.Вы можете найти учебник "Hello World" здесь:

У меня есть некоторый рабочий код, который является результатом учебника, который вы можете клонировать изздесь:

git@github.com:cloojure/pedestal-tutorial.git

В окне терминала запустите код с помощью:

> lein run

Затем перейдите в браузере:

http://localhost:8890/echo                   ; demo/test route
http://localhost:8890/greet                  ; generic greeting
http://localhost:8890/greet?name=Bob         ; normal greeting
http://localhost:8890/greet?name=Voldemort   ; unmentionable!

Если выхочу придерживаться Ring / Compojure, другой вариант - Кулинарная книга Clojure, в которой есть примеры.Он доступен как в печатном виде (рекомендуется), так и в Интернете:

Вот еще одна замечательная книга:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...