1. 程式人生 > >servelt如何獲取jsp表單裡的資料

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                     <td 
class="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">&nbsp;<jsp:getProperty name="regUser" property="username"/></td>
 6         </tr>
 7         <tr>
 8           <td class="title">密碼:</td>
 9           <td class="content">&nbsp;<jsp:getProperty name="regUser" property="mypassword"/></td>
10         </tr>
11         <tr>
12           <td class="title">E-mail:</td>
13           <td class="content">&nbsp;<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,把資料傳入到了目標頁面(實際上也未必需要傳入到一個頁面,只是這個例子裡是在目標頁面獲取資料並顯示,實際上也可能是傳入到其他地方)。