рдЖрд░рдПрдкреА / рдЖрд░рд╕реАрдкреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА: рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐-рдкреГрд╖реНрда рдХреИрд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдЬреЗрдЯреНрдЯреА рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЬреЗрдЯреНрдЯреА рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрд░рдбрдмреНрд▓реНрдпреВрдЯреА рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдЖрд░рдбрдмреНрд▓реНрдпреВрдЯреА рдиреЗ рд╣реА рдЬреЗрдЯреНрдЯреА рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдмрдВрдзрд┐рдд рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЗрд╕реА рд╕рдордп, рдЬреЗрдЯреНрдЯреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрд╡рдпрдВ рдЕрдиреНрдп рдмрдВрдбрд▓реЛрдВ рд╕реЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдпрд╣ рд╕реАрдзреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдЧрдпрд╛ рдФрд░ рдЬреЗрдЯреА рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЖрд░рдбрдмреНрд▓реНрдпреВрдЯреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, JAX-WS рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рднреА рд╡рд╣рд╛рдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ред рд╕рд╣рд╛рдиреБрднреВрддрд┐, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдпрд╣ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди OSGi рдордВрдЪ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╡рд┐рд╖реБрд╡ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдЬреЗрдЯреНрдЯреА рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП, рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ: рдЬрдм рдЖрдк рд╕рдВрдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ
-Dorg.eclipse.equinox.http.jetty.customizer.class = en.futurelink.jetty.customizer.MyJettyCustomizerрдХрд╕реНрдЯрдо рдХреЛрдб:
public class MyJettyCustomizer extends JettyCustomizer { @Override public Object customizeContext(Object context, Dictionary<String, ?> settings) { ServletContextHandler c = (ServletContextHandler) context;
рдпрд╣рд╛рдБ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
1) рдХреБрдЫ рд╕рд░реНрд╡рд▓реЗрдЯреНрд╕ рдХреЛ рдореИрдк рдХрд░реЗрдВ, рдХреБрдЫ URL рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрдм рд╡реЗ рд╡рд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ, рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред
2) рдЧрд▓рдд рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рд╣реИрдВрдбрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
3) JAX-WS рд╡реЗрдм рд╕реЗрд╡рд╛ рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝реЗрдВ - рдЕрдВрдд рдореЗрдВ рдЗрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХ, рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ;)
рдпрджрд┐ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд░рд▓ рд╣реИ - рд╣рдо рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ URL рдФрд░ рд╡реЙрдЗрд▓рд╛ рдореЗрдВ рдореИрдк рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдХреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдпрд╣ рд╣реИ:
public class MyJettyErrorHandler extends ErrorHandler { @Override protected void handleErrorPage(HttpServletRequest request, Writer writer, int code, String message) throws IOException { if (code == 404) { writer.write("No,no,no!!! This page does not exist!"); return; } super.handleErrorPage(request, writer, code, message); } }
рдЕрдм рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ HTTP рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдХреЛрдб рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рдордЬрд╝реЗрджрд╛рд░ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо JAX-WS рдХреЛ рд╣рдорд╛рд░реЗ RWT рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдпрд╣рд╛рдБ рдХрдард┐рдирд╛рдИ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рд╣рдореЗрдВ рдПрдХ XML рд╡рд┐рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ
WEB-INF / sun-jaxws.xml рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
<?xml version="1.0" encoding="UTF-8"?> <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"> <endpoint name="ClientService" implementation="ru.futurelink.mo.mobile.server.ClientService" url-pattern="/service/mobile"/> </endpoints>
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдпреЗ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рддрд╛ рд╣реИред рдФрд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП JAX-WS рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдиреНрдп рд╡реЗрдм рд╕рд░реНрд╡рд░
com.sun.net.httpserver рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рд▓рдЯрдХрд╛ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЕрдирд╛рдбрд╝реА рд╣реИред рд╣рдореЗрдВ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдЬреЗрдЯреНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬреЛ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛, рдЕрдм рд╣рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ OSGi рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЬреЛ JAX-WS рдмрдирд╛рдпрд╛ рд╣реИ, рд╡рд╣ рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ JAX-WS рдПрдХ OSGi- рд╕рдВрдЧрдд рдмрдВрдбрд▓ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рд░реАрдкреИрдХреЗрдЬ рдХрд┐рдпрд╛ рд╣реИ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐?) рдПрдХ рд╕рд╛рдзрд╛рд░рдг JAR рд╕реЗ рдПрдХ рдмрдВрдбрд▓ рдореЗрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рдХрдЯ рдХрд┐рдпрд╛ред OSGi рдХреА рд╢реИрд▓реА рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд░рддреЗ рд╣реБрдП рдЖрдкрдХреЛ рдЙрд╕реЗ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо рдЕрдкрдиреЗ рдкреВрд░реЗ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝рд░ рдХреЛ рдПрдХ
рдЯреБрдХрдбрд╝реЗ рдореЗрдВ
org.eclipse.equinox.http.jetty рд╣реЛрд╕реНрдЯ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЯреБрдХрдбрд╝рд╛ рдХреНрд▓рд╛рд╕рдкрд╛рде рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореЗрдЬрдмрд╛рди рдХреЛ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдХреБрдЫ рдХрд╕реНрдЯрдо рднрд╛рдЧреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗред рд╣рдо JAX-WS рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ com.sun.net.httpserver рдХреЗ рдмрдЬрд╛рдп рдЬреЗрдЯреНрдЯреА рдХреЛ HTTP рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░реЗрдВрдЧреЗред
рдЕрдЧрд▓рд╛, рд╣рдо JAX-WS рд╕реЗ рдХрдИ рдХрдХреНрд╖рд╛рдПрдВ рд▓реЗрддреЗ рд╣реИрдВ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рдкреИрдХреЗрдЬ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣рдореЗрдВ
рдХреЙрдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИ) рдФрд░
рдХреЙрдо / рд╕реВрд░рдЬ / xml / ws / рдкрд░рд┐рд╡рд╣рди / http / рд╕рд░реНрд╡рд▓реЗрдЯ рд╕реЗ, рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
public final class WSServletContextListener {тАж}
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ ... рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JAX-WS рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдлрд╛рдЗрд▓реЗрдВ github:
github.com/futurelink/habrahabr рдкрд░ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ
рдХреБрд▓ рдореЗрдВ, рд╣рдореЗрдВ 4 рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
WSServletContextListener - MyServletContextListener,
ServletResourceLoader - MyServletResourceLoader,
рд╕рд░реНрд╡рд▓реЗрдЯрдХреЙрдирд░ - рдорд╛рдЗрд╕реЗрд░реНрд╡рд▓реЗрдЯрдХреЛрд░реНрдирд░,
рдкрд░рд┐рдирд┐рдпреЛрдЬрдирд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ - MyDeploymentDescriptorParser
WSServletContextListener рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ рдПрдХрд▓ рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рднреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА:
static final String JAXWS_RI_RUNTIME = "/WEB-INF/sun-jaxws.xml";
рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд:
static final String JAXWS_RI_RUNTIME = "/META-INF/sun-jaxws.xml";
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм, JAX-WS рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреИрдирд╛рддреА рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬреЗрдЯреНрдЯреА рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдпрджрд┐ рдХреЛрдИ рд╢реБрд░реВ рд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдкрдврд╝рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред