рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛ рд╕реАрдЦрдирд╛: рд╕реНрдкреНрд░рд┐рдВрдЧ 3 MVC + рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реБрд░рдХреНрд╖рд╛ + рд╣рд╛рдЗрдмрд░рдиреЗрдЯ

рд╢реБрдн рджреЛрдкрд╣рд░ рдореЗрд░рд╛ рдирд╛рдо рдПрдВрдЯрди рд╢реЙрд╕реНрдЯрдиреА рд╣реИред



рдпрд╣ рдЬрд╛рд╡рд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдореЗрд░рд╛ рдЕрдЧрд▓рд╛ рд▓реЗрдЦ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреА рдЧрдИ рдПрдХ рдЫреЛрдЯреА рдЧреНрд░рд╛рд╣рдХ рд▓реЗрдЦрд╛ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдПрдВред



рдЖрд╡реЗрджрди рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:



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



рд╣рдо рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:





рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ:





рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдкрд░ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдХрдИ рдмрд┐рдВрджреБ рдЫреВрдЯ рдЧрдП рдереЗред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдЪреВрдХ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред



рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╢реБрд░реБрдЖрдд рдХреЗ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд╛рд╡рд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╕рдВрдпреБрдХреНрдд рдЙрдкрдпреЛрдЧ рджрд┐рдЦрд╛рдирд╛ рд╣реИред





рд╕рд╛рдордЧреНрд░реА



  1. IDE рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред
  2. рдкреИрдХреЗрдЬ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдирд╛ред
  3. рдбреЛрдореЗрди рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛ред
  4. рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд▓реЗрдпрд░ред
  5. рд╕реЗрд╡рд╛ рдкрд░рддред
  6. рд╡реЗрдм рдЬреЛрдбрд╝рдирд╛ред
  7. рдирд┐рдпрдВрддреНрд░рдХред
  8. рджреЗрдЦреЗрдВред
  9. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪред
  10. рд╕реБрд░рдХреНрд╖рд╛ред
  11. рдирд┐рд╖реНрдХрд░реНрд╖ред




рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рдЖрд╡реЗрджрди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ред

рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рдЖрд╡реЗрджрди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ред



1. IDE рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛





рд╣рдо рдЧреНрд░рд╣рдг рдЖрдИрдбреАрдИ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрдкрд╛рджрдХ рд╕реНрдкреНрд░рд┐рдВрдЧрд╕реНрд░реЛрд╕ рдЯреВрд▓ рд╕реВрдЯ (рдПрд╕рдЯреАрдПрд╕) рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░реЗрдВрдЧреЗред



STS рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ:

рдлрд╝рд╛рдЗрд▓> рдирдпрд╛> рд╕реНрдкреНрд░рд┐рдВрдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ> рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯред



рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо: рд╕рдВрдкрд░реНрдХ рдкреНрд░рдмрдВрдзрдХ

рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкреИрдХреЗрдЬ: net.schastny.contactmanager



рдПрд╕рдЯреАрдПрд╕



рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдореВрд▓ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдЧреА:

src / main / java рдЖрд╡реЗрджрди рдХреА рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдПрдВред
src / рдореБрдЦреНрдп / рд╕рдВрд╕рд╛рдзрди рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЕрдиреНрдп рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ (рд╕рдВрд╕рд╛рдзрди): рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, log4j.xml рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓, рдореЗрдЯрд╛-рдЗрди рдлрд╝реЛрд▓реНрдбрд░ред
src / рдкрд░реАрдХреНрд╖рдг / рдЬрд╛рд╡рд╛ JUnit рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реЛрд▓реНрдбрд░ред
src / рдкрд░реАрдХреНрд╖рдг / рд╕рдВрд╕рд╛рдзрди рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд╕рдВрд╕рд╛рдзрди рдлрд╝реЛрд▓реНрдбрд░ред
src / main / webapp рд╡рд╣ рдлрд╝реЛрд▓реНрдбрд░ рдЬрд╣рд╛рдБ рд╕рдВрдкрд░реНрдХ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд╡реЗрдм рдШрдЯрдХ рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ web.xml, рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде xml-files, jsp-pagesред

рдзреНрдпрд╛рди, рд╕реНрдереИрддрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд╕рд╛рдзрди: рдЪрд┐рддреНрд░, рд╕реАрдПрд╕рдПрд╕, js- рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕рд╛рдзрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВред
pom.xml рдорд╛рд╡реЗрди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИред




рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (pom.xml) рдореЗрдВ, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ 3.0.4 рд╕реЗ рдмрджрд▓реЗрдВ ред



рдзреНрдпрд╛рди рджреЗрдВ: рдЖрдИрдбреАрдИ рдХреЗ рдмрд╛рд╣рд░ рдорд╛рд╡реЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдпрд╣рд╛рдВ рдкрдврд╝реЗрдВред



2. рдПрдХ рдкреИрдХреЗрдЬ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдирд╛



net.schastny.contactmanager.dao рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд▓реЗрдпрд░ред

рдЗрд╕рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ - рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд▓реЗрд╕ рдХрд░реЗрдВрдЧреЗред
net.schastny.contactmanager.domain рдбреЛрдореЗрди рдкрд░рддред

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ POJO рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЗрдХрд╛рдИ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рдВрдкрд░реНрдХ рд╡рд░реНрдЧ рд╣реИред
net.schastny.contactmanager.service рд╕реЗрд╡рд╛ рдкрд░рдд рдЖрд╡реЗрджрдиред

рдЗрд╕рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
net.schastny.contactmanager.web рд╡реЗрдм рдкрд░рдд рдЖрд╡реЗрджрдиред

рдпрд╣рд╛рдВ рдирд┐рдпрдВрддреНрд░рдХ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдмрддрд╛рддреА рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡реЗрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред


рдиреЛрдЯ: рд╕рдВрдкрд╛рджрдХ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



3. рдПрдХ рдбреЛрдореЗрди рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛



package net.schastny.contactmanager.domain; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "CONTACTS") public class Contact { @Id @Column(name = "ID") @GeneratedValue private Integer id; @Column(name = "FIRSTNAME") private String firstname; @Column(name = "LASTNAME") private String lastname; @Column(name = "EMAIL") private String email; @Column(name = "TELEPHONE") private String telephone; // Getters and setters }
      
      





рдмреАрди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ pom.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбреЛрдореЗрди рдореЙрдбрд▓ рд╕реЗ рд╡рд░реНрдЧ рд╕реНрдкреНрд░рд┐рдВрдЧ рдпрд╛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

  <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency>
      
      





рдкреНрд░рдпреБрдХреНрдд рдПрдиреЛрдЯреЗрд╢рди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ред

@Entity



рдПрдХ рд╡рд░реНрдЧ рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
@Table(name = "CONTACTS")



рд╡рд░реНрдЧ рдЧреБрдг CONTACTS рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
@Column(name = "FIRSTNAME")



рдпрд╣ рдкреНрд░реЙрдкрд░реНрдЯреА рдлрд░реНрд╕реНрдЯрдиреЗрдо рдХреЙрд▓рдо рдореЗрдВ рд╕реНрдЯреЛрд░ рдХреА рдЬрд╛рдПрдЧреАред
@Id



рдпрд╣ рдХреНрд╖реЗрддреНрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ, рдЕрд░реНрдерд╛рдд рд╣рдо рдЗрд╕ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗред
@GeneratedValue



рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмрд▓реНрдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред




4. рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд▓реЗрдпрд░



рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

 package net.schastny.contactmanager.dao; import java.util.List; import net.schastny.contactmanager.domain.Contact; public interface ContactDAO { public void addContact(Contact contact); public List<Contact> listContact(); public void removeContact(Integer id); }
      
      





 package net.schastny.contactmanager.dao; import java.util.List; import net.schastny.contactmanager.domain.Contact; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class ContactDAOImpl implements ContactDAO { @Autowired private SessionFactory sessionFactory; public void addContact(Contact contact) { sessionFactory.getCurrentSession().save(contact); } @SuppressWarnings("unchecked") public List<Contact> listContact() { return sessionFactory.getCurrentSession().createQuery("from Contact") .list(); } public void removeContact(Integer id) { Contact contact = (Contact) sessionFactory.getCurrentSession().load( Contact.class, id); if (null != contact) { sessionFactory.getCurrentSession().delete(contact); } } }
      
      





Pom.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдЕрджреНрдпрддрди рдХрд░реЗрдВред рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдЬреЛрдбрд╝реЗрдВред

  <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.3.2.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.3.1.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>3.3.0.ga</version> </dependency>
      
      





рдкреНрд░рдпреБрдХреНрдд рдПрдиреЛрдЯреЗрд╢рди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ред

@Repository



рд╕рд╛рд░рд╛рдВрд╢ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдПрдХ рднрдВрдбрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢реА рдЕрдкрд╡рд╛рдж рдЕрдиреБрд╡рд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдкрд╡рд╛рдж рдЕрдиреБрд╡рд╛рдж рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рдХреА рдкрд░рдд рдбреАрдПрдУ рдкрд░рдд рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рддрдХрдиреАрдХреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЕрдкрд╡рд╛рджреЛрдВ (рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдЕрдкрд╡рд╛рдж) рдХреА рд╕рд╛рдорд╛рдиреНрдп рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗ рдирд┐рдкрдЯреЗрдЧреАред
@Autowired



рдПрдиреЛрдЯреЗрд╢рди рдЖрдкрдХреЛ SessionFactory рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдорд╛рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред




5. рд╕реЗрд╡рд╛ рдкрд░рдд



рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

 package net.schastny.contactmanager.service; import java.util.List; import net.schastny.contactmanager.domain.Contact; public interface ContactService { public void addContact(Contact contact); public List<Contact> listContact(); public void removeContact(Integer id); }
      
      





рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ContactServiceImpl.java рд╡рд░реНрдЧ рд╣реИред

 package net.schastny.contactmanager.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import net.schastny.contactmanager.dao.ContactDAO; import net.schastny.contactmanager.domain.Contact; @Service public class ContactServiceImpl implements ContactService { @Autowired private ContactDAO contactDAO; @Transactional public void addContact(Contact contact) { contactDAO.addContact(contact); } @Transactional public List<Contact> listContact() { return contactDAO.listContact(); } @Transactional public void removeContact(Integer id) { contactDAO.removeContact(id); } }
      
      





Pom.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдЕрджреНрдпрддрди рдХрд░реЗрдВред рд▓реЗрдирджреЗрди рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВред

  <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${org.springframework-version}</version> </dependency>
      
      





рдкреНрд░рдпреБрдХреНрдд рдПрдиреЛрдЯреЗрд╢рди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ред

@Service рд╣рдо рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ - рдПрдХ рд╕реЗрд╡рд╛ рдкрд░рдд рдХрд╛ рдПрдХ рдШрдЯрдХред рдПрдХ рд╕реЗрд╡рд╛ @Component рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реИред рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреАрди рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд░реВрдЯ-рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЗрдЦреЗрдВред xml)ред
@Transactional рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд▓реЗрди-рджреЗрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд▓реЗрди-рджреЗрди рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ, рдФрд░ рдЬрдм рдПрдХ RuntimeException рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред




6. рд╡реЗрдм рдЬреЛрдбрд╝рдирд╛



рд╣рдо рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ - xml рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрдзреЗрд░реЗ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдПрдХ рдмрдбрд╝реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред



Xml-footcloths рдХреЗ рдмрд╛рдж рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдирд┐рдпрдВрддреНрд░рдХ рд▓рд┐рдЦреЗрдВрдЧреЗред



рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

web.xml рдпрд╣ рдПрдХ рддреИрдирд╛рддреА рд╡рд┐рд╡рд░рдгрдХ рд╣реИ ред рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред
рд╡рд╕рдВрдд / рдЬрдбрд╝-рд╕рдВрджрд░реНрднред xml рд░реВрдЯ рд╕рдВрджрд░реНрдн ред рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рд╕рдВрджрд░реНрднред рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рдмреАрдиреНрд╕ рд╕рднреА рд╕рд░реНрд╡рд▓реЗрдЯ рдФрд░ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдмрд┐рдиреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ)ред
рд╡рд╕рдВрдд / data.xml рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ред
рд╡рд╕рдВрдд / рд╕реБрд░рдХреНрд╖рд╛ред xml рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ред
рд╡рд╕рдВрдд / appServlet / рд╕рд░реНрд╡рд▓реЗрдЯ-рд╕рдВрджрд░реНрднред xml рдбрд┐рд╕реНрдкреИрдЪрд░рд╕рд░реНрд╡реЗрдЯ рд╕рдВрджрд░реНрдн ред рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рдФрд░ рд╕реЗрдо рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЗрд╕ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рд╡рд╕рдВрдд / appServlet / рдирд┐рдпрдВрддреНрд░рдХреЛрдВред xml рдЗрд╕ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓ред




рд╡рд╕рдВрдд / рд╕реБрд░рдХреНрд╖рд╛ред xml

 <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> </beans:beans>
      
      







рдкреНрд░рдпреБрдХреНрдд рдлрд▓рд┐рдпреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред

