servelt如何獲取jsp表單裡的資料
先看一下jsp的表單裡有哪些資料:
1 <form name="regForm" action="servlet/RegServlet" method="post" > 2 <table border="0" width="800" cellspacing="0" cellpadding="0"> 3 <tr> 4 <td class="lalel">使用者名稱:</td> 5 <tdclass="controler"><input type="text" name="username" /></td> 6 </tr> 7 <tr> 8 <td class="label">密碼:</td> 9 <td class="controler"><input type="password" name="mypassword" ></td> 10 11 </tr> 12 <tr> 13 <td class="label">確認密碼:</td> 14 <td class="controler"><input type="password" name="confirmpass" ></td> 15 16 </tr> 17 <tr> 18 <td class="label">電子郵箱:</td> 19 <td class="controler"><input type="text" name="email" ></td> 20 21 </tr> 22
只是部分程式碼,說明一下流程。
jsp表單資料裡有使用者名稱username;密碼mypassword;郵箱email。
第一,需要有一個實體類專門放資料(專案裡的model?)
這個類是一個javabean,有屬性變數(對應表單裡的資料);有針對屬性變數的get和set方法。
1 //使用者實體類 2 public class Users { 3 4 private String username; //使用者名稱 5 private String mypassword; //密碼 6 private String email; //電子郵箱 7 8 public Users() 9 { 10 11 } 12 13 public String getUsername() { 14 return username; 15 } 16 public void setUsername(String username) { 17 this.username = username; 18 } 19 public String getMypassword() { 20 return mypassword; 21 } 22 public void setMypassword(String mypassword) { 23 this.mypassword = mypassword; 24 } 25 public String getEmail() { 26 return email; 27 } 28 public void setEmail(String email) { 29 this.email = email; 30 } 31 }
(可以只寫屬性,然後通過 右鍵---Source--生成getter和setter自動建立get和set方法)
第二 servelt賦值給實體類
1. 建立一個servelt
Jsp的表單裡的<form name=” …” action=”這裡是servelt的url,一般就是 包名/servelt類名” method=”get/post”>。上面的程式碼裡是 servlet/RegServlet
2. Servlet裡要重寫doGet(),doPost()
表單的提交方法Method=post時:
doGet(){ 裡面就直接寫doPost(request,response); }
doPost(){這裡new一個第一步裡的實體類,宣告對應的變數}
39 Users u = new Users(); //用來存放資料的實體類Users 40 String username,mypassword,email; // 對應的屬性變數的宣告,用來接收表單資料。
1 public class RegServlet extends HttpServlet { 2 3 public RegServlet() { 4 super(); 5 } 6 7 public void destroy() { 8 super.destroy(); // Just puts "destroy" string in log 10 } 11 18 public void doGet(HttpServletRequest request, HttpServletResponse response) 19 throws ServletException, IOException { 20 21 doPost(request,response); 22 } 23 34 public void doPost(HttpServletRequest request, HttpServletResponse response) 35 throws ServletException, IOException { 36 37 request.setCharacterEncoding("utf-8"); //防止中文亂碼 38 39 Users u = new Users(); //用來存放資料的實體類Users 40 String username,mypassword,email; // 對應的屬性變數的宣告,用來接收表單資料。 46 try 47 { 48 username = request.getParameter("username"); //通過request.getParamater ()獲取表單穿進來的值。 49 mypassword = request.getParameter("mypassword");
51 email = request.getParameter("email"); 52 introduce = request.getParameter("introduce"); 53 birthday = sdf.parse(request.getParameter("birthday")); 64 u.setUsername(username); 65 u.setMypassword(mypassword); 67 u.setEmail(email); 79 80 //把註冊成功的使用者物件儲存在session中 81 request.getSession().setAttribute("regUser", u); 82 //跳轉到註冊成功頁面 83 request.getRequestDispatcher("../userinfo.jsp").forward(request,response); 84 } 85 catch(Exception ex) 86 { 87 ex.printStackTrace(); 88 } 89 90 91 } 92 98 public void init() throws ServletException { 99 // Put your code here 100 } 101 102 }
(程式碼不全,只是說明一下流程)
3. 然後取值
通過request.getParamater ()獲取表單穿進來的值。字串的話用request.getParamaterValues()。
然後用實體類的set方法賦值:
所以流程就是建立一個存放表單資料的實體類,servelt裡new一個實體類的物件,通過request.getParamater ()獲取表單的資料,然後通過實體類物件的set方法把資料存放到物件的屬性變數裡。
4. 然後頁面跳轉
這裡用的是伺服器內部跳轉, 因為servelt這個Java檔案和要跳轉的jsp不在一個目錄,所以地址裡有” ../”,回退到根目錄
跳轉之前先儲存這個表單物件,也就是上面那句request.getSession().setAttribute("regUser", u)。
這個regUser是一個id,目標頁面獲取值得時候要用。
5. 目標頁面獲取資料
目標頁面程式碼
1 <jsp:useBean id="regUser" class="entity.Users" scope="session"/> 2 <table width="600" cellpadding="0" cellspacing="0" border="1"> 3 <tr> 4 <td class="title">使用者名稱:</td> 5 <td class="content"> <jsp:getProperty name="regUser" property="username"/></td> 6 </tr> 7 <tr> 8 <td class="title">密碼:</td> 9 <td class="content"> <jsp:getProperty name="regUser" property="mypassword"/></td> 10 </tr> 11 <tr> 12 <td class="title">E-mail:</td> 13 <td class="content"> <jsp:getProperty name="regUser" property="email"/></td> 14 </tr>
使用jsp:useBean 動作標籤。<jsp:useBean id="regUser" class="entity.Users" scope="session"/> 裡的 id和前面servelt裡儲存到session裡時的id對應,class就是實體類的名(包名/類名),範圍scope就是 session。
通過jsp:getProperty標籤獲取屬性資料: <jsp:getProperty name="regUser" property="mypassword"/></td> 。 name是javabeans的名,property就是屬性值。
自此,從一個jsp頁面傳入的資料,通過一個存放資料的javabean實體類,一個servelt,把資料傳入到了目標頁面(實際上也未必需要傳入到一個頁面,只是這個例子裡是在目標頁面獲取資料並顯示,實際上也可能是傳入到其他地方)。