Веб-приложение Clojure - где я запускаю?

Если Вы думаете, что URL не могут содержать код, думайте снова!

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

Read, что, и плачут.

Вот то, как мы делаем это на Переполнении стека:

/// 
/// returns "safe" URL, stripping anything outside normal charsets for URL
/// 
public static string SanitizeUrl(string url)
{
    return Regex.Replace(url, @"[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]", "");
}

21
задан Sasha Chedygov 6 December 2012 в 23:07
поделиться

5 ответов

Я бы рекомендовал вам начать с изучения Servlet-API , который поддерживает все, что связано с HTTP-запросами и ответами в мире Java. HttpServletRequest и HttpServletResponse охватывают очень много вопросов. Причал - хороший выбор здесь; есть хорошее введение о Clojure и Jetty на http://robert.zubek.net/blog/2008/04/26/clojure-web-server/ (с использованием Jetty 6).

Это значит Как сказал, базовая модель Compojure также довольно низкоуровневая: она просто обертывает запросы и ответы в Clojure-datastructures, но вы по-прежнему несете ответственность за всю маршрутизацию, генерируя правильные коды ответов. создание ETag и т. д., который иногда является более низкоуровневым материалом, чем с LAMP-стеком.

но вы по-прежнему несете ответственность за всю маршрутизацию, генерируя правильные коды ответа. создание ETag и т. д., что иногда является более низкоуровневым материалом, чем с LAMP-стеком.

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

17
ответ дан 29 November 2019 в 21:06
поделиться

Если вы не хотите использовать Compojure или другие, вам нужно либо загрузить веб-сервер и вызвать свой JAR-файл, либо написать веб-сервер с использованием сокетов. В этом смысле вы можете следовать любому из множества руководств в Интернете по настройке, а скомпилировать JAR

Это похоже на то, что вам нужно.

3
ответ дан 29 November 2019 в 21:06
поделиться

Одна вещь, которую следует отметить, если вы собираетесь использовать FastCGI, это то, что java не похож на другие языки сценариев, есть время запуска для запуска JVM, в отличие, скажем, от ruby ​​или python. И запускать JVM для каждого запроса - сложная операция.

Если я правильно понял ваш вопрос, вы ищете собственный Java-способ для создания приложений. Если это так, то compojure делает именно то, что создает сервлет для вас за кулисами, так что в конце вы можете создать веб-приложение clojure, точно такое же, как в java, и развернуть его на любом сервере приложений.

1
ответ дан 29 November 2019 в 21:06
поделиться

Хорошо, вы можете правильно использовать FastCGI прямо из clojure . FastCGI - довольно простой протокол, поэтому написать сервер на Clojure не должно быть так уж сложно (я сомневаюсь, что есть библиотека для этого для clojure, но вполне может быть такая для Java).

-1
ответ дан 29 November 2019 в 21:06
поделиться

Очень простой способ начать - создать сервлет, работающий на Tomcat или подобном, например:

(ns servlet
((:gen-class :extends javax.servlet.http.HttpServlet))

(defn -doGet
  [_ request response]
  (.setContentType response "text/html")
  (let w (.getWriter response)]
      (.println w
        (str "<html>"
          "<head>"
          "<title>Hello World!</title>"
          "</head>"
          "<body>"
          "<h1>Hello "
          (.getParameter request "Name")
          "</h1>"
          "</body>"
          "</html>"))))

(defn -doPost [_ request response]
  (-doGet nil request response)) 

затем создать web.xml в папке WEB-INF

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">

<display-name>Clojure Servlet</display-name>

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

скомпилируйте и упакуйте это в войну, и он будет вести себя как обычный сервлет Java. Для развертывания на Tomcat просто поместите war в папку webapps и запустите tomcat.

Подробный пример доступен здесь http://github.com/yogthos/clojure-maven-examples

14
ответ дан 29 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: