servlet如何獲取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,把數據傳入到了目標頁面(實際上也未必需要傳入到一個頁面,只是這個例子里是在目標頁面獲取數據並顯示,實際上也可能是傳入到其他地方)。

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM