Pregunta

Estoy tratando de crear un sistema de registro usando JSP, frijoles y servlets. El proceso de registro parece estar bien, pero cada vez que se supone que los datos se almacenan en la base de datos, las filas solo están llenas de nulos. Soy un novato en este tema, ¡así que realmente apreciaría tu ayuda! Aquí está el código de este "sistema":

ragister.html

<html>
<body >
<form action="/Ragis/proces.jsp" method=post>
<center>
<table cellpadding=2 cellspacing=1 border="1" bgcolor="lightblue">
<th bgcolor="lightblue" colspan=2>
<font size=5>User Registration</font>
<br>
<font size=2 color="red"><sup>*</sup> Required Fields</font>
</th>
<tr bgcolor="lightblue">
<td valign=top> 
<b>First Name<sup>*</sup></b> 
<br>
<input type="text" name="firstName" value="" size=20 maxlength=20></td>
<td  valign=top>
<b>Last Name<sup>*</sup></b>
<br>
<input type="text" name="lastName" value="" size=15 maxlength=20></td>
</tr>
<tr bgcolor="lightblue">
<td valign=top>
<b>E-Mail<sup>*</sup></b> 
<br>
<input type="text" name="email" value="" size=25  maxlength=125>
<br></td>
<td  valign=top>
<b>Cell Nr(9 fig.)<sup>*</sup></b> 
<br>
<input type="text" name="zip" value="" size=10  maxlength=9></td>
</tr>
<tr bgcolor="lightblue">
<td valign=top colspan=2>
<b>User Name<sup>*</sup></b>
<br>
<input type="text" name="userName" size=20 value=""  maxlength=10>
</td>
</tr>
<tr bgcolor="lightblue">
<td valign=top>
<b>Password<sup>*</sup></b> 
<br>
<input type="password" name="password1" size=10 value="" maxlength=10></td>
<td  valign=top>
<b>Confirm Password<sup>*</sup></b>
<br>
<input type="password" name="password2" size=10 value="" maxlength=10></td>
<br>
</tr>
<tr bgcolor="lightblue">
<td  align=center colspan=2>
<input type="submit" value="Submit"> <input type="reset"  
value="Reset">
</td>
</tr>
</table>
</center>
</form>
</body>
</html>

proces.jsp

<%@ page language="java" %>
<%@ page import="java.util.*" %>
<%! 

%>
<jsp:useBean id="formHandler" class="test.FormBean" scope="request">
<jsp:setProperty name="formHandler" property="*"/>
</jsp:useBean>
 <%   if (formHandler.validate()) {   
%>

<html>
<body>
<center>
<form action="/Ragis/Registration" method=post>
    <input type="submit" name="Submit" value="Submit" style="background-color:#49743D;font-weight:bold;color:#ffffff;"/>
    </form>

<table cellpadding=1 cellspacing=1 border="1" >
<th bgcolor="lightblue" colspan=2>
<font size=5>Almost done! Just press SUBMIT to finish the registration procedure!</font>
</th>
<font size=4>
<tr bgcolor="lightblue">
<td valign=top> 
<b>First Name</b> 
<br>
<jsp:getProperty name="formHandler" property="firstName"/>
</td>
<td valign=top>
<b>Last Name</b>
<br>
<jsp:getProperty name="formHandler" property="lastName"/>
</td>
</tr>
<tr bgcolor="lightblue">
<td valign=top>
<b>E-Mail</b> 
<br>
<jsp:getProperty name="formHandler" property="email"/>
<br></td>
<td valign=top>
<b>Cell Nr(9 fig.)</b> 
<br>
<jsp:getProperty name="formHandler" property="zip"/>
</td>
</tr>
<tr bgcolor="lightblue">
<td valign=top colspan=2>
<b>User Name</b>
<br>
<jsp:getProperty name="formHandler" property="userName"/>
</td>
</tr>
</font>
</table>
</center>
    </body>
    </html>
<%
   }  else {
%>
    <jsp:forward page="retry.jsp"/>
<%
   }
%>

reintento.jsp

<jsp:useBean id="formHandler" class="test.FormBean" scope="request"/>
<html> 
<body>
<form action="/Ragis/proces.jsp" method=post>
<center>
<table cellpadding=4 cellspacing=2 border=0>
<th bgcolor="lightblue" colspan=2>
<font size=5>User Registration</font>
<br>
<font size=2 color="red"><sup>*</sup> Required Fields </font>
</th>
<tr bgcolor="lightblue">
<td valign=top> 
<B>First Name<sup>*</sup></B> 
<br>
<input type="text" name="firstName" 
value='<%=formHandler.getFirstName()%>' size=15 maxlength=20>
<br><font size=2 
color=red><%=formHandler.getErrorMsg("firstName")%></font>
</td>
<td  valign=top>
<B>Last Name<sup>*</sup></B>
<br>
<input type="text" name="lastName" 
value='<%=formHandler.getLastName()%>' size=15 maxlength=20>
<br><font size=2 
color=red><%=formHandler.getErrorMsg("lastName")%></font>
</td>
</tr>
<tr bgcolor="lightblue">
<td valign=top>
<B>E-Mail<sup>*</sup></B> 
<br>
<input type="text" name="email" value='<%=formHandler.getEmail()%>' 
size=25  maxlength=125>
<br><font size=2 color=red><%=formHandler.getErrorMsg("email")%></font>
</td>
<td  valign=top>
<B>Cell Nr(9 fig.)<sup>*</sup></B> 
<br>
<input type="text" name="zip" value='<%=formHandler.getZip()%>' size=5  
maxlength=9>
<br><font size=2 color=red><%=formHandler.getErrorMsg("zip")%></font>
</td>
</tr>
<tr bgcolor="lightblue">
<td valign=top colspan=2> 
<B>User Name<sup>*</sup></B>
<br>
<input type="text" name="userName" size=10 
value='<%=formHandler.getUserName()%>'  maxlength=10>
<br><font size=2 
color=red><%=formHandler.getErrorMsg("userName")%></font>
</td>
</tr>
<tr bgcolor="lightblue">
<td valign=top>
<B>Password<sup>*</sup></B> 
<br>
<input type="password" name="password1" size=10 
value='<%=formHandler.getPassword1()%>'  maxlength=10>
<br><font size=2 
color=red><%=formHandler.getErrorMsg("password1")%></font>
</td>
<td  valign=top>
<B>Confirm Password<sup>*</sup></B>
<br>
<input type="password" name="password2" size=10 
value='<%=formHandler.getPassword2()%>'  maxlength=10>
<br><font size=2 
color=red><%=formHandler.getErrorMsg("password2")%></font>
</td>
<br>
</tr>
<tr bgcolor="lightblue">
<td colspan=2 align=center>
<input type="submit" value="Submit"> 
</td>
</tr>
</table>
</center>
</form>
</body>
</html>

Formbean.java

package test;

import java.io.*;
import java.util.*;

public class FormBean {
      private String firstName;
      private String lastName;
      private String email;
      private String userName;
      private String password1;
      private String password2;
      private String zip;
      private String notify;
      private Hashtable errors;
      public boolean validate() {
        boolean bool=true;
        if (firstName.equals("")) {
          errors.put("firstName","Please enter your first name");
          firstName="";
          bool=false;
        }
        if (lastName.equals("")) {
          errors.put("lastName","Please enter your last name");
          lastName="";
          bool=false;
        }
        if (email.equals("") || (email.indexOf('@') == -1)) {
          errors.put("email","Please enter a valid email address");
          email="";
          bool=false;
        }
        if (userName.equals("")) {
          errors.put("userName","Please enter a username");
          userName="";
          bool=false;
        }
        if (password1.equals("") ) {
          errors.put("password1","Please enter a valid password");
          password1="";
          bool=false;
        }
        if (!password1.equals("") && (password2.equals("") || 
            !password1.equals(password2))) {
          errors.put("password2","Please confirm your password");
          password2="";
          bool=false;
        }
        if (zip.equals("") || zip.length() !=9 ) {
          errors.put("zip","Please enter a valid cell number");
          zip="";
          bool=false;
        } else {
          try {
            int x = Integer.parseInt(zip);
          } catch (NumberFormatException e) {
            errors.put("zip","Please enter a valid cell number");
            zip="";
            bool=false;
          }
        }
        return bool;
      }
      public String getErrorMsg(String s) {
        String errorMsg =(String)errors.get(s.trim());
        return (errorMsg == null) ? "":errorMsg;
      }
      public FormBean() {
        firstName="";
        lastName="";
        email="";
        userName="";
        password1="";
        password2="";
        zip="";
        notify="";
        errors = new Hashtable();
      }
      public String getFirstName() {
        return firstName;
      }
      public String getLastName() {
        return lastName;
      }
      public String getEmail() {
        return email;
      }
      public String getUserName() {
        return userName;
      }
      public String getPassword1() {
        return password1;
      }
      public String getPassword2() {
        return password2;
      }
      public String getZip() {
        return zip;
      }
      public String getNotify() {
        return notify;
      }
      public void setFirstName(String fname) {
        firstName =fname;
      }
      public void setLastName(String lname) {
        lastName =lname;
      }
      public void setEmail(String eml) {
        email=eml;
      }
      public void setUserName(String u) {
        userName=u;
      }
      public void  setPassword1(String p1) {
        password1=p1;
      }
      public void  setPassword2(String p2) {
        password2=p2;
      }
      public void setZip(String z) {
        zip=z;
      }
      public void setErrors(String key, String msg) {
        errors.put(key,msg);
      }
      public void setNotify(String n) {
        notify=n;
      }
    }

