“java.io.filenotfoundexception”错误,与作为函数参数的端口号8080相关

olmpazwi  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(329)

我正在练习clojure教程“基本web开发”http://clojure-doc.org/articles/tutorials/basic_web_development.html
最后,我面临一个问题。当我执行

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

发生错误

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

因此,端口号被解析为找不到的文件的文件名。
我不熟悉java,但我认为情况很清楚。端口号是一个典型的函数参数,而不是文件名。请给我解释一下,告诉我怎么修。更多详细信息:

  1. s@lokal:~/Dropbox/clojure-webapp$ lein uberjar
  2. Created /home/s/Dropbox/clojure-webapp/target/clojure-webapp-0.1.0-SNAPSHOT.jar
  3. Created /home/s/Dropbox/clojure-webapp/target/clojure-webapp-0.1.0-SNAPSHOT-standalone.jar
  4. s@lokal:~/Dropbox/clojure-webapp$ cat ~/Dropbox/clojure-webapp/src/clojure_webapp/handler.clj
  5. (ns clojure-webapp.handler
  6. (:require [clojure-webapp.views :as views]
  7. [compojure.core :refer :all]
  8. [compojure.route :as route]
  9. [ring.adapter.jetty :as jetty]
  10. [ring.middleware.defaults :refer [wrap-defaults site-defaults]])
  11. (:gen-class))
  12. (defroutes app-routes ; replace the generated app-routes with this
  13. (GET "/"
  14. []
  15. (views/home-page))
  16. (GET "/add-location"
  17. []
  18. (views/add-location-page))
  19. (POST "/add-location"
  20. {params :params}
  21. (views/add-location-results-page params))
  22. (GET "/location/:loc-id"
  23. [loc-id]
  24. (views/location-page loc-id))
  25. (GET "/all-locations"
  26. []
  27. (views/all-locations-page))
  28. (route/resources "/")
  29. (route/not-found "Not Found"))
  30. (def app
  31. (wrap-defaults app-routes site-defaults))
  32. (defn -main
  33. [& [port]]
  34. (let [port (Integer. (or port
  35. (System/getenv "PORT")
  36. 5000))]
  37. (jetty/run-jetty #'app {:port port
  38. :join? false})))
  39. s@lokal:~/Dropbox/clojure-webapp$ java -jar target/clojure-webapp-0.1.0-SNAPSHOT-standalone.jar 8080
  40. Exception in thread "main" java.io.FileNotFoundException: 8080 (No such file or directory)
  41. at java.base/java.io.FileInputStream.open0(Native Method)
  42. at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
  43. at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
  44. at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112)
  45. at clojure.lang.Compiler.loadFile(Compiler.java:7449)
  46. at clojure.main$load_script.invokeStatic(main.clj:278)
  47. at clojure.main$script_opt.invokeStatic(main.clj:338)
  48. at clojure.main$script_opt.invoke(main.clj:333)
  49. at clojure.main$main.invokeStatic(main.clj:424)
  50. at clojure.main$main.doInvoke(main.clj:387)
  51. at clojure.lang.RestFn.applyTo(RestFn.java:137)
  52. at clojure.lang.Var.applyTo(Var.java:702)
  53. at clojure.main.main(main.java:37)
  54. s@lokal:~/Dropbox/clojure-webapp$
nkoocmlb

nkoocmlb1#

我想这个教程有点老了。不管怎样,使用底座而不是戒指你可能会更开心。您可以在此处找到“hello world”教程:
http://pedestal.io/guides/hello-world
我有一些工作代码是教程的结果,您可以从这里克隆:

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

在终端窗口中,通过以下方式启动代码:

  1. > lein run

然后将浏览器导航到:

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

如果你想坚持使用ring/compojure,另一个选择是clojure食谱,它有很多例子。可打印(推荐)或在线获取:
https://github.com/clojure-cookbook/clojure-cookbook/tree/master/07_webapps
下面是另一本好书:
clojure中的web开发

展开查看全部

相关问题