Servlets 为什么我的Racket无状态servlet在每个嵌入式URL中显示这么多信息?

Servlets 为什么我的Racket无状态servlet在每个嵌入式URL中显示这么多信息?,servlets,racket,Servlets,Racket,我一直在关注,同时也在阅读有关写作的文档。我试图简化教程中的示例,同时也遵循Web文档中的建议:“您希望使用无状态servlet来提高可伸缩性” 我的简化示例只是显示了一个数字列表,并允许用户通过输入表单向列表中添加一个数字。到了教程中关于的部分,其中解释了“”机制,我试用了我的示例应用程序,发现添加一个额外的数字是可行的,但是浏览器中显示的嵌入式URL包含大量信息,包括我脚本的完整路径,我更愿意在生产环境中保密。下面是两个URL示例,我的意思是: http://localhost:8080/;

我一直在关注,同时也在阅读有关写作的文档。我试图简化教程中的示例,同时也遵循Web文档中的建议:“您希望使用无状态servlet来提高可伸缩性”

我的简化示例只是显示了一个数字列表,并允许用户通过输入表单向列表中添加一个数字。到了教程中关于的部分,其中解释了“”机制,我试用了我的示例应用程序,发现添加一个额外的数字是可行的,但是浏览器中显示的嵌入式URL包含大量信息,包括我脚本的完整路径,我更愿意在生产环境中保密。下面是两个URL示例,我的意思是:

http://localhost:8080/;(("c"%20.%20"0((3)%203%20(((lib%20%5C"web-server%2Flang%2Fabort-resume.rkt%5C")%20.%20%5C"lifted.3%5C")%20((lib%20%5C"web-server%2Flang%2Fweb-cells.rkt%5C")%20.%20deserialize-info:frame-v0)%20(%23%5C"%2FUsers%2Flogc%2FDocuments%2Fcode%2Fpersonal%2Fracket%2Fapp%2Fservlet.rkt%5C"%20.%20%5C"lifted.142%5C"))%200%20()%20()%20(0%20(1%20(h%20-%20()))%20(c%20(v!%20(2%20(q%201%202%203))%20%23f%20%23f))))"))?number=12
http://localhost:8080/;(("c"%20.%20"0((3)%203%20(((lib%20%5C"web-server%2Flang%2Fabort-resume.rkt%5C")%20.%20%5C"lifted.3%5C")%20((lib%20%5C"web-server%2Flang%2Fweb-cells.rkt%5C")%20.%20deserialize-info:frame-v0)%20(%23%5C"%2FUsers%2Flogc%2FDocuments%2Fcode%2Fpersonal%2Fracket%2Fapp%2Fservlet.rkt%5C"%20.%20%5C"lifted.142%5C"))%200%20()%20()%20(0%20(1%20(h%20-%20()))%20(c%20(v!%20(2%20(c%20(u%20.%20%5C"12%5C")%20q%201%202%203))%20%23f%20%23f))))"))?number=45
以下是我简化教程应用程序的完整代码。我只是将代码分为两个文件,“servlet.rkt”用于保存处理程序函数,“service.rkt”用于启动servlet

发球。rkt

#lang racket
(require "servlet.rkt"
         web-server/servlet-env)

(serve/servlet app
               #:port 8080
               #:stateless? #t
               #:command-line? #t
               #:servlet-path "/")
#lang web-server
(require web-server/http)
(provide interface-version stuffer app)
(define interface-version 'stateless)
(define stuffer
  (stuffer-chain
   serialize-stuffer
   (md5-stuffer (build-path (find-system-path 'home-dir) ".urls"))))

(define CONTENTS
  (list 1 2 3))

(define (app req)
  (render-number-list CONTENTS req))

(define (render-number-list numbers req)
  (define (response-generator embed/url)
    (response/xexpr
      `(html
         (body (h1 "Contents")
               (form
                 ((action ,(embed/url insert-number-handler)))
                 (input  ((name "number")))
                 (input  ((type "submit"))))
               (ul ,@(map render-number numbers))))))
  (define (insert-number-handler req) 
    (render-number-list
      (cons (extract-binding/single 'number (request-bindings req)) numbers)
      req))
  (send/suspend/dispatch response-generator))

(define (render-number number)
  `(li ,(format "~a" number)))
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
racket $DIR/../serve.rkt
servlet.rkt

#lang racket
(require "servlet.rkt"
         web-server/servlet-env)

(serve/servlet app
               #:port 8080
               #:stateless? #t
               #:command-line? #t
               #:servlet-path "/")
#lang web-server
(require web-server/http)
(provide interface-version stuffer app)
(define interface-version 'stateless)
(define stuffer
  (stuffer-chain
   serialize-stuffer
   (md5-stuffer (build-path (find-system-path 'home-dir) ".urls"))))

(define CONTENTS
  (list 1 2 3))

(define (app req)
  (render-number-list CONTENTS req))

(define (render-number-list numbers req)
  (define (response-generator embed/url)
    (response/xexpr
      `(html
         (body (h1 "Contents")
               (form
                 ((action ,(embed/url insert-number-handler)))
                 (input  ((name "number")))
                 (input  ((type "submit"))))
               (ul ,@(map render-number numbers))))))
  (define (insert-number-handler req) 
    (render-number-list
      (cons (extract-binding/single 'number (request-bindings req)) numbers)
      req))
  (send/suspend/dispatch response-generator))

(define (render-number number)
  `(li ,(format "~a" number)))
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
racket $DIR/../serve.rkt
值得一提的是,我使用了一个shell脚本来执行serve.rkt

bin/app

#lang racket
(require "servlet.rkt"
         web-server/servlet-env)

(serve/servlet app
               #:port 8080
               #:stateless? #t
               #:command-line? #t
               #:servlet-path "/")
#lang web-server
(require web-server/http)
(provide interface-version stuffer app)
(define interface-version 'stateless)
(define stuffer
  (stuffer-chain
   serialize-stuffer
   (md5-stuffer (build-path (find-system-path 'home-dir) ".urls"))))

(define CONTENTS
  (list 1 2 3))

(define (app req)
  (render-number-list CONTENTS req))

(define (render-number-list numbers req)
  (define (response-generator embed/url)
    (response/xexpr
      `(html
         (body (h1 "Contents")
               (form
                 ((action ,(embed/url insert-number-handler)))
                 (input  ((name "number")))
                 (input  ((type "submit"))))
               (ul ,@(map render-number numbers))))))
  (define (insert-number-handler req) 
    (render-number-list
      (cons (extract-binding/single 'number (request-bindings req)) numbers)
      req))
  (send/suspend/dispatch response-generator))

(define (render-number number)
  `(li ,(format "~a" number)))
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
racket $DIR/../serve.rkt
我的问题是:这(嵌入URL中的一长串信息)是可以避免的吗?我误解了什么吗?这与我试图使这个servlet无状态有关,还是与此无关


相关的问题(,)展示了一种不同的解决问题的方法,我可能会尝试一下,但我仍然想知道这个传递的URL是否是经过设计的,以及Racket中的无状态servlet是否通常以这种方式工作(或者我犯了一个错误)。

我认为这必须是这样的,因为它在服务器上是无状态的。状态必须在某个地方,并且在URL中。然后,服务器将对请求中提供的信息做出反应,实际URL是请求的一部分。然后,服务器将向客户机返回一些内容,而客户机又包含所有需要的状态,这样客户机就可以再次发出有用的请求,将所有内容再次放入URL中