Registrar.java

package test;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Registration extends HttpServlet{
/**
     * 
     */
    private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException{
super.init(config);
}
public void doPost(HttpServletRequest req, HttpServletResponse res) 
throws ServletException, IOException{
String connectionURL = "jdbc:mysql://localhost:3306/jsp";
Connection connection=null;
ResultSet rs;
res.setContentType("text/html");
PrintWriter out = res.getWriter();
String firstNamed = req.getParameter("firstName");
String lastNamed = req.getParameter("lastName");
String emaild = req.getParameter("email");
String userNamed = req.getParameter("userName");
String password1d = req.getParameter("password1");
String zipd = req.getParameter("zip");
String auto = "u";
try {
Class.forName("org.gjt.mm.mysql.Driver");
connection = DriverManager.getConnection(connectionURL, "root", "root"); 
String sql = "insert into userprofile values (?,?,?,?,?,?,?)";
PreparedStatement pst = connection.prepareStatement(sql);
pst.setString(1, firstNamed);
pst.setString(2, lastNamed);
pst.setString(3, emaild);
pst.setString(4,userNamed);
pst.setString(5, password1d);
pst.setString(6, zipd);
pst.setString(7, auto);

int numRowsChanged = pst.executeUpdate();
out.println(" Welcome : ");
out.println(" '"+userNamed+"'");
pst.close();
}
catch(ClassNotFoundException e){
out.println("Couldn't load database driver: " + e.getMessage());
}
catch(SQLException e){
out.println("SQLException caught: " + e.getMessage());
}
catch (Exception e){
out.println(e);
}
finally {

try {
if (connection != null) connection.close();
}
catch (SQLException ignored){
out.println(ignored);
}
}
}
}

Brevemente: Ragister.html -> Proces.jsp, si toda la información válida -> Registration.java con el envío de datos a DB, de lo contrario, reírra.jsp con una descripción de error hasta que todo esté bien. Parece que funciona bien, pero en la base de datos obtengo una mesa con fila llena de nulos :(

Probablemente cometí un error al tratar de leer datos en Registration.java. Por favor, por favor ayúdame y a Sory si no estoy claro en ningún lado.

¿Fue útil?

Solución

Estás tratando de enviar un formulario en blanco.

<form action="/Ragis/Registration" method=post>
    <input type="submit" name="Submit" value="Submit" style="background-color:#49743D;font-weight:bold;color:#ffffff;"/>
    </form>

No hay TextField dentro de este formulario. Primero corrija esto.

Otros consejos

Ok, problema resuelto. El frijol desaparece después de dejar el archivo JSP, por lo que tuve que obtener atributos y asignar a FormBean Variable. Entonces Proces.jsp debería verse así:

<%@ page language="java" %>
<%@ page import="java.util.*" %>
<%@ page import="test.FormBean" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%! 

%>
<jsp:useBean id="formHandler" class="test.FormBean" scope="request">
<jsp:setProperty name="formHandler" property="*"/>
</jsp:useBean>
 <% 

 FormBean x = (FormBean)request.getAttribute("formHandler");

 if (formHandler.validate())
 {   
%>

<html>
<body>
<center>
<form action="/Ragis/Registration" method=post>

<input type="submit" name="Submit" value="Submit" style="background-color:#49743D;font-weight:bold;color:#ffffff;">
<%request.setAttribute("bean",x) ;
RequestDispatcher view = request.getRequestDispatcher("/Registration");
view.forward(request, response);
%>
</input>
</form>


<table cellpadding=1 cellspacing=1 border="1" >
<th bgcolor="lightblue" colspan=2>
<font size=5>Almost done! Just press SUBMIT to finish the registration procedure!</font>
</th>
<font size=4>
<tr bgcolor="lightblue">
<td valign=top> 
<b>First Name</b> 
<br>
<jsp:getProperty name="formHandler" property="firstName"/>
</td>
<td valign=top>
<b>Last Name</b>
<br>
<jsp:getProperty name="formHandler" property="lastName"/>
</td>
</tr>
<tr bgcolor="lightblue">
<td valign=top>
<b>E-Mail</b> 
<br>
<jsp:getProperty name="formHandler" property="email"/>
<br></td>
<td valign=top>
<b>Cell Nr(9 fig.)</b> 
<br>
<jsp:getProperty name="formHandler" property="zip"/>
</td>
</tr>
<tr bgcolor="lightblue">
<td valign=top colspan=2>
<b>User Name</b>
<br>
<jsp:getProperty name="formHandler" property="userName"/>
</td>
</tr>
</font>
</table>
</center>
    </body>
    </html>
<%
   }  else {
%>
    <jsp:forward page="retry.jsp"/>
<%
   }
%>

El proyecto funciona bien en JBoss 4.2

¡Gracias Xcoder por un diagnóstico rápido y bueno! ;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top