рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдХрд╛ рддреАрд╕рд░рд╛ рднрд╛рдЧ Hunchentoot рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧрд╛ред рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдХреБрдЫ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдкрд░, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, HTML / XML рдХреА рдкреАрдврд╝реА рдХреЛ рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХрд╛ рдЪрдпрди
рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдореЗрдВ рдПрдХ рдиреНрдпреВрдирддрдо рд▓рд┐рд╕реНрдк рдкреНрд░рдгрд╛рд▓реА рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЪреБрдирдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╢реНрди рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ - рд╡рд╣реА рдХреНрд▓рд┐рдХреА 7 рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЪреБрдирд╛, рддреЛ рдореИрдВ рдХрдИ рдХрд╛рд░рдХреЛрдВ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реАрдПрд▓ рд╕рдореБрджрд╛рдп рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдФрд░ рдЕрджреНрдпрддрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░реЗ, рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╣реЛрдирд╣рд╛рд░ рд╡реЗрдм-рдлреНрд░реЗрдорд╡рд░реНрдХ рдЙрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдлрд▓ рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рдЗрди рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреЗрд╡рд▓ рджреЛ рдЙрддреНрдкрд╛рдж рдореЗрд░реА рджреГрд╖реНрдЯрд┐ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЧрд┐рд░ рдЧрдП: рдкреЛрд░реНрдЯреЗрдмрд▓ AllegroServ рдФрд░ Hunchentootред
рдкреЛрд░реНрдЯреЗрдмрд▓ AllegroServ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Allegro CL рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдореВрд▓ рд╡реЗрдм рд╕рд░реНрд╡рд░ AllegroServ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЖрдо рд▓рд┐рд╕реНрдк рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рд╕рдВрдХрд▓рдХ рдХреЗ рдЧреИрд░-рдорд╛рдирдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрд▓реНрд▓реЗрдЧреНрд░реЛрд╕рд░реНрд╡ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдЕрдзрд┐рдХрддрдо рджрдХреНрд╖рддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдорд╛рдВрдЧ рдХреА, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдЦреНрдд рдорд╛рдирдХ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдкрд░рд┐рдгрд╛рдо рдПрдХ рддреЗрдЬ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реИ, рдЬреЛ рд╢рд╛рдпрдж рдЖрдЬ рддрдХ рдПрд▓реЗрдЧреНрд░реЛ рд╕реАрдПрд▓ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЪреВрдВрдХрд┐ рдПрд▓рдПрд▓рдЬреАрдкреАрдПрд▓ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдПрд▓реЗрдЧреНрд░реЛрд╕рд░реНрд╡ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдРрд╕реЗ рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧ рдереЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдорд╛рдирдХ рдХреЙрдорди рд▓рд┐рд╕реНрдк рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдкрд░рд┐рдгрд╛рдореА рдЙрддреНрдкрд╛рдж рдХреЛ рдкреЛрд░реНрдЯреЗрдмрд▓ AllegroServ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рдХреБрдЫ рд▓рд┐рд╕реНрдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рджреЛрдиреЛрдВ рдореЗрдВ рдореВрд▓ рд╕реЗ рдиреАрдЪ рд╣реИред
рд╣рдорд╛рд░реА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдирд╛рдпрдХ, рд╣рдВрдЪреЗрдВрдЯ рдХреЗ рдЕрдЬреАрдм рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ , рд╢реБрд░реВ рдореЗрдВ рдорд╛рдирдХ рдХреЙрдорди рд▓рд┐рд╕реНрдк рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рд╕рд╣реА рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ" рдпрд╣ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рд╣реЗрдВрдЪреЗрдВрдЯреВрдЯ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реНрдХ рдпрд╣ рдерд╛ рдХрд┐ рдпрд╣ рд╣реЛрдирд╣рд╛рд░ рд╡реЗрдм-рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡реЗрдмрд▓реЙрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореИрдВрдиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рд╣рдВрдЪреЗрдВрдЯ рдиреЗ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд┐рд░рд╛рд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЕрдЧрд▓рд╛, рд╣рдо рдЗрд╕ рдЕрджреНрднреБрдд рдЙрддреНрдкрд╛рдж рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдкреЗрд╢ рд╣реИ рд╣реБрдВрдЪреЗрдВрдЯреВрдЯ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдордиреЗ Hunchentoot рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
( asdf:oos 'asdf:load-op :hunchentoot )
рдЕрдм рд╕реНрд╡реАрдХрд╛рд░рдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ - http рдЕрдиреБрд░реЛрдз рд░рд┐рд╕реАрд╡рд░:
( hunchentoot:start ( make-instance 'hunchentoot:acceptor :port 8080 ))
рддрд╛рдХрд┐ Hunchentoot https рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХреЗ, рдЖрдкрдХреЛ 'sll-acceptor (рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ) рдХреЗ рд╕рд╛рде ' acceptor ' рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдореБрдЦреНрдп рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рднреВрд▓ рди рдХрд░реЗрдВред
рд╣реЗрдВрдЪреЗрдВрдЯ рдХреВрдЯ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╕рд░рд▓рддрдо рд╣реИрдВрдбрд▓рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
( hunchentoot:define-easy-handler ( say-yo :uri "/yo" ) ( name )
( setf ( hunchentoot:content-type* ) "text/plain" )
( format nil "Hey~@[ ~a~]!" name ))
рдЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЛ say-yo рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ URL / yo рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдПрдХрд▓ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ (GET рдпрд╛ POST рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рд▓реЗрддрд╛ рд╣реИред рд╣реИрдВрдбрд▓рд░ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдбреЙрдХреНрдпреБрдореЗрдВрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдЕрд░реЗ рдирд╛рдо!" рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдирд╛рдо рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдмрд╕ "рдЕрд░реЗ!"ред рдЕрдЧрд░ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ (рд╡рд╣ рд╣реИ, nil)ред рдпрджрд┐ рдЖрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдкрдг рдХреА рдЧрд╣рдирддрд╛ рд╕реЗ рднреНрд░рдорд┐рдд рд╣реИрдВ, рддреЛ рдкреНрд░рд╛рд░реВрдк рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рджреЗрдЦреЗрдВред / рдпреЛ рдФрд░ / рдпреЛ рдкрд░ рдЬрд╛рдХрд░ рдЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ? рдирд╛рдо = рд╡рд╛рд╕рд┐рдпрд╛ред
рдкрд╛рда рдХреЗ рдмрдЬрд╛рдп, рд╣реИрдВрдбрд▓рд░ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝рд╛рдЗрд▓ рджреЗ рд╕рдХрддрд╛ рд╣реИ:
( hunchentoot:define-easy-handler ( get-file :uri "/file" ) ( name )
( handle-static-file ( format nil "/home/me/folder/~a" name ))
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдПрдХ рдЫреЛрдЯреЗ рд╢реМрдХрд┐рдпрд╛ рд╢рд┐рд▓реНрдк рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдбрд┐рдлрд╛рдЗрди-рдЖрд╕рд╛рди-рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдкреНрд░реЗрд╖рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХреЛ рд╕рдордЭрдирд╛ред рд╣рдо рдмрд╛рдж рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрд╡реАрдХрд░реНрддрд╛ рд╡рд░реНрдЧ (рдФрд░ рдЗрд╕рд▓рд┐рдП ssl-рд╕реНрд╡реАрдХрд░реНрддрд╛ рд╡рд░реНрдЧ ) рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рдмрдВрдзрдХ рд╣реЛрддрд╛ рд╣реИ ред рдЕрдиреБрд░реЛрдз рдкреНрд░рдмрдВрдзрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЕрдиреБрд░реЛрдз рд╡рд░реНрдЧ (http рдЕрдиреБрд░реЛрдз) рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ http рд╕реНрдЯреНрд░реАрдо (HTML / XML рдпрд╛ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛) рджреЗрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рджрд┐рдП рдЧрдП URL рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдореЗрдВ, рдХреНрд╡реЗрд░реА рдореИрдиреЗрдЬрд░ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВрдбрд▓рд░ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд╣ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреНрд╡реЗрд░реА рдкреНрд░рдмрдВрдзрдХ рдбрд┐рд╕реНрдкреИрдЪ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд▓реА * рдбрд┐рд╕реНрдкреИрдЪ-рдЯреЗрдмрд▓ * рд╕реВрдЪреА рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ ред рдкреНрд░рддреНрдпреЗрдХ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрдиреБрд░реЛрдз рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрдкрдиреЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╣реИрдВрдбрд▓рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ - рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдЯрд░реНрди)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд╛рдирдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рдмрдВрдзрдХ, рдмрджрд▓реЗ рдореЗрдВ рдкреНрд░реЗрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ред * рдбрд┐рд╕реНрдкреИрдЪ-рдЯреЗрдмрд▓ * рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдбрд┐рдлреЙрд▓реНрдЯ-рдбрд┐рд╕реНрдкреИрдЪрд░ рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдбрд┐рд╕реНрдкреИрдЪ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдкреГрд╖реНрда рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИ рдЬреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ)ред
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдХреБрдЫ рдЬрдЯрд┐рд▓ рд▓рдЧ рд╕рдХрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдорд╣рд╛рди рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣реИрдВрдбрд▓рд░ рд░рд┐рдЯрд░реНрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдкреНрд░реЗрд╖рдг рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рднрд╛рд╖рд┐рдд-рдЖрд╕рд╛рди-рд╣реИрдВрдбрд▓рд░ рдореИрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рдбрд┐рд╕реНрдкреИрдЪрд┐рдВрдЧ рд╣реИрдВрдбрд▓рд░ рдЗрд╕ рдорд╛рдирдХ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: * рдбрд┐рд╕реНрдкреИрдЪ-рдЯреЗрдмрд▓ * рдореЗрдВ рдбрд┐рд╕реНрдкреИрдЪ-рдИрдЬрд╝реА-рд╣реИрдВрдбрд▓рд░ рдбрд┐рд╕реНрдкреИрдЪ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЕрдкрдиреА рд╕рд░рд▓реАрдХреГрдд рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреА рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪреА рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИред рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд-рдЖрд╕рд╛рди-рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рд╣реИрдВрдбрд▓рд░ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдХреЛ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣реЗрдВрдЪреЗрдВрдЯреВрдЯ рдорд╛рдирдХ рдкреНрд░реЗрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрдИ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреБрдЫ рдорд╛рдирдХ рд╣реИрдВрдбрд▓рд░ рднреА ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджрд┐рдП рдЧрдП URL рдЙрдкрд╕рд░реНрдЧ рдФрд░ рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реА-рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕-рдбрд┐рд╕реНрдкреИрдЪрд░ рдмрдирд╛рдирд╛ рдПрдХ рдкреНрд░реЗрд╖рдг рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рджрд┐рдП рдЧрдП рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП URL рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред Create-regex-dispatcher рдлрд╝рдВрдХреНрд╢рди рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдкреНрд░реЗрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ URL рдХреЛ рджрд┐рдП рдЧрдП рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреИрдЯрд░реНрди рдХреЛ рдореИрдк рдХрд░рддрд╛ рд╣реИред рдмрдирд╛рдПрдБ-рдлрд╝реЛрд▓реНрдбрд░-рдбрд┐рд╕реНрдкреИрдЪрд░-рдПрдВрдб-рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди URL рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдФрд░ рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдкрде рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдбрд┐рд╕реНрдкреИрдЪ рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рджреА рдЧрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯреИрдВрдбрд░реНрдб рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╣реИрдВрдбрд▓-рд╕реНрдЯреИрдЯрд┐рдХ-рдлрд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ , рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЧреЗрдЯ-рдлрд╛рдЗрд▓ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ред
рдЖрдо рд▓рд┐рд╕реНрдк рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рд╕реЗ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдЬреЛ рд╣реБрдВрдЪрдХреВрдЯ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдореЗрдВ рдпреЛрдЧрджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдЖрдк рди рдХреЗрд╡рд▓ рд╕реНрд╡реАрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рд╡рдВрд╢рдЬ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╣реИрдВрдбрд▓рд░ рдЦреЛрдЬ рдпреЛрдЬрдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рдХрд░ рдпрд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓рдХрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЛ рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдорд▓реНрдЯреАрдЪрд╛рд░реНрдЯ / рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдВрдЪреЗрдВрдЯ рдХреЛ рдордЬрдмреВрд░ рдХрд┐рдпрд╛, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдирд╣реАрдВред рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм, DoS рд╣рдорд▓реЗ рдХреЗ рджреМрд░рд╛рди, рдХрдИ рдорд╢реАрдиреЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдмрд╣реБ-рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХрдЪрд░рд╛ рдкреЛрд╕реНрдЯ рдХрд░рддреА рд╣реИрдВред
рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣реЗрдВрдЪреЗрдВрдЯреВрдЯ рдХрдИ рдорд╛рдирдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рдХреБрдХреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЗрд╕рдХреЗ рд╡реЗрдм рдкреЗрдЬ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
HTML / XML рдЬрдирд░реЗрд╢рди
рд╣рдорд╛рд░реА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, CL-WHO рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ HTML / XML рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ DSL рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рдмрд╛рд░ рджреЗрдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛:
( push :tag3 *html-empty-tags* )
( with-html-output-to-string ( http-stream )
( :tag1 :attr1 1 :attr2 "2"
( :tag2 :attr3 ( + 1 2 ))
( loop for i from 1 to 3 do
( with-html-output ( http-stream )
( :tag3 :attr4 ( when ( oddp i ) "odd" ))))))
рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдЕрдВрддрд░реНрд╡рд┐рд░реЛрдз рдирд╣реАрдВ рд╣реИ:
"<tag1 attr1='1' attr2='2'><tag2 attr3='3'></tag2>
<tag3 attr4='odd' /><tag3 /><tag3 attr4='odd' /></tag1>"
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде-html-output-to-string рдореИрдХреНрд░реЛ рдЗрд╕ s-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рдЙрджреНрдШрд╛рдЯрди рдФрд░ рд╕рдорд╛рдкрди рдЯреИрдЧ рд╕реЗ XML рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдХрдорд╛рдВрдб рдЯреИрдЧ 3 рдЯреИрдЧ рдХреЛ рд╕рд┐рдВрдЧрд▓ рдЯреИрдЧ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП, рд╕рдВрд▓рдЧреНрдирдХ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдПрдХ рд╕рдорд╛рдкрди рдЯреИрдЧ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, html-output-to-string рдореИрдХреНрд░реЛ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ html- рдЖрдЙрдЯрдкреБрдЯ , рдореБрдЦреНрдп CL-WHO рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡рд░рдг рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
рдкрд░рд┐рдгрд╛рдореА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ XML рдореЛрдб рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдореЛрдб рдореЗрдВ, рдпрд╣ XML / XHTML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред HTML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, SGML рдореЛрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЦрд╛рд▓реА рдЯреИрдЧ рдореЗрдВ рдХреНрд▓реЛрдЬрд┐рдВрдЧ рд╕реНрд▓реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрд┐рдирд╛ рдорд╛рди рдХреЗ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣реЗрдВрдЪреЗрдВрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реАрдПрд▓-рдбрдмреНрд▓реВрдПрдЪрдУ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкрд░рд┐рдЪрдп рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╡реЗрдм рдкреЗрдЬ рдкрд░ рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдВред