2012-01-11 47 views
1

我想創建一個使用jsp,beans和servlets的註冊系統。註冊過程似乎沒問題,但每次數據都應該存儲到數據庫中,行只填充NULL。我是這個學科的新手,所以我真的會讚賞你的幫助! 下面是這個 「系統」 的代碼:基於JSP與MySQL連接的註冊系統 - null在db

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"/> 
<% 
    } 
%> 

retry.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; 
     } 
    } 

Registration.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); 
} 
} 
} 
} 

簡述:ragister.html - > proces.jsp,如果所有信息有效 - > Registration.java與錯誤描述將​​數據發送到DB,否則retry.jsp直到一切好。 看來工作preety不錯,但在數據庫中,我得到一個錶行用空值填充:(

可能是我犯的錯誤試圖Registration.java讀取數據。 請,請幫我和索裏,如果我目前還不清楚任何地方。

回答

1

您試圖提交一份空白表格。

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

有這種形式中沒有文本框,首先在quiting JSP後更正。

+0

是的,它是唯一的問題在這裏。你能告訴我我應該寫些什麼?我嘗試了很多東西,但我無法弄清楚...只是發送這個參數到servlet – kibicrealu1 2012-01-12 06:53:50

+0

把 ''和其他文本域爲 '

' – 2012-01-12 12:10:38

+0

但我不想輸入數據再次,只是爲了從jsp到servlet獲取所有的參數 – kibicrealu1 2012-01-12 13:04:30

0

OK,問題解決了。豆自敗文件,所以我必須從它獲取屬性並分配給FormBean變量。所以proces.jsp應該是這樣的:

<%@ 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"/> 
<% 
    } 
%> 

項目運行良好,在JBoss 4.2

感謝XCoder快速和良好的診斷! ;)