рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, рдЧреНрд░реВрд╡реА рд░реВрдмреА рд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓реЗрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧреНрд░рд┐рд▓реНрд╕ (рд░реЗрд▓ рд╕реЗ), рд▓реЗрдХрд┐рди рд╕реНрдкреЙрдХ (рд╕реНрдкреЗрдХ рд╕реЗ) рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧреНрд░реИрдбрд▓ (рдмрд┐рд▓реНрдбрд░ рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрдИ рднреА рдЗрд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рд╕рдордЭрджрд╛рд░ "рдмреЗрд╡рдХреВрдл" рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ -
рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рд░реИрдЯрдкреИрдХ ред

рд╕рд┐рдирдЯреНрд░рд╛ рд╕реЗ рд░реАрдХрдВрдкреИрдХ рдХрд┐рдП рдЧрдП рд░реИрдХреЗрдЯ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдБ ред
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рд┐рдирд╛рддреНрд░рд╛ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн
рдпрд╣ рд╣реИ
рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рдЧрд╛рдпрдХ рд╣реИ, рдпрд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рддрддреНрдХрд╛рд▓ рд╣реИред рдХреБрдЫ рд╕рд░рд▓ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рдордХреНрдЦреА рдкрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ, рдФрд░ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рдвреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╕рд┐рдирд╛рддреНрд░рд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ "рд╡рд╕рд╛" рд░реЗрд▓ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрддреНрддрд░ рд╣реИред рдареАрдХ рдЙрд╕реА рднреВрдорд┐рдХрд╛ рдореЗрдВ ("рдореЛрдЯреЗ" рдЧреНрд░рд┐рд▓реНрд╕ рдХрд╛ рдЬрд╡рд╛рдм), рд╕рд┐рдирд╛рддреНрд░рд╛ рдЧреНрд░реВрд╡ рдХреЗ рд▓рд┐рдП рдЪрд▓реЗ рдЧрдПред
рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рдмрд╛рд░ рд╕рд┐рдВрд╡реЗрдЯ рдХреЛ рдлрд╛рдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдЧреНрд░реВрд╡ рд╕рдореБрджрд╛рдп рдкрд╣рд▓реЗ рдирд╣реАрдВ рдерд╛ред рдкрд╣рд▓реЗ рд╕реНрдХрд╛рд▓рд╛ рдереЗ, рдЙрдирдХреА
рд╕реНрдХреИрд▓рдЯреНрд░рд╛ (рд╣рд╛рдБ, "рдореЛрдЯреЗ" рдкреНрд▓реЗ рдХрд╛ рдЬрд╡рд╛рдм) рдХреЗ рд╕рд╛рдеред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдирд╛рдо рдХреЛ рдЕрдлрд╡рд╛рд╣ рдХреА рддрд░рд╣ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп, рд▓реЗрдХрд┐рди рдЕрд░реНрде рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╕рдВрдШ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд░реЙрдХ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдирд╛рдо рдХреА рдзреНрд╡рдирд┐ рд╕реЗ рднрдпрднреАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ :)
рд░реИрдЯрдкреИрдХ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд░реВрд╕реА рдореЗрдВ рд░реИрдЯ рдкреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рдирд╛рддреНрд░рд╛ рдХреА рдХрдбрд╝реА рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣
рдкрд╛рд░реНрдЯреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлреНрд░реИрдВрдХ рд╕рд┐рдирд╛рддреНрд░рд╛ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ ред
рдФрд░ рдЬрд╛рд╡рд╛ рдХрд╣рд╛рдБ рд╣реИ?
рдЦреИрд░, рдпрд╣рд╛рдБ, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд░реВрдмреА рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рдПрдХ рдмрд╛рд░ рдПрдХ рд╣рд▓реНрдХрд╛ рдЖрд░рдУрдЖрд░ рдерд╛, рдпрд╛ рдЧреНрд░реВрд╡реНрд╕ рдХреЗ рд╕рд╛рде рдЧреНрд░рд┐рд▓реНрд╕ рдХреЗ рд╕рд╛рде, рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрднреА рднреА "рд╣рд▓реНрдХреЗ" рдлреНрд░реЗрдорд╡рд░реНрдХ * рдХреА рдореБрдЦреНрдпрдзрд╛рд░рд╛ рдирд╣реАрдВ рдереАред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╛ рддреЛ JSF рдФрд░ рд╡рд┐рдХреЗрдЯ рдЬреИрд╕реЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИрдВ, рдпрд╛ MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИрдВ, рдЬреЛ рдмреЗрд╢рдХ рдШрдЯрдХ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рд▓реНрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдПрдорд╡реАрд╕реА рдХреЛ рд╕рд░рд▓рддрдо рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╕реНрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдореИрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдФрд░ рд╕реНрдЯреНрд░рдЯреНрд╕ 2 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рдпрд╣ рд╕рдм рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде "рд╢рдмреНрдж рдмрджрд▓ рдЧрдпрд╛?" рд░рд┐рдмреВрдЯ! тАЭред рдЖрд╣ред
рдПрдВрдЯреЛрдирд╛рд░рд┐рдкреЛрд╡ рдХреЗ рд░реВрдк рдореЗрдВ, рдареАрдХ рд╕реЗ
рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЖрдк рдЬрд░реНрд╕реА рдФрд░ рд░реИрд╕реНрдЯрд▓реЗрдЯ рдЬреИрд╕реЗ рдЕрдиреНрдп рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рджреБрд░реБрдкрдпреЛрдЧ рд╣реИред
рдЬрд╛рд╡рд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рд┐рдирд╛рддреНрд░рд╛ рдХреНрд▓реЛрди рд╣реИ рдЬрд┐рд╕реЗ
рд╕реНрдкрд╛рд░реНрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдореБрдЭреЗ рдЗрд╕рдХреЗ рдХрдИ рдХрд╛рд░рдг рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:
- рдЕрд╕реНрдерд╛рдпреА рдпрд╛ рдЕрд╕реНрдерд╛рдпреА рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рджреВрд╕рд░рд╛ рдЬрд┐рддрдирд╛ рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдПрдХ рдЙрдкрд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред рджреЛрдиреЛрдВ рдЧреНрд░реВрд╡реА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рднреА рдмрджрддрд░
- рд╣реЙрдЯ рд╕реНрд╡реИрдк - рд╕рд┐рдирд╛рддреНрд░рд╛ рдХрд╛ рдПрдХ рдХреНрд▓реЛрди "рдкрд░рд┐рд╡рд░реНрддрд┐рдд, F5, рдЖрд░реА" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЕрдлрд╕реЛрд╕ред
- рд░реЙрдЯрдкреИрдХ рдЧреНрд░реВрд╡ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рд╣реИред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрдЦреНрдп рд▓рд╛рдн рд╣реИред
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЧреНрд░реВрд╡ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдШрд░ рдкрд░ рд╕рд╣реА рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред 99% рдЬрд╛рд╡рд╛ рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рдЧреНрд░реВрд╡реНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЧреНрд░реВрд╡ рдлреНрд░реЗрдорд╡рд░реНрдХ рдпрд╛ рдЯреВрд▓ рдХреЛ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рддреБрд░рдВрдд рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрд╣рд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реИ - рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП рддрд╛рдХрд┐ рд╡реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рдЧреНрд░реВрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХреЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдЧреНрд░реВрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд░реИрдЯрдкреИрдХ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЧреНрд░реВрд╡ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд╛рд╡рд╛ рдореЗрдВ 100% рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдХреМрди рдЗрд╕ рд╕рднреА рдЧреНрд░реБрд╡рд┐рдпрди рд╢рд░реНрдорд┐рдВрджрдЧреА рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рд╕реАрдзреЗ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред рдмрд╛рдХреА рдпрд╣рд╛рдБ рд╢реБрд░реВ:
рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡!
рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб! рдПрдХ рдкреВрд░реНрдг рдЪреВрд╣рд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
@GrabResolver('http://oss.jfrog.org/artifactory/libs-snapshot') //(1) @Grab('org.ratpack-framework:ratpack-groovy:0.9.0-SNAPSHOT') import static org.ratpackframework.groovy.RatpackScript.ratpack ratpack { //(2) handlers { get { response.send 'Hello, world!' //(3) } } }
рд╡рд╣ рд╕рдм рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗред рд╣рдо рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ratpack.groovy) рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ
groovy ratpack.groovy
рдорд╛рдзреНрдпрдо рд╕реЗ
groovy ratpack.groovy
:
INFO: Ratpack started for localhost:5050
рдЖрдЬреНрдЮрд╛рдХрд╛рд░реА рдврдВрдЧ рд╕реЗ рдЪрд▓реЗрдВ
localhost:5050
localhost:5050
рдФрд░ рд╣рдореЗрдВ рд╡рд╣рд╛рдБ рдЙрдореНрдореАрдж рд╣реИ:

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛:
- рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдПрдХ рдореБрдлреНрдд рдУрдкрдирд╕реЛрд░реНрд╕ рдЦрд╛рддрд╛ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
- рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдШреЛрд╖рдгрд╛, рдЗрд╕рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдФрд░ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
- рдпрд╣ рдЧреЗрдЯ рд╣реИрдВрдбрд▓рд░ рд╣реИред рдЪреВрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд░реВрдЯ рдпреВрдЖрд░рдПрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдВ рд╣рдо рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рд▓реМрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред
рдПрдХ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ
рд╣рдо рдЕрдкрдиреЗ ratpack.groovy рдореЗрдВ рдПрдХ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
ratpack { handlers { get { response.send 'Hello, world!' } get('habr'){ response.send 'Hello, habr!'
рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ
localhost:5050/habr
localhost:5050/habr
, рдЖрдирдВрдж рд▓реЗрдВред

рд░реАрдмреВрдЯ? рдирд╣реАрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рдХреМрди рдорд╣рд╛рди рд╣реИ?
рд╕реНрдкреНрд░рд┐рдВрдЧ-рд▓реЛрдбреЗрдб рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ ред
рдЧрддрд┐рд╢реАрд▓рддрд╛ рдЬреЛрдбрд╝реЗрдВ
рдЧрддрд┐ рдФрд░ рд░реБрдЪрд┐ рдЬреЛрдбрд╝реЗрдВред рдХреЛрдб:
ratpack { handlers { get('hello/:username') { response.send "Hello, ${pathTokens.username}" } } }
рдкрд░рд┐рдгрд╛рдо:

рдЦреИрд░, рдпрд╛ рддреЛред рдХреЛрдб:
ratpack { handlers { get('hello') { response.send "Hello, ${request.queryParams.username}" } } }
рдкрд░рд┐рдгрд╛рдо:

рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ
рдЖрдк рдХрдИ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЫреЛрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ рдЕрднреА рднреА рд╢реБрджреНрдз рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдиреВрдВрдЧрд╛, рддреЛ рдЖрдЗрдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рджреЗрдЦреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд░реВрд╡реА рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓реЗрдВ:
рдЯреЗрдореНрдкреНрд▓реЗрдЯ
templates
рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде
index.html
рд╕рд╣реЗрдЬреЗрдВ:
<html> <head> <title>${model.title}</title> </head> <body> <h5>${model.content}</h5> <br/> <img src="http://habr.habrastorage.org/post_images/9a5/14b/49a/9a514b49a2017e50f386f154c8cb0da2.png"/> </body> </html>
рд╣реИрдВрдбрд▓рд░ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
@GrabResolver('http://oss.jfrog.org/artifactory/libs-snapshot') @Grab('org.ratpack-framework:ratpack-groovy:0.9.0-SNAPSHOT') import static org.ratpackframework.groovy.RatpackScript.ratpack import static org.ratpackframework.groovy.Template.groovyTemplate ratpack { handlers { get { render groovyTemplate("index.html", title: ' Ratpack', content: ' :') } } }
рдирдП рд╕реНрдереИрддрд┐рдХ рдЖрдпрд╛рдд рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
рдкрд░рд┐рдгрд╛рдо рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ:

рдЬрд╛рд╡рд╛ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХреМрди рдХрд░ рд░рд╣рд╛ рдерд╛? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ!
рдЦреИрд░, рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдордд рдХрд░реЛред рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде, рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛, рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдЧрдВрднреАрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реЛрдЧрд╛ред
рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдЧреБрдЗрд╕реЗ рдкрд░ рд╣реЛрдЧрд╛, рд╡реЗрдм рд╕рд░реНрд╡рд░ рдиреЗрдЯреНрдЯреА рдкрд░, рдирд┐рд░реНрдорд╛рдг рдФрд░ рд░рдирд┐рдВрдЧ рдкрд░ рд░рдирд┐рдВрдЧ, рд╕реНрдкреНрд░рд┐рдВрдЧ-рд▓реЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдмреВрдЯред
рдЖрдЗрдП рдЬрд╛рдиреЗ:
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛:

Ratpack.properties рдлрд╝рд╛рдЗрд▓ рдХрд╣рддреА рд╣реИ рдХрд┐
HandlerFactory
рдХреМрди
HandlerFactory
(рд╣реИрдВрдбрд▓рд░ рдХрд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ):
handlerFactory=example.HandlerFactory
example.HandlerFactory
ред рд╣реИрдВрдбрд▓рд░ рдлреИрдХреНрдЯреНрд░реА рдХреНрд▓рд╛рд╕, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ,
Hello, %username%
:
package example; import ... public class HandlerFactory implements org.ratpackframework.launch.HandlerFactory { public Handler create(LaunchConfig launchConfig) { return chain(new Action<Chain>() { public void execute(Chain chain) { chain.add(get("hello/:username", new Handler() { public void handle(Context context) { Map<String, String> pathTokens = context.getPathTokens(); context.getResponse().send("Hello from Java, " + pathTokens.get("username")); } })); } }); } }
рд╣рд╛рдВ, рдЬрд╛рд╡рд╛ 8 рдХреЛ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЧреНрд░реВрд╡реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ - рд╣рдо рд╣реЗрд▓реЛ /: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкрде рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо
context.getPathTokens()
рдХреЗ рдорд╛рд░реНрдЧ рд╕реЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рднрд╛рдЧ рдХрд╛ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ
context.getPathTokens()
ред
рд╣рдо рдЯрд╛рд╕реНрдХ
run
рд╢реБрд░реВ рдХрд░рддреЗ
run
, рдЯрд╛рд╕реНрдХ
classes
рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ
classes
(рджреВрд╕рд░реА рд╡рд┐рдВрдбреЛ рдореЗрдВ,
run
рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ):

рдкрд░рд┐рдгрд╛рдо:

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдЬрд╛рд╡рд╛ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЖрдХрд░реНрд╖рдХ рдирд╣реАрдВ рдерд╛ред рдвреЗрд░ рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рдЬрдм рдпрд╣ рд╕рдм рдЧреНрд░реВрд╡ рдХреА 4 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдХреНрдпреЛрдВ?
рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд╛рдн рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдЪрд╛рдирдХ, рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдЕрд▓рдЧрд╛рд╡, рдХрдард┐рди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрди рд▓рд╛рднреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдЕрдзрд┐рдХ рдкреВрд░реНрдг рд░реИрдЯрдкреИрдХ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рд╕рдордЭ рдЬрд╛рдПрдВрдЧреЗ рдХрд┐ рдореИрдВ рдХрд┐рди рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпреЗ рдмрд╣реБрдд рдореВрд▓ рдмрд╛рддреЗрдВ рд╣реИрдВ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд░реИрдЯрдкреИрдХ рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдП рдЧрдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрд╣рд╛рд░ рд╣реИрдВред рдпреЗ Guice рдореЙрдбреНрдпреВрд▓, рд╕реЗрд╡рд╛рдПрдВ, MongoDB рдФрд░ GORM рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рд╣реИрдВред
рд╣реИрдВрдбрд▓рд░, рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдордзреНрдпрдо рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рдЧреНрд░реВрд╡реА рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде, "рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдШреБрдЯрдиреЗ рдкрд░" рдХреБрдЫ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рддрдХ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрд▓реНрдж рд╣реА), рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд┐рд╢рди-рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЗрд╕ рдкрд░ рдЖрдкрдХрд╛ рдЕрдЧрд▓рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИ " рдЦреМрдлрдирд╛рдХ рд╣реЛрдо рдкреЗрдЬ "
рдкреБрдирд╢реНрдЪ
рдпрджрд┐ рдЖрдк рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред
рдпрджрд┐ рдЖрдк рд░реИрдЯрдкреИрдХ рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рд░реЛрдЪрдХ рдмрд╛рддреЗрдВ рднреА рд╕реБрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ
31 рдЕрдЧрд╕реНрдд рдХреЛ
JUG рдореЗрдВ рдЖрдПрдВред