messageSource рдЖрд╡реЗрджрди рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреАрдиред рдиреАрдЪреЗ рд╣рдо рд░реВрд╕реА рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде messages_en.properties рдФрд░ messages_ru.properties рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВрдЧреЗред
propertyConfigurer рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ jdbc.properties рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ ред рд╣рдо рдПрдХ jdbc рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд░реНрдЧ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдЕрдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
sessionFactory рдпрд╣ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреАрди рд╣реИред Hibernate.cfg.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдХрд╛рдИ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рд╣реЛрдЧреАред
transactionManager рд▓реЗрди-рджреЗрди рдкреНрд░рдмрдВрдзрдХ рд╕реЗрдЯрд┐рдВрдЧ рдмреАрди ред рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓реЗрдирджреЗрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдлрд╛рдЗрд▓реЗрдВ:

/src/main/resources/messages_en.properties

/src/main/resources/messages_ru.properties

/src/main/resources/hibernate.cfg.xml

рд╡реЗрдм-рдЗрдиреНрдлреЛ / jdbc.properties



7. рдирд┐рдпрдВрддреНрд░рдХ



 package net.schastny.contactmanager.web; import java.util.Map; import net.schastny.contactmanager.domain.Contact; import net.schastny.contactmanager.service.ContactService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class ContactController { @Autowired private ContactService contactService; @RequestMapping("/index") public String listContacts(Map<String, Object> map) { map.put("contact", new Contact()); map.put("contactList", contactService.listContact()); return "contact"; } @RequestMapping("/") public String home() { return "redirect:/index"; } @RequestMapping(value = "/add", method = RequestMethod.POST) public String addContact(@ModelAttribute("contact") Contact contact, BindingResult result) { contactService.addContact(contact); return "redirect:/index"; } @RequestMapping("/delete/{contactId}") public String deleteContact(@PathVariable("contactId") Integer contactId) { contactService.removeContact(contactId); return "redirect:/index"; } }
      
      





рдкреНрд░рдпреБрдХреНрдд рдПрдиреЛрдЯреЗрд╢рди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ред

@Controller рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рдХреЛ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╡рд░реНрдЧ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░реНрд╡рд▓реЗрдЯ (HttpServlet) (HttpServletRequest рдФрд░ HttpServletResponse рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ) рдХреЗ рд╕рдорд╛рди рдПрдХ рдШрдЯрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдорд╡реАрд╕реА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рдеред
@RequestMapping рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рдзрд┐ рдпрд╛ рд╡рд░реНрдЧ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ URL рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдХреНрд╡реЗрд░реА рдХреЛ рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐ рдпрд╛ рд╕рдВрдкреВрд░реНрдг рдХреНрд▓рд╛рд╕ рдореЗрдВ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ HTTP рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (GET / POST), рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВред
@ModelAttribute рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЙрд╕ рдореЙрдбрд▓ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ jsp рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@PathVariable рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ URL рд╕реЗ рдПрдХ рдЪрд░ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред




8. рджреГрд╢реНрдп



/src/main/webapp/WEB-INF/views/contact.jsp



9. рдЖрд╡реЗрджрди рдХрд╛ рд╢реБрднрд╛рд░рдВрдн



рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рджреЛ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, jdbc.properties рдлрд╝рд╛рдЗрд▓ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдВ:

 CREATE USER contactmanager@localhost identified BY '1234'; GRANT usage ON *.* TO contactmanager@localhost identified BY '1234'; CREATE DATABASE IF NOT EXISTS contactmanager; GRANT ALL privileges ON contactmanager.* TO contactmanager@localhost; USE contactmanager; CREATE TABLE CONTACTS ( id INT PRIMARY KEY AUTO_INCREMENT, firstname VARCHAR(30), lastname VARCHAR(30), telephone VARCHAR(15), email VARCHAR(30), created TIMESTAMP DEFAULT NOW() );
      
      





рджреВрд╕рд░реЗ, pom.xml рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдВред

  <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
      
      





рдЕрдм рд╕рд░реНрд╡рд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдВ : ContactManager> рдЗрд╕ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдБ> рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рд╛рдПрдБ> SpringSource рдЯреАрд╕реА рд╕рд░реНрд╡рд░ рдбреЗрд╡рд▓рдкрд░ рд╕рдВрд╕реНрдХрд░рдг v2.0 ред







рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ http: // localhost: 8080 / ContactManager рдкрддрд╛ рдЦреЛрд▓реЗрдВред







