Êíèãà 1 - Íà÷àëüíûå ñâåäåíèÿ
Êíèãà 2 - Áîëåå ïðîôåññèîíàëüíûé ïîäõîä |
Ñòóäåí÷åñêèé îòäåë êàäðîâ Ïîñîáèå ïî JAVA-òåõíîëîãèÿì (ñ) AntonSaburov «Ñòóäåí÷åñêèé îòäåë êàäðîâ» â âèäå Enterprise-ïðèëîæåíèÿ Íó
âîò ìû è äîáðàëèñü äî êîíå÷íîé öåëè íàøåãî îçíàêîìëåíèÿ ñ òåõíîëîãèåé EJB.
Íåñîìíåííî ìû íå ðàññìîòðåëè äîâîëüíî ìíîãî äëÿ ýòîé òåõíîëîãèè, íî àâòîð
ñòàâèë ñåáå öåëü îçíàêîìèòü, äàòü íåêóþ íèòî÷êó, çà êîòîðóþ âû ñàìè ñìîæåòå
ðàññêðó÷èâàòü ýòó òåõíîëãèþ. Ñäåëàþ
òîëüêî îäíî çàìå÷àíèå – äëÿ áûñòðîãî îáíîâëåíèÿ èçìåíåíèé â êîäå ÿ ñîâåòóþ
èñïîëüçîâàòü ïðàâóþ êíîïêó ìûøè – êëèêàåòå íà StudentsApp è âûáèðàåòå ïóíêò «Undeploy and Deploy» ×òîáû
íå îòêëàäûâàòü â äîëãèé ÿùêè, íà÷íåì ñ òåêñòîâ. Ïîñëå êàæäîãî ôàéëà ÿ áóäó
êîììåíòèðîâàòü îñîáî âàæíûå ó÷àñòêè êîäà. È íà÷íåì ìû ñ ôàéëîâ, êîòîðûå íàì
ñãåíåðèë NetBeans ïî ñòðóêòóðå íàøèõ òàáëèö – Groups.java è Students.java Groups.java package students.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; @Entity @Table(name = "groups") @NamedQueries({
@NamedQuery(name = "Groups.findByGroupId", query =
"SELECT g FROM Groups g WHERE g.groupId = :groupId"),
@NamedQuery(name = "Groups.findByGroupName", query =
"SELECT g FROM Groups g WHERE g.groupName = :groupName"),
@NamedQuery(name = "Groups.findByCurator", query =
"SELECT g FROM Groups g WHERE g.curator = :curator"),
@NamedQuery(name = "Groups.findBySpeciality", query =
"SELECT g FROM Groups g WHERE g.speciality = :speciality") }) public class Groups implements Serializable { private
static final long serialVersionUID = 1L; @Id @Column(name
= "group_id", nullable = false) private
Integer groupId; @Column(name
= "groupName", nullable = false) private
String groupName; @Column(name
= "curator", nullable = false) private
String curator; @Column(name
= "speciality", nullable = false) private
String speciality; public
Groups() { } public
Groups(Integer groupId) {
this.groupId = groupId; } public
Groups(Integer groupId, String groupName, String curator, String speciality) {
this.groupId = groupId;
this.groupName = groupName;
this.curator = curator;
this.speciality = speciality; } public
Integer getGroupId() { return
groupId; } public void
setGroupId(Integer groupId) {
this.groupId = groupId; } public
String getGroupName() { return
groupName; } public void
setGroupName(String groupName) { this.groupName
= groupName; } public
String getCurator() { return
curator; } public void
setCurator(String curator) {
this.curator = curator; } public
String getSpeciality() { return
speciality; } public void
setSpeciality(String speciality) {
this.speciality = speciality; } @Override public int
hashCode() { int hash
= 0; hash +=
(groupId != null ? groupId.hashCode() : 0); return
hash; } @Override public
boolean equals(Object object) { // TODO:
Warning - this method won't work in the case the id fields are not set if
(!(object instanceof Groups)) {
return false; } Groups
other = (Groups) object; if ((this.groupId == null &&
other.groupId != null) || (this.groupId != null &&
!this.groupId.equals(other.groupId))) {
return false; } return
true; } @Override public
String toString() { return
"students.entity.Groups[groupId=" + groupId + "]"; } } Â
äàííîì ôàéëå âñå ñàìîå èíòåðåñíîå íàõîäèòñÿ â ñàìîì íà÷àëå – ýòî ñåêöèÿ, ãäå
î÷åíü ìíîãî íàäïèñåé @NamedQuery. Âîîáùå-òî îíè ãåíåðÿòñÿ â
îäíó ñòðîêó, íî ÿ äëÿ óäîáñòâà âîñïðèÿòèÿ ðàçäåëèë èõ íà íåñêîëüêî. Ýòî ìîæíî
ñäåëàòü áåç êàêèõ-ëèáî ïðîáëåì. Ìû óâèäèì íåêîòîðûå èõ @NamedQuery ÷óòü
íèæå. À ïîêà âàæíî óÿñíèòü ñëåäóþùåå – ýòî ñïîñîá, êîòîðûé ïîçâîëÿåò íàì ïèñàòü
íà EJB-QL. EJB-QL – ýòî íåêîòîðûé àíàëîã SQL,
òîëüêî äëÿ EJB. Åñëè âíèìàòåëüíî ïîñìîòðåòü íà çíà÷åíèÿ ñòðîê query,
òî ìîæíî óâèäåòü, ÷òî ìû â êàêîé-òî ìåðå îáðàùàåìñÿ ê îáúåêòàì è èõ ïîëÿì. Âåäü
íà ñàìîì äåëå â òàáëèöå groups íåò
ïîëÿ groupId. Òàì åñòü group_id.
Íî åñëè ïîñìîòðåòü ÷óòü íèæå, òî ìîæíî óâèäåòü äîïîëíèòåëüíóþ àííîòàöèþ, êîòîðàÿ
«îáîðà÷èâàåò» ÷ëåíû íàøåãî êëàññà. È ýòî ïîçâîëÿåò íàì òàê êðàñèâî äåëàòü SELECT.
Êðîìå òîãî ìîæíî óâèäåòü èìåíîâàííûå ïàðàìåòðû – îíè âûäåëÿþòñÿ òåì, ÷òî ïåðåä
íèìè ñòàâèòñÿ äâîåòî÷èå. Èõ õîðîøî äîëæíî áûòü âèäíî. Äóìàþ,
÷òî ïîëÿ, êîòîðûå îïèñàíû âîçëå @Column (name è nullable) äîñòàòî÷íî î÷åâèäíû. Òàêæå
ìîæíî óâèäåòü àííîòàöèþ @Id âîçëå ïîëÿ group_id.
Ïðîøó âàñ îòìåòèòü, ÷òî ýòî íå ýëåìåíòàðíûé òèï äàííûõ int, à ïîëíîöåííûé êëàññ Integer.
Ò.å. îí ìîæåò áûòü ðàâåí null. Ïî÷åìó ýòî âàæíî ìû óâèäèì
íåêîëüêî ïîçæå. À ïîêà çàïîìíèòå, ÷òî äàæå ID ìîæåò áûòü NULL. Students.java package students.entity; import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity @Table(name = "students") @NamedQueries({
@NamedQuery(name = "Students.findByStudentId", query =
"SELECT s FROM Students s WHERE s.studentId = :studentId"),
@NamedQuery(name = "Students.findByFirstName", query =
"SELECT s FROM Students s WHERE s.firstName = :firstName"), @NamedQuery(name
= "Students.findBySurName", query =
"SELECT s FROM Students s WHERE s.surName = :surName"),
@NamedQuery(name = "Students.findByPatronymic", query =
"SELECT s FROM Students s WHERE s.patronymic = :patronymic"), @NamedQuery(name
= "Students.findByDateOfBirth", query =
"SELECT s FROM Students s WHERE s.dateOfBirth = :dateOfBirth"),
@NamedQuery(name = "Students.findBySex", query =
"SELECT s FROM Students s WHERE s.sex = :sex"), @NamedQuery(name
= "Students.findByGroupId", query =
"SELECT s FROM Students s WHERE s.groupId = :groupId"),
@NamedQuery(name = "Students.findByEducationYear", query =
"SELECT s FROM Students s WHERE s.educationYear = :educationYear"), @NamedQuery(name
= "Students.findByGroupAndYear", query =
"SELECT s FROM Students s WHERE s.groupId = :groupId AND
s.educationYear=:educationYear"),
@NamedQuery(name = "Students.updateGroupAndYear", query =
"UPDATE Students s SET s.groupId=:groupId, s.educationYear=:educationYear
WHERE s.groupId = :oldGroupId AND s.educationYear=:oldEducationYear") }) public class Students implements Serializable { private
static final long serialVersionUID = 1L; @Id @Column(name
= "student_id", nullable = false) private
Integer studentId; @Column(name
= "firstName", nullable = false) private
String firstName; @Column(name
= "surName", nullable = false) private
String surName; @Column(name
= "patronymic", nullable = false) private
String patronymic; @Column(name
= "dateOfBirth", nullable = false)
@Temporal(TemporalType.DATE) private Date
dateOfBirth; @Column(name
= "sex") private
Character sex = 'Ì'; @Column(name
= "group_id", nullable = false) private int
groupId; @Column(name
= "educationYear", nullable = false) private int
educationYear; public
Students() { } public
Students(Integer studentId) {
this.studentId = studentId; } public Students(Integer
studentId, String firstName, String surName, String patronymic, Date
dateOfBirth, int groupId, int educationYear) {
this.studentId = studentId;
this.firstName = firstName;
this.surName = surName;
this.patronymic = patronymic;
this.dateOfBirth = dateOfBirth;
this.groupId = groupId;
this.educationYear = educationYear; } public
Integer getStudentId() { return
studentId; } public void setStudentId(Integer
studentId) {
this.studentId = studentId; } public
String getFirstName() { return
firstName; } public void
setFirstName(String firstName) {
this.firstName = firstName; } public
String getSurName() { return
surName; } public void
setSurName(String surName) {
this.surName = surName; } public
String getPatronymic() { return
patronymic; } public void
setPatronymic(String patronymic) { this.patronymic = patronymic; } public Date
getDateOfBirth() { return
dateOfBirth; } public void
setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth; } public
Character getSex() { return
sex; } public void
setSex(Character sex) { this.sex
= sex; } public int
getGroupId() { return
groupId; } public void
setGroupId(int groupId) {
this.groupId = groupId; } public int
getEducationYear() { return
educationYear; } public void
setEducationYear(int educationYear) {
this.educationYear = educationYear; } @Override public int
hashCode() { int hash
= 0; hash +=
(studentId != null ? studentId.hashCode() : 0); return
hash; } @Override public
boolean equals(Object object) { // TODO:
Warning - this method won't work in the case the id fields are not set if
(!(object instanceof Students)) { return false; } Students
other = (Students) object; if
((this.studentId == null && other.studentId != null) || (this.studentId
!= null && !this.studentId.equals(other.studentId))) {
return false; } return
true; } @Override public
String toString() { return
"students.entity.Students[studentId=" + studentId + "]"; } } Ýòîò
ôàéë óæå âûãëÿäèò çíàêîìûì. Åäèíñòâåííîå, ÷òî ìû â íåì ïîìåíÿëè – ýòî ñäåëàëè
íåñêîëüêî ñòðîê äëÿ èìåíîâàííûõ çàïðîñîâ (NamedQuery) è ÄÎÁÀÂÈËÈ ñâîè – äâà
ïîñëåäíèõ - "Students.findByGroupAndYear" è
"Students.updateGroupAndYear". Îíè íàì ïðîñòî ïîíàäîáÿòñÿ, ïîòîìó è
äîáàâèëè. Ïåðâûé
çàïðîñ îòëè÷àòåñÿ îò ñòàíäàðòíî ñãåíåðåííûõ òåì, ÷òî îí èñïîëüçóåò íå îäèí
äîïîëíèòåëüíûé ïàðàìåòð, à äâà. Âòîðîé çàïðîñ åùå èíòåðåñíåå – îí íå âîçâðàùàåò
äàííûå, îí èçìåíÿåò èõ. Íî â îñòàëüíîì íè÷åì îñîáûì íå âûäåëÿåòñÿ. ×òî
åùå õîòåëîñü áû îòìåòèòü – âñå ýòè ñòðàøíûå àííîòàöèè èíòåðåñíû èìåííî Application Server’ó.
Äëÿ òåõ, êòî íå èñïîëüçóåò èõ ýòî ñàìûå îáû÷íûå êëàññû ñ îáû÷íûìè ïîëÿìè. Èõ
ìîæíî ñêîìïèëèðîâàòü è èñïîëüçîâàòü ãäå óãîäíî. Íî êàê òîëüêî îíè ïîïàäàþò ê AppServer’ó,
òî ó òîãî ñðàçó ïîÿâëÿåòñÿ èíôîðìàöè î òîì, ê êàêîé òàáëèöå «ïðèâÿçàí» äàííûé
êëàññ. È òåïåðü êàê òîëüêî ïðîèñõîäèò êàêàÿ-ëèáî ðàáîòà ñ áàçîé äàííûõ íàø
êëàññ èñïîëüçóåòñÿ êàê õðàíèëèùå äëÿ äàííûõ èç ñòðîêè òàáëèöû. Ò.å. åñëè ìû
âûòàùèì ìíîãî çàïèñåé èç òàáëèöû students,
òî âñå îíè ëÿãóò â ñïèñîê, ýëåìåíòàìè êîòîðîãî áóäóò îáúåêòû êëàññà Students. È ýòî ìû óâèäèì ïðÿìî
ñåé÷àñ. Íàñòàëî âðåìÿ îáðàòèòü âçîð ê îäíîìó èç âàæíåéøèõ íàøèõ êëàññîâ – ManagementSystemBean è åãî èíòåðôåéñó ManagementSystemLocal. ManagementSystemLocal.java package students.logic; import java.util.List; import javax.ejb.Local; import students.entity.Groups; import students.entity.Students; @Local public interface ManagementSystemLocal { // Ïîëó÷èòü äàííûå îá îäíîì
ñòóäåíòå Students
getStudents(int studentId); // Ïîëó÷èòü ñïèñîê âñåõ
ãðóïï
List<Groups> getGroupsList(); // Ïîëó÷èòü ñïèñîê ñòóäåíòîâ äëÿ êîíêðåòíîé
ãðóïïû è êîíêðåòíîãî ãîäà îáó÷åíèÿ List<Students>
getStudentsFromGroup(int groupId, int year); // Ïåðåìåñòèòü ñòóäåíòîâ èç îäíîé ãðóïïû â
äðóãóþ. Ïðè÷åì ìû ó÷èòûâàåì è ãîä îáó÷åíèÿ void
moveStudentsToGroup(int groupId, int year, int newGroupId, int newYear); // Äîáàâèòü íîâîãî ñòóäåíòà void
insertStudents(Students st); // Èçìåíèòü äàííûå î
ñòóäåíòå void
updateStudents(Students st); // Óäàëèòü ñòóäåíòà void deleteStudents(int
studentsId); } Çäåñü
â îáùåì-òî íè÷åãî îñîáåííîãî íåò – îïèñàíû íåîáõîäèìûå íàì ìåòîäû. È èíòåðôåéñ
èõ ñîäåðæèò. Åäèíñòâåííîå, ÷òî âàì ðåêîìåíäóåòñÿ ñäåëàòü – ýòî ïðî÷èòàòü
êîììåíòàðèè äëÿ ÷åãî êàæäûé ìåòîä ïðåäíàçíà÷åí. À
âîò ðåàëèçàöèÿ ó íàñ çàéìåò íåñêîëüêî áîëüøå âíèìàíèÿ è ñèë. Èòàê: ManagementSystemBean.java package students.logic; import java.sql.Ref; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import students.entity.Groups; import students.entity.Students; @Stateless (name="ManagementSystem") public class ManagementSystemBean implements
ManagementSystemLocal {
@PersistenceContext private
EntityManager em; public void
persist(Object object) {
em.persist(object); } public
Students getStudents(int studentId) { return
em.find(Students.class, studentId); } public
List<Groups> getGroupsList() { Query q
= em.createQuery("SELECT g FROM Groups g");
List<Groups> l= q.getResultList(); return
l; } public
List<Students> getStudentsFromGroup(int groupId, int year) { Query q
= em.createNamedQuery("Students.findByGroupAndYear");
q.setParameter("groupId", groupId);
q.setParameter("educationYear", year);
List<Students> l= q.getResultList(); return
l; } public void
moveStudentsToGroup(int groupId, int year, int newGroupId, int newYear) { Query q
= em.createNamedQuery("Students.updateGroupAndYear");
q.setParameter("groupId", newGroupId);
q.setParameter("educationYear", newYear);
q.setParameter("oldGroupId", groupId);
q.setParameter("oldEducationYear", year);
q.executeUpdate(); } public void
insertStudents(Students st) {
em.persist(st); } public void
updateStudents(Students st) { Students
sOld = em.find(Students.class, st.getStudentId());
sOld.setFirstName(st.getFirstName());
sOld.setSurName(st.getSurName());
sOld.setPatronymic(st.getPatronymic());
sOld.setDateOfBirth(st.getDateOfBirth());
sOld.setGroupId(st.getGroupId());
sOld.setSex(st.getSex());
sOld.setEducationYear(st.getEducationYear());
em.persist(sOld); } public void
deleteStudents(int studentsId) { Students
sOld = em.find(Students.class, studentsId);
em.remove(sOld); } } Âîò
çäåñü íàì ïðèäåòñÿ ïîñìîòðåòü íà íåñêîëüêî ìåòîäîâ. getGroupsList()
– ýòîò ìåòîä ïîëó÷àåò ñïèñîê ãðóïï. Îáðàòèòå âíèìàíèå âîò íà ÷òî – çäåñü ìû
èñïîëüçóåì EJB-QL «íàïðÿìóþ». Ò.å. ñîçäàåì çàïðîñ è âûïîëíÿåì åãî. Â
îñòàëüíûõ ñëó÷àÿõ èñïîëüçóþòñÿ èìåíîâàííûå çàïðîñû. getStudentsFromGroup(int groupId, int year)
– çäåñü ìû èñïîëüçóåì èìåíîâàííûé çàïðîñ (êîòîðûé ìû ñîçäàëè). Â ïðèíöèïå
êàêèõ-òî ñëîæíîñòåé â êîäå ÿ íå âèæó – âñå äîñòàòî÷íî î÷åâèäíî. moveStudentsToGroup(int groupId, int year, int newGroupId, int newYear)
– â ýòîì ìåòîäå åñòü òîëüêî îäèí òîíêèé ìîìåíò – çäåñü ìû èñïîëüçóåì íåñêîëüêî
äðóãîé âûçîâ – executeUpdate. Â
äðóãèõ ñëó÷àÿõ ìû èñïîëüçîâàëè getResultList. È
âîò òóò ìû ïîäõîäèì ê ìåòîäàì, êîòîðûå ñîäåðæàò íåêóþ õèòðèíêó. insertStudents(Students st) – ýòîò ìåòîä áóäåò
ïðåêðàñíî ðàáîòàòü òîëüêî â îäíîì ñëó÷àå. ÅÑËÈ îáúåêò íå èìååò óñòàíîâëåííîãî
ïîëÿ studentsId. Ïîìíèòå ÿ îáðàùàë âàøå âíèìàíèå íà òî, ÷òî òåïåðü ID óæå
íå ýëåìåíòàðíûé òèï, à ðåàëüíûé êëàññ. Òàê âîò – åñëè îí ðàâåí NULL,
òîãäà áóäåò ïðîèçâîëèòñÿ åãî âñòàâêà â òàáëèöó. Åñëè æå ó íåãî áóäåò óñòàíîâëåí
ID – âñòàâêè íå áóäåò. Âåðíåå áóäåò, íî òîëüêî îäèí ðàç. Ýòî î÷åíü
âàæíûé ìîìåíò. Êîãäà
ÿ ïåðâûé ðàç âñòàâëÿþ íîâîãî ñòóäåíòà ñ óñòàíîâëåííûì ID, òî ïðîèñõîäèò ñëåäóþùåå – PersistenceManager ïðîâåðÿåò – íåò ëè ñòóäåíòà ñ òàêèì çíà÷åíèåì ID. Åñëè
íåò – òî îí åãî âñòàâëÿåò. Åñëè æå òàêîé ID áûë çàðåãåñòðèðîâàí, òî
äàííûå ñòóäåíòà ïûòàþòñÿ îáíîâèòü. ×òî î÷åíü âàæíî – PersistenceManager
íå äåëàåò
îáíîâëåíèÿ ID ïðè âñòàâêå ó îáúåêòà, êîòîðûé ìû âñòàâëÿëè. ×òî åùå íåïðèÿòíåå
– åñëè âû âñòàâèëè íîâîãî ñòóäåíòà ñ óñòàíîâëåííûì ID (íó òàê âûøëî), òî åñëè âû
îïÿòü ïîïûòàåòåñü ýòî ñäåëàòü, òî íè÷åãî íå âûéäåò. PersistenceManager
çàïîìèíàåò, ÷òî
óæå òàêîé ID áûë, è îí ïîïûòàåòñÿ ïðîàïäåéòèòü ñòóäåíòà. È òóò ìû îáðàòèì íàø
âçîð íà ìåòîä updateStudents. updateStudents(Students st) – ïîñìîòðèòå íà êîä ýòîãî
ìåòîäà. Â ïåðâîé ñòðîêå ÿ äîëæåí âûòàùèòü ñòóäåíòà ïî ID, èçìåíèòü åãî ïîëÿ íà íîâûå
çíà÷åíèÿ (êîòîðûå ÿ ïåðåäàë â àðãóìåíòå) è ñíîâà ñîõðàíèòü. Ò.å PersistenceManager äîëæåí èìåòü «ïðèâÿçàííûé» (attached) ê áàçå îáúåêò. ß ñåáå
ïî÷åìó-òî ñðàçó ïðåäñòàâèë, ÷òî ìû «çà ðåçèíî÷êó» âûòàñêèâàåì ñòðóêòóðó,
çàïîëíÿåì åå, à ïîòîì îòïóñêàåì. È PersistenceManager ñ óæå íîâûìè çíà÷åíèÿìè
ïðèòÿãèâàåò «çà ðåçèíî÷êó» èçìåíåííûé îáúåêò è çàïèñûâàåò åãî â áàçó. Ìîæåò ó
âàñ ïîÿâèòñÿ äðóãàÿ àññîöèàöèÿ – íî âîò ó ìåíÿ òàêàÿ ïîëó÷èëàñü. À ïðîñòî
çàïîëåííûé îáúåêò – îí ïðîñòî çàïîëåííûé îáõåêò, êîòîðûé íå èìååò ñâÿçè ñ áàçîé
è ïîòîìó ïðè ïîïûòêå åãî ñîõðàíåíèÿ âàì áóäåò âûäàíî ïðåäóïðåæäåíèå. Ïîïðîáóéòå
â ìåòîäå çàêîììåíòèðîâàòü âñå ñòðîêè è âñòàâüòå âîò òàêóþ: public void
updateStudents(Students st) { //
Students sOld = em.find(Students.class, st.getStudentId()); //
sOld.setFirstName(st.getFirstName()); //
sOld.setSurName(st.getSurName()); //
sOld.setPatronymic(st.getPatronymic()); //
sOld.setDateOfBirth(st.getDateOfBirth()); // sOld.setGroupId(st.getGroupId()); //
sOld.setSex(st.getSex()); //
sOld.setEducationYear(st.getEducationYear());
em.persist(st); } Ïîñìîòðèòå,
÷òî ïîëó÷èòñÿ. deleteStudents(int studentsId) – çäåñü òà æå ñàìàÿ èäå
«ðåçèíî÷êè». Âûòàñêèâàåì «ïðèâÿçàííûé» îáúåêò è óäàëÿåì. Ôàéëû
ñåðâëåòîâ ÿ êîììåíòèðîâàòü íå áóäó – îíè ïðîñòî î÷åíü ïîõîæè íà òå, ÷òî ìû
äåëàëè â ×àñòü
9 - Ïðîñòîå WEB-ïðèëîæåíèå. Ïðîñòî ïðèâåäó òåêñò. Íå çàáóäüòå – îíè äîëæíû íàõîäèòñÿ â
ïðîåêòå StudentsApp-war ! MainFrameServlet.java package students.web; import java.io.IOException; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.List; import javax.ejb.EJB; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import students.entity.Students; import students.entity.Groups; import students.logic.ManagementSystemLocal; import students.web.forms.MainFrameForm; import students.web.forms.StudentForm; public class MainFrameServlet extends HttpServlet { @EJB(name =
"ManagementSystem") private
ManagementSystemLocal ms; protected
void processRequest(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { int
answer = 0; answer =
checkAction(req); if
(answer == 1) {
Students s = new Students();
s.setStudentId(0); s.setDateOfBirth(new Date());
s.setEducationYear(Calendar.getInstance().get(Calendar.YEAR));
List<Groups> groups = ms.getGroupsList();
StudentForm sForm = new StudentForm();
sForm.initFromStudent(s);
sForm.setGroups(groups);
req.setAttribute("student", sForm);
getServletContext().getRequestDispatcher("/StudentFrame.jsp").forward(req,
resp);
return; } if
(answer == 2) { if
(req.getParameter("studentId") != null) {
int stId = Integer.parseInt(req.getParameter("studentId"));
Students s = ms.getStudents(stId);
List<Groups> groups = ms.getGroupsList();
StudentForm sForm = new StudentForm();
sForm.initFromStudent(s);
sForm.setGroups(groups);
req.setAttribute("student", sForm);
getServletContext().getRequestDispatcher("/StudentFrame.jsp").forward(req,
resp);
return; } } String
gs = req.getParameter("groupId"); String
ys = req.getParameter("year"); if
(answer == 3) {
String newGs = req.getParameter("newGroupId");
String newYs = req.getParameter("newYear");
ms.moveStudentsToGroup(Integer.parseInt(gs), Integer.parseInt(ys),
Integer.parseInt(newGs), Integer.parseInt(newYs)); gs =
newGs; ys =
newYs; } int
groupId = -1; if (gs
!= null) {
groupId = Integer.parseInt(gs); } int year
= Calendar.getInstance().get(Calendar.YEAR); if (ys
!= null) { year
= Integer.parseInt(ys); }
MainFrameForm form = new MainFrameForm();
List<Groups> groups = ms.getGroupsList(); if
(groupId == -1) {
Iterator<Groups> i = groups.iterator();
groupId = i.next().getGroupId(); }
List<Students> students = ms.getStudentsFromGroup(groupId, year);
form.setGroupId(groupId);
form.setYear(year);
form.setGroups(groups);
form.setStudents(students);
req.setAttribute("form", form);
getServletContext().getRequestDispatcher("/MainFrame.jsp").forward(req,
resp); } public void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
processRequest(req, resp); } public void
doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
processRequest(req, resp); } private int
checkAction(HttpServletRequest req) { if
(req.getParameter("Add") != null) {
return 1; } if
(req.getParameter("Edit") != null) {
return 2; } if
(req.getParameter("MoveGroup") != null) {
return 3; } if
(req.getParameter("Delete") != null) { if
(req.getParameter("studentId") != null) { ms.deleteStudents(Integer.parseInt(req.getParameter("studentId"))); }
return 0; } return
0; } } StudetnFrameServlet.java package students.web; import java.io.IOException; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.Calendar; import java.util.Iterator; import java.util.List; import javax.ejb.EJB; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import students.entity.Groups; import students.logic.ManagementSystemLocal; import students.entity.Students; import students.web.forms.MainFrameForm; public class StudentFrameServlet extends HttpServlet { @EJB(name =
"ManagementSystem") private
ManagementSystemLocal ms; private
static final SimpleDateFormat sdf = new
SimpleDateFormat("dd.MM.yyyy"); protected
void processRequest(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { String
sId = req.getParameter("studentId"); if (sId
!= null && req.getParameter("OK") != null) { try
{ if (Integer.parseInt(sId) > 0) {
updateStudent(req);
} else {
insertStudent(req);
} }
catch (SQLException sql_e) {
sql_e.printStackTrace(); throw new
IOException(sql_e.getMessage()); }
catch (ParseException p_e) {
throw new IOException(p_e.getMessage()); } } String
gs = req.getParameter("groupId"); String
ys = req.getParameter("educationYear"); int
groupId = -1; if (gs
!= null) {
groupId = Integer.parseInt(gs); } int year
= Calendar.getInstance().get(Calendar.YEAR); if (ys
!= null) { year
= Integer.parseInt(ys); }
MainFrameForm form = new MainFrameForm();
List<Groups> groups = ms.getGroupsList(); if
(groupId == -1) {
Iterator<Groups> i = groups.iterator();
groupId = i.next().getGroupId(); }
List<Students> students = ms.getStudentsFromGroup(groupId, year);
form.setGroupId(groupId);
form.setYear(year);
form.setGroups(groups);
form.setStudents(students);
req.setAttribute("form", form);
getServletContext().getRequestDispatcher("/MainFrame.jsp").forward(req,
resp); } @Override public void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { processRequest(req,
resp); } @Override public void
doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
processRequest(req, resp); } private void
updateStudent(HttpServletRequest req) throws SQLException, ParseException { Students
s = prepareStudent(req);
ms.updateStudents(s); } private void
insertStudent(HttpServletRequest req) throws SQLException, ParseException { Students
s = prepareStudent(req);
ms.insertStudents(s); } private
Students prepareStudent(HttpServletRequest req) throws ParseException { Students
s = new Students(); // Çäåñü âàæíî îòìåòèòü, ÷òî äëÿ ID
íåëüçÿ çàäàâàòü íè÷åãî åñëè íàäî äîáàâëÿòü //
ID äîëæåí áûòü ðàâåí NULL
if(Integer.parseInt(req.getParameter("studentId"))>0) {
s.setStudentId(Integer.parseInt(req.getParameter("studentId"))); }
s.setFirstName(req.getParameter("firstName").trim());
s.setSurName(req.getParameter("surName").trim());
s.setPatronymic(req.getParameter("patronymic").trim());
s.setDateOfBirth(sdf.parse(req.getParameter("dateOfBirth").trim())); if
(req.getParameter("sex").equals("0")) {
s.setSex('Ì'); } else {
s.setSex('Æ'); }
s.setGroupId(Integer.parseInt(req.getParameter("groupId").trim()));
s.setEducationYear(Integer.parseInt(req.getParameter("educationYear").trim())); return
s; } } MainFrameForm.java package students.web.forms; import java.util.Collection; public class MainFrameForm { private int
year; private int
groupId; private
Collection groups; private
Collection students; public void setYear(int year) {
this.year = year; } public int
getYear() { return
year; } public void
setGroupId(int groupId) {
this.groupId = groupId; } public int
getGroupId() { return
groupId; } public void
setGroups(Collection groups) {
this.groups = groups; } public
Collection getGroups() { return
groups; } public void
setStudents(Collection students) { this.students
= students; } public
Collection getStudents() { return
students; } } StudetnForm.java package students.web.forms; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.List; import students.entity.Groups; import students.entity.Students; public class StudentForm { private
static SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); private int
studentId; private
String firstName; private
String surName; private
String patronymic; private
String dateOfBirth; private int
sex; private int
groupId; private int
educationYear; private
List<Groups> groups; public void
initFromStudent(Students st) {
this.studentId = st.getStudentId();
this.firstName = st.getFirstName();
this.surName = st.getSurName();
this.patronymic = st.getPatronymic();
this.dateOfBirth = sdf.format(st.getDateOfBirth());
if(st.getSex().equals(new Character('Ì'))) { this.sex = 0; } else {
this.sex = 1; }
this.groupId = st.getGroupId();
this.educationYear = st.getEducationYear(); } public
String getDateOfBirth() { return
dateOfBirth; } public void
setDateOfBirth(String dateOfBirth) {
this.dateOfBirth = dateOfBirth; } public int
getEducationYear() { return
educationYear; } public void
setEducationYear(int educationYear) {
this.educationYear = educationYear; } public int
getGroupId() { return
groupId; } public void
setGroupId(int groupId) {
this.groupId = groupId; } public int
getStudentId() { return
studentId; } public void
setStudentId(int studentId) {
this.studentId = studentId; } public
String getFirstName() { return
firstName; } public void
setFirstName(String firstName) {
this.firstName = firstName; } public
String getPatronymic() { return
patronymic; } public void
setPatronymic(String patronymic) {
this.patronymic = patronymic; } public
String getSurName() { return
surName; } public void
setSurName(String surName) {
this.surName = surName; } public int
getSex() { return
sex; } public void
setSex(int sex) { this.sex =
sex; } public void
setGroups(List<Groups> groups) { this.groups
= groups; } public
Collection getGroups() { return
groups; } } Íó
è JSP ñòðàíè÷êè – âîò òàêèå. MainFrame.jsp <%@ page contentType="text/html;
charset=windows-1251" %> <%@ taglib uri="/WEB-INF/tld/c.tld"
prefix="c" %> <html> <head>
<title>Ñïèñîê ñòóäåíòîâ</title>
</head> <body> <form
action='<c:url value="/main"/>' method="POST">
<table>
<tr>
<td>Ãîä:<input type="text" name="year"
value="${form.year}"/><br/></td>
<td>Ñïèñîê ãðóïï:
<select name="groupId"> <c:forEach
var="group" items="${form.groups}">
<c:choose> <c:when
test="${group.groupId==form.groupId}">
<option value="${group.groupId}" selected><c:out
value="${group.groupName}"/></option>
</c:when> <c:otherwise>
<option value="${group.groupId}"><c:out
value="${group.groupName}"/></option>
</c:otherwise>
</c:choose> </c:forEach>
</select>
</td>
<td><input type="submit" name="getList"
value="Îáíîâèòü"/></td> </tr> </table> <p/><b>Ñïèñîê ñòóäåíòîâ
äëÿ âûáðàííûõ ïàðàìåòðîâ:<b><br/> <table>
<tr>
<th> </th>
<th>Ôàìèëèÿ</th>
<th>Èìÿ</th>
<th>Îò÷åñòâî</th> </tr>
<c:forEach var="student"
items="${form.students}">
<tr>
<td><input type="radio" name="studentId"
value="${student.studentId}"></td>
<td><c:out value="${student.surName}"/></td>
<td><c:out
value="${student.firstName}"/></td>
<td><c:out
value="${student.patronymic}"/></td>
</tr>
</c:forEach>
</table> <table>
<tr>
<td><input type="submit" value="Add"
name="Add"/></td>
<td><input type="submit" value="Edit"
name="Edit"/></td>
<td><input type="submit" value="Delete"
name="Delete"/></td> </tr> </table> <p/><b>Ïåðåìåñòèòü
ñòóäåíòîâ â ãðóïïó<b><br/> <table>
<tr>
<td>Ãîä:<input type="text" name="newYear"
value="${form.year}"/><br/></td>
<td>Ñïèñîê ãðóïï:
<select name="newGroupId"> <c:forEach
var="group" items="${form.groups}"> <option
value="${group.groupId}"><c:out value="${group.groupName}"/></option> </c:forEach>
</select>
</td>
<td><input type="submit" name="MoveGroup"
value="Ïåðåìåñòèòü"/></td> </tr> </table> </form> </body> </html> StudentFrame.jsp <%@ page contentType="text/html;
charset=windows-1251" %> <%@ taglib uri="/WEB-INF/tld/c.tld"
prefix="c" %> <html> <head>
<title>Ñïèñîê ñòóäåíòîâ</title>
</head> <body> <form
action='<c:url value="/edit"/>' method="POST">
<input type="hidden" name="studentId"
value="${student.studentId}"/>
<table>
<tr>
<td>Ôàìèëèÿ:</td><td><input type="text"
name="surName" value="${student.surName}"/></td>
</tr>
<tr>
<td>Èìÿ:</td><td><input type="text"
name="firstName"
value="${student.firstName}"/></td>
</tr> <tr>
<td>Îò÷åñòâî:</td><td><input type="text"
name="patronymic"
value="${student.patronymic}"/></td>
</tr>
<tr>
<td>Äàòà ðîæäåíèÿ:</td><td><input
type="text" name="dateOfBirth"
value="${student.dateOfBirth}"/></td>
</tr>
<tr>
<td>Ïîë:</td>
<td>
<c:choose> <c:when
test="${student.sex==0}"> <input
type="radio" name="sex" value="0"
checked>Ì</input> <input
type="radio" name="sex"
value="1">Æ</input> </c:when> <c:otherwise> <input
type="radio" name="sex"
value="0">Ì</input> <input
type="radio" name="sex" value="1"
checked>Æ</input>
</c:otherwise>
</c:choose>
</td> </tr> <tr> <td>Ãðóïïà:</td> <td>
<select name="groupId"> <c:forEach
var="group" items="${student.groups}"> <c:choose> <c:when
test="${group.groupId==student.groupId}">
<option value="${group.groupId}" selected><c:out
value="${group.groupName}"/></option> </c:when>
<c:otherwise>
<option value="${group.groupId}"><c:out
value="${group.groupName}"/></option>
</c:otherwise> </c:choose> </c:forEach>
</select>
</td>
</tr>
<tr>
<td>Ãîä îáó÷åíèÿ:</td><td><input
type="text" name="educationYear"
value="${student.educationYear}"/></td>
</tr>
</table>
<table>
<tr>
<td><input type="submit" value="OK"
name="OK"/></td>
<td><input type="submit" value="Cancel"
name="Cancel"/></td>
</tr>
</table>
</form>
</body> </html> Òàêæå
ÿ ïðèâîæó ôàéë web.xml. <?xml version="1.0"
encoding="UTF-8"?> <web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>MainFrameServlet</servlet-name>
<servlet-class>students.web.MainFrameServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>StudentFrameServlet</servlet-name>
<servlet-class>students.web.StudentFrameServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>MainFrameServlet</servlet-name>
<url-pattern>/main</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>StudentFrameServlet</servlet-name>
<url-pattern>/edit</url-pattern> </servlet-mapping>
<welcome-file-list>
<welcome-file>main</welcome-file>
</welcome-file-list> </web-app> Îáðàòèòå
âíèìàíèå íà òî, ÷òî â êà÷åñòâå welcome-file-list> ó íàñ îòìå÷åí íàø
ñåðâëåò MainFrameServlet. Ò.å. êîãäà âû çàïóñòèòå ïðîåêò îí áóäåò
îòîáðàæàòüñÿ ñðàçó æå. Ìåëî÷ü, à ïðèÿòíî. ×ÒÎ
ÅÙÅ Î×ÅÍÜ ÂÀÆÍÎ !!! Âàì
íàäî ñêîïèðîâàòü ôàéëû èç äèðåêòîðèè tld (íàäåþñü âû íå çàáûëè – ýòî
íàøè òýãè äëÿ óïðàâëåíèÿ êîíòåíòîì â JSP. Âàø
ïðîåêò íàõîäèòñÿ ãäå-òî ïî òàêîìó ïóòè C:\Documents and Settings\<user>\My
Documents\NetBeansProjects\StudentsApp\StudentsApp-war\web Âîò
çäåñü è íàäî êîïèðîâàòü íàø êàòàëîã tld – â WEB-INF. NetBeans
«ïîäõâàòèò»
äîáàâëåííûå ôàéëû. |