Buonasera a tutti.
Sto da poco sviluppando una web application con netbeans collegata ad un database in mysql.
Finora sono riuscita a far visualizzare sulle jsp il contenuto di alcune tabelle del mio database, ma il problema arriva quando voglio inserire mediante il metodo persist nuove entità in una tabella del database.
In particolare vorrei far si che gli utenti si registrino nella mia web application.
Quindi quello che voglio è creare una entità di tipo utente grazie ai dati inseriti in una jsp e successivamente inserire questa nuova entità nel mio database.
Ecco quello che ho scritto:
Questa è l'entità utente generata automaticamente da netbeans, visto che ho collegato il mio database di mysql:
codice:
package entity;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author Valentina
*/
@Entity
@Table(name = "utente")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Utente.findAll", query = "SELECT u FROM Utente u"),
@NamedQuery(name = "Utente.findByNickname", query = "SELECT u FROM Utente u WHERE u.nickname = :nickname"),
@NamedQuery(name = "Utente.findByNome", query = "SELECT u FROM Utente u WHERE u.nome = :nome"),
@NamedQuery(name = "Utente.findByCognome", query = "SELECT u FROM Utente u WHERE u.cognome = :cognome"),
@NamedQuery(name = "Utente.findByDataNascita", query = "SELECT u FROM Utente u WHERE u.dataNascita = :dataNascita"),
@NamedQuery(name = "Utente.findByPassword", query = "SELECT u FROM Utente u WHERE u.password = :password")})
public class Utente implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 10)
@Column(name = "nickname")
private String nickname;
@Size(max = 45)
@Column(name = "Nome")
private String nome;
@Size(max = 45)
@Column(name = "Cognome")
private String cognome;
@Size(max = 45)
@Column(name = "DataNascita")
private String dataNascita;
@Size(max = 45)
@Column(name = "password")
private String password;
@ManyToMany(mappedBy = "utenteCollection")
private Collection<Film> filmCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "utente")
private Collection<Valutazione> valutazioneCollection;
public Utente() {
}
public Utente(String nickname) {
this.nickname = nickname;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public String getDataNascita() {
return dataNascita;
}
public void setDataNascita(String dataNascita) {
this.dataNascita = dataNascita;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@XmlTransient
public Collection<Film> getFilmCollection() {
return filmCollection;
}
public void setFilmCollection(Collection<Film> filmCollection) {
this.filmCollection = filmCollection;
}
@XmlTransient
public Collection<Valutazione> getValutazioneCollection() {
return valutazioneCollection;
}
public void setValutazioneCollection(Collection<Valutazione> valutazioneCollection) {
this.valutazioneCollection = valutazioneCollection;
}
@Override
public int hashCode() {
int hash = 0;
hash += (nickname != null ? nickname.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 Utente)) {
return false;
}
Utente other = (Utente) object;
if ((this.nickname == null && other.nickname != null) || (this.nickname != null && !this.nickname.equals(other.nickname))) {
return false;
}
return true;
}
@Override
public String toString() {
return "entity.Utente[ nickname=" + nickname + " ]";
}
}
Questo è il session bean dell'utente:
codice:
package session;
import entity.Utente;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
/**
*
* @author Valentina
*/
@Stateless
public class UtenteFacade extends AbstractFacade<Utente> {
@PersistenceContext(unitName = "VideoPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("VideoPU");
em = emf.createEntityManager();
return em;
}
public UtenteFacade() {
super(Utente.class);
}
public List<Utente> getUtenti(){
em=getEntityManager();
return em.createQuery("select object(o) from Film as o").getResultList();
//Query query = em.createQuery("SELECT f.nome from Film as f");
// return query.getResultList();
}
public void addUtente(Utente u){
em=getEntityManager();
em.persist(u);
}
}
Questa è la servlet che mi consente la registrazione il cui url è /registrazione
codice:
package servlet;
import entity.Utente;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import session.UtenteFacade;
/**
*
* @author Valentina
*/
public class ServletRegistrazione extends HttpServlet {
@EJB
private UtenteFacade utenteFacade;
private Utente utente;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username=request.getParameter("nickname");
String password=request.getParameter("password");
String nome=request.getParameter("nome");
String cognome=request.getParameter("cognome");
utenteFacade=new UtenteFacade();
utente=new Utente(username);
utente.setPassword(password);
utente.setNome(nome);
utente.setCognome(cognome);
utenteFacade.addUtente(utente);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
e infine la pagina registrazione.jsp
codice:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="entity.Utente"%>
<%@page import="session.UtenteFacade"%>
<%@page import="java.util.List"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/videoteca.css">
<title>Login</title>
</head>
<body>
<div id="main">
<div id="headerLogin">
<div id="headerWidget">
<div id="widgetBar">
<div class="headerWidget">
<a href="http://localhost:8080/Video/">
<span class="categoryLabelText">Home</span>
</a>
</div>
<div class="headerWidget">
<a href="#">
<span class="categoryLabelText">Preferiti</span>
</a>
</div>
</div>
</div>
</div>
<div id="loginCenterColumnR">
<div align="center">
<div class="registrationBox">
<br>
<p id="registrazioneText">Immetti le informazioni richieste per registrarti.</p>
<br><br>
<form action="registrazione" method="POST" id="form">
<p id="loginText">Nome utente</p>
<input name="nickname" type="text" size="25" value="">
<p id="loginText">Password</p>
<input name="password" type="text" size="25" value="">
<p id="loginText">Nome</p>
<input name="nome" type="text" size="25" value="">
<p id="loginText">Cognome</p>
<input name="cognome" type="text" size="25" value="">
<br><br>
<input type="submit"
name="submit"
value="Registrati">
</form>
</div>
</div>
<br><br>
</div>
<div id="footer">
<hr>
</div>
</body>
</html>
Ora il problema è che quando clicco sul pulsante "Registrati" mi si apre il link alla servlet,visualizzando una pagina bianca e non succede assolutamente nulla.
Vado a controllare il mio database ma l'utente non è stato inserito.
Prima mi dava un errore dicendo che l'entity non era riconosciuta (ed effettivamente da quell'errore si vedeva che aveva creato correttamente l'oggetto utente con i dati inseriti nella jsp) così ho inserito nel file persistence.xml questa riga:
<class>entity.Utente</class>
ed ora non fa assolutamente nulla.
Non so cosa fare....potreste aiutarmi?