рдиреЛрдЯ: рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЯреЗрдмрд▓реНрд╕, рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди, рдПрдбрд┐рдЯрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рджреЗрд╢реА рд╕рд┐рд░рд┐рд▓рд┐рдХ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлрдЯрд╛ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИред



рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк src / main / resource / log4j.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

  <!--org.hibernate.SQL logger--> <logger name="org.hibernate"> <level value="info"/> </logger>
      
      





10. рд╕реБрд░рдХреНрд╖рд╛



Pom.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдЕрджреНрдпрддрди рдХрд░реЗрдВред рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝реЗрдВред

  <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>${org.springframework-version}</version> </dependency>
      
      







рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░ web.xml рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

  <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
      
      







рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдкреНрд░рд╡реЗрд╢ рдкреГрд╖реНрда рдХреЛ WEB-INF рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП , рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЬрдбрд╝ рдореЗрдВ - рд╡реЗрдмреИрдк рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦ рджреЗрдВрдЧреЗред

webapp / login.jsp



рд╣рдо рдПрд░рд░ рдкреЗрдЬ 403 рдХреЛ рднреА рд╡рд╣рд╛рдВ рд░рдЦреЗрдВрдЧреЗ : webapp / error403.jsp



рдЪрд▓реЛ security.xml рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

security.xml



Security.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреА рдЧрдИ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг



рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рддреАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреВрдорд┐рдХрд╛рдПрдБ) рд╣реИрдВ:



рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЕрдВрддрд░:





рдпреВрдЬрд░ рдбреЗрдЯрд╛ рдХрд╣рд╛рдВ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реИ



рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реАрдзреЗ рд╕рдВрднрд╡ рд╣реИ, рдЕрдЧрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВред рдпрд╣ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ, рдпрд╣ LDAP рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╕рдВрднрд╡ рд╣реИред



рдкрд╛рд╕рд╡рд░реНрдб рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ ( рд╕реБрд░рдХреНрд╖рд╛.рдПрдХреНрд╕рдПрдордПрд▓ )ред

  <authentication-manager> <authentication-provider> <jdbc-user-service data-source-ref="dataSource" /> </authentication-provider> </authentication-manager>
      
      







рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ред

 <remember-me />
      
      



рдмрд╣реБрдХреНрд░рд┐рдпрд╛ рд╕рдорд░реНрдердиред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
 <anonymous username="guest" granted-authority="ROLE_ANONYMOUS" />
      
      



рдПрдХ рдЕрдирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛, рддрд╛рдХрд┐ рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВред
 <password-encoder hash="md5" />
      
      



рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░реВрдк рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рднрдВрдбрд╛рд░рдгред

рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред




11. рдирд┐рд╖реНрдХрд░реНрд╖



рд╡рд╣ рд╕рдм рд╣реИ! рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, jQuery рдкрд░ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ ( рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ ) рдФрд░ рдкреИрд╕реЗ рдХреЗ рд▓рд┐рдП рд╢рд┐рд▓реНрдк рдмреЗрдЪрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣, рдореЗрд░реЗ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред



рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐



рд▓реЗрдЦ рдореЗрдВ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред



рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди:



1. рд╕реНрдкреНрд░рд┐рдВрдЧ рд░реЗрд╕рд┐рдкреА: рдП рдкреНрд░реЙрдмреНрд▓рдо-рд╕реЙрд▓реНрдпреВрд╢рди рдПрдкреНрд░реЛрдЪ, рд╕реЗрдХреЗрдВрдб рдПрдбрд┐рд╢рди, рдЧреИрд░реА рдореИрдХ, рдХреЗрди рд╕рд┐рдк, рдЬреЛрд╢ рд▓реЙрдиреНрдЧ, рдбреИрдирд┐рдпрд▓ рд░реБрдмрд┐рдпреЛред

2. рдмрдирд╛рдПрдБ рд╕реНрдкреНрд░рд┐рдВрдЧ 3 MVC рд╣рд╛рдЗрдмрд░рдиреЗрдЯ 3 рдЙрджрд╛рд╣рд░рдг рдЧреНрд░рд╣рдг рдореЗрдВ рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ,

3. рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдВрджрд░реНрдн рджрд╕реНрддрд╛рд╡реЗрдЬ,

4. рдХреАрде рдбреЛрдирд╛рд▓реНрдб рджреНрд╡рд╛рд░рд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА 3 рдХрд╛ рдирд┐рд░реНрдорд╛рдг ред



рдЖрдк рдпрд╣рд╛рдВ рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред



All Articles