2012-01-03 83 views
2

我試圖從GET請求獲取表單參數。 HTML代碼如下。Java Servlet HttpServletRequest參數顯示爲空

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>DesignMatch. Matching the best clients and best designers.</title> 
     <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 
     <script type="text/javascript" src="jquery.backstretch.js"></script> 
     <script type="text/javascript" src="design_match.js"></script> 
     <link rel="stylesheet" type="text/css" media="all" href="design_match.css" /> 
    </head> 
    <body> 
     <div id="matte_bg"></div> 
     <div id="entire_wrapper"> 
      <div class="divModule" id="section_head_1"> 
       <p class="primaryPageText"> 
        Clients 
       </p> 
       <div class="url-bar"> 
        <form name="clientUrls" action="SaveDatabase2" target="_blank" method="get"> 
         <input type="text" class="url-box" id="url-box1" name="name1" size="20" value="Paste a link to a website that has the design qualities you want."> 
         <a id="add-url" href="#">Add</a> 
         <a id="del-url" href="#">Remove</a> 
        </form> 
       </div> 
      </div> 
      <div class="divModule" id="section_head_2"> 
       <p class="primaryPageText"> 
        Designers 
       </p> 
       <div class="portfolio-bar"> 
        <form name="designerUrls" action="SaveDatabase2" target="_blank" method="get"> 
         <input type="text" class="portfolio-box" id="portfolio-box1" name="name1" size="20" value="Paste a link to a website you designed."> 
         <a id="add-portfolio" href="#">Add</a> 
         <a id="del-portfolio" href="#">Remove</a> 
        </form> 
       </div> 
      </div> 
      <div class="divModule"> 
       <div class="filterSentence"> 
        <ul class="primaryPageText"> 
         <li> 
          &nbsp; To me, &nbsp; 
         </li> 
         <li class="budgetTypeFilter"> 
          <a href="#" id="budgetToggle">[what price]</a> 
          <div id='budgetFilter' style="display:none" class="budgetTypeMenu"> 
           <a href="/500-under">$500 and under</a> 
           <a href="/500-to-1000">$500-$1,000</a> 
           <a href="/1000-to-2500">$1,000-$2,500</a> 
           <a href="/2500-to-5000">$2,500-$5,000</a> 
           <a href="/5000-to-7500">$5,000-$7,500</a> 
           <a href="/7500-to-10000">$7,500-$10,000</a> 
           <a href="/10000-above">Over $10,000</a> 
          </div> 
         </li> 
         <li> 
          &nbsp; seems fair to pay for &nbsp; 
         </li> 
         <li class="budgetTypeFilter"> 
          <a href="#" id="typeToggle">[what type of]</a> 
          <div id='typeFilter' style="display:none" class="budgetTypeMenu"> 
           <a href="/basic">a basic (e.g., front-end only)</a> 
           <a href="/dynamic">a dynamic (e.g., a little back-end)</a> 
           <a href="/sophisticated">a sophisticated (e.g., lots of back-end)</a> 
          </div> 
         </li> 
         <li> 
          &nbsp; website. &nbsp; 
         </li> 
        </ul> 
       </div> 
      </div> 
      <div class="divModule contact-bar" id="contact"> 
       <form name="nameForm" action="SaveDatabase2" target="_blank" method="get"> 
        <input type="text" id="name_form" name="name_form" size="20" value="Tell us your name."> 
       </form> 
       <form name="contactForm" action="SaveDatabase2" target="_blank" method="get"> 
        <input type="text" id="contact_form" name="contact_form" size="20" value="Enter your e-mail (no spam, ever)."> 
       </form> 
      </div> 
      <div id="submit"> 
       <form accept-charset="UTF-8" action="SaveDatabase2" method="get"> 
        <input class="btn primary large" id="submit-button" name="submit" type="submit" value="✔" /> 
       </form> 
      </div> 
     </div> 
    </body> 
</html> 

這是Servlet代碼。我在doPost中獲得的參數值爲空。我試圖改變所有的請求發佈在HTML中,它沒有幫助。 doGet功能只是重新路由到doPost。我現在感興趣的兩個主要參數是html結尾處的「contact_form」和「name_form」參數。再次感謝!所有的

package web; 
import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import com.mysql.jdbc.StringUtils; 
import java.sql.*; 
import java.io.*; 
import java.util.*; 

/** 
* Servlet implementation class SaveDatabase2 
*/ 
public class SaveDatabase2 extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public SaveDatabase2() { 
     super(); 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     doPost(request, response); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<h1> Thank You </h1>"); 

     //Get Info for Database  
     int designer=0; 
     String clientType=""; 
     String name= ""; 
     String email=""; 
     //Get parameters to put into database 
     Enumeration parameterNames = request.getParameterNames(); 
     if ((request.getParameter("designerUrls")!=null) && !request.getParameter("designerUrls").matches(".*\\w.*")){ 
      designer=1; 
     } 
     if (designer==1){ 
      clientType="designer"; 
     }else clientType="client"; 

     name= request.getParameter("name_form"); 
     email=request.getParameter("contact_form"); 

} 
+0

爲什麼你有這麼多

標籤?你只需要在一個表單標籤中包含所有的輸入字段。 – Manish 2012-01-03 10:08:39

+0

非常感謝。有人做了前端,所以我試圖把它連接到後端,所以我只是認爲沒有錯的HTML。我會將其更改爲一種形式,看看它是否有效 – 2012-01-03 10:20:11

回答

3

首先,我想你應該離開doPostdoGet爲2種不同的方法。如果您將表單的屬性method設置爲post,則會自動觸發doPost

另外,你的表格應該是這樣的:

<form name="myForm" accept-charset="UTF-8" action="SaveDatabase2" target="_blank" method="post"> 
    <input type="text" id="name_form" name="name_form" size="20" value="Tell us your name."> 
    <input type="text" id="contact_form" name="contact_form" size="20" value="Enter your e-mail (no spam, ever)."> 
    <input class="btn primary large" id="submit-button" name="submit" type="submit" value="✔" /> 
</form> 

在你的問題,提交按鈕是在其自己的形式,不包含2輸入文本字段:name_formcontact_form。這就是爲什麼你得到了null值。

+0

非常感謝您的及時回覆。我會在 – 2012-01-03 10:21:09

+0

@TimnitGebru表單上進行這些更改,歡迎您! :) – 2012-01-03 10:22:28

0

我想你是誤解<form>元素。要將數據從頁面發送到servlet,您可以使用method="get"method="post" - 兩者仍然以單向方式發送數據(客戶端到服務器)。對於差異看When do you use POST and when do you use GET?

<form>可以包括許多<input> S和但那是從您的代碼缺少的重要部分是被提交(一個與<input type="submit"/>)的<form>不包含任何<input>元素的你正在期待。他們在其他<form> s沒有提交。僅提交包含提交按鈕的<form>按鈕。

您應該在所有字段周圍使用一個<form>並提交按鈕。

相關問題