рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдХ рдРрд╕реЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдпреВрдЖрдИ рдФрд░ рдмреИрдХрдПрдВрдб рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЯреАрдо рдХреЛ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлреНрд░рдВрдЯреЗрдВрдб рдФрд░ рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдХреА рд╡рд░реАрдпрддрд╛рдУрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЙрд╕реЗ рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░рдд рдФрд░ рддрд░реНрдХ рдкрд░рдд рджреЛрдиреЛрдВ рдХреА рд╕рдордЭ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ ui рдбреЗрд╡рд▓рдкрд░ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдФрд░ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╕реМрднрд╛рдЧреНрдп рд╣реИред рдмреБрд░реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, developer рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрдиреЗ рдпрд╛ рддрддреНрд╡ рдХреА рд╢реИрд▓реА рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП jsp рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреАрдврд╝реА рдФрд░ рд╣рд╕реНрддрд╛рдВрддрд░рдг рднреА рд╕рд░реНрд╡рд░ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рддрд┐рдХреВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЖрдЬрдХрд▓, HTML5, WebSocket рдФрд░ Full Ajax рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рд╡рд╛рд▓реЗ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЕрдм рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╕реЗ рдЕрд▓рдЧ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдмреИрдХреЗрдВрдб рд╕рд░реНрд╡рд░ рдХреЛ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИред рд╕рднреА ui рд╡рд┐рдХрд╛рд╕ рд╕реНрдЯрдм рдПрдкрд┐ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде nginx рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдСрдЯреЛ-рдЬрдирд░реЗрдЯрд┐рдВрдЧ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдорд╡рд░реНрдХ рдпреВрдЖрдИ рдФрд░ рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрдЪрд╛рд░ рд▓рд╛рдЧрдд рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдХреЗрд╡рд▓ рдЬреЛрдВрд╕ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЛрдб рднреА рдХрд╛рдлреА рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, ui рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рдВрдХреБрдЪрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╢ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдврд╝реА рд╣реБрдИ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЦреЛрдЬ рдЗрдВрдЬрдиреЛрдВ рдХреЛ рдорджрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдПрдВрдЧреБрд▓рд░рдЬ рдкрд░ рдареАрдХ рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- sitemap.xml
- html5Mode
- nginx
- рдкреБрд░рд╛рдиреЗ рдлреИрд╢рди рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░

HTML5 рдореЛрдб
Html5 рдореЛрдб,
example.com/#!/home
рд╕реЗ
example.com/#!/home
рд▓рд┐рдП рдХреЛрдгреАрдпjs рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдореЛрдбрд╝рддрд╛ рд╣реИ (рд╕рднреА
href
рд▓рд┐рдВрдХ рдХреЛ рдмрд┐рдирд╛ рд╣реИрд╢рдЯреИрдЧ рдХреЗ url рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред HTML5mode рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
$locationProvider.html5Mode(true); $locationProvider.hashPrefix('!');
рдореИрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдБ !
рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВрдЕрдм рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ nginx рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
example.com/home
рд╕реЗ рдореБрдЦреНрдп
index.html
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкрд░ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
location / { expires -1; add_header Pragma "no-cache"; add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"; root /var/web; try_files $uri $uri/ /index.html =404; }
рд╕реНрдЯреНрд░рд┐рдВрдЧ
try_files $uri $uri/ /index.html =404;
рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдм рд╕рднреА рдЧреИрд░-рдореМрдЬреВрдж url рдХреЛ рдмреНрд░рд╛рдЙрдЬрд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ url рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП
index.html
рдлрд╝рд╛рдЗрд▓ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рд╕рд╛рде рд╣реА рдкреБрд░рд╛рдиреЗ рд╣реИрд╢рдмреИрдВрдЧ рд▓рд┐рдВрдХ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд) рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдЦреЛрдЬ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддреЛ рдЖрдк рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдПрд╕рдИрдУ
рдЕрдм рд╣рдо рд╕рд░реНрдЪ рдЗрдВрдЬрди рдХреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмреЙрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕реНрдиреИрдкрд╢реЙрдЯ рдкреЗрдЬ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐
sitemap.xml
рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдФрд░ рдЙрдирдХреЗ рдЕрдВрддрд┐рдо рдЕрджреНрдпрддрди рдХреА рддрд╛рд░реАрдЦреЗрдВ рд╣реИрдВ (
www.sitemaps.org рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╛рд░реВрдк рдЙрдкрд▓рдмреНрдз рд╣реИ):
<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'> <url> <loc>http://senior-java-developer.com/java/basics</loc> <lastmod>2013-07-12</lastmod> </url> <url> <loc>http://senior-java-developer.com/</loc> <lastmod>2013-07-12</lastmod> </url> </urlset>
рдорд╣рд╛рди, рдЦреЛрдЬ рдЗрдВрдЬрди рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛ рдФрд░
index.html
рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдХреЛрдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЦреЛрдЬ рдмреЙрдЯ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реИред рдмреЙрдЯ рдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рдЕрд╕рд▓реА рдкреЗрдЬ рддрдХрдиреАрдХреА рдкреЗрдЬ `index.html` рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреГрд╖реНрда рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
<meta name="fragment" content="!" />
рдпрд╣ рдмреЙрдЯ рдХреЛ рдЕрдЧрд▓рд╛ рдХрджрдо рдЙрдард╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдЧрд╛ред
fragmet=!
рджреЗрдЦрдирд╛
fragmet=!
рдмреЙрдЯ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рджреЗрдЧрд╛
?_escaped_fragment_=
url рдХреЗ рдЕрдВрдд рдореЗрдВред рд╣рдо nginx рдХреЛ рдмрддрд╛рдПрдБрдЧреЗ рдХрд┐ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рджреВрд╕рд░реА рдЬрдЧрд╣ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
if ($args ~ "_escaped_fragment_=(.*)") { rewrite ^ /snapshot${uri}; } location /snapshot { proxy_pass http://api; proxy_connect_timeout 60s; }
рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЕрдм рдмреЙрдЯ рд╕реЗ рд╕рднреА рдЕрдиреБрд░реЛрдз рдПрдкреАрдЖрдИ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗред
рдЕрд╕рд▓реА url | рдмреЙрдЯ рдпреВрд░рд▓ | рдмреИрдХреЗрдВрдб url |
example.com | example.com/?_escaped_fragment_= | localhost:8080/snapshot/ |
example.com/home | example.com/home?_escaped_fragment_= | localhost:8080/snapshot/home |
рдореИрдВ рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛рдЗрдореЗрд▓реНрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдХреНрдпреЛрдВрдХрд┐ Thymeleaf рдФрд░ angularjs рджреЛрдиреЛрдВ html5 рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рдПрдХ рд╣реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдорд┐рд╢реНрд░рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
HTML рджреГрд╢реНрдп рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
<div ng-bind="text" th:text="${text}"></div>