2010-11-28 27 views
16

द्वारा समर्थित नहीं है मुझे पृष्ठ को काम करने में परेशानी हो रही है। मेरे पास पोस्ट करने के लिए मेरा फॉर्म तरीका है और मेरा सर्वलेट doPost() लागू करता है। हालांकि, यह मुझे दिखाता रहता है कि मैं POST विधि का समर्थन नहीं कर रहा हूं।HTTP स्थिति 405 - HTTP विधि POST इस यूआरएल जावा सर्वलेट

मैं बस एक साधारण वेबसाइट करने की कोशिश कर रहा हूं और अपने MySQL डीबी में मान डाल रहा हूं।

*type Status report 
message HTTP method POST is not supported by this URL 
description The specified HTTP method is not allowed for the requested resource (HTTP method POST is not supported by this URL).* 

स्थैतिक पृष्ठ:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" 
     "http://www.wapforum.org/DTD/xhtml-mobile10.dtd" > 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>XHTML Mobile Profile Document</title> 
     <!-- 
      Change href="style.css" below to the file name and 
      relative path or URL of your external style sheet. 
      --> 
     <link rel="stylesheet" href="index.css" type="text/css"/> 
     <!-- 
     <style> document-wide styles would go here </style> 
     --> 
    </head> 
    <body> 

     <h1> Register Here </h1> 
     <form action="regSuccess.do" method = "POST"> 
     UserName: <input type="text" name="txtregUsername" size="15" maxlength="15"> 
        <br/> 
     Password: <input type="password" name="txtregPassword" size="15" 
        maxlength="15"><br/> 
     Name: <input type="text" name="txtregName" size="20" maxlength="30"><br/> 
     Email: <input type="text" name="txtregEmail" size="20" maxlength="30"> 
       <br/><br/> 
       <input type="submit" name="btnRegister" value="Register Me"/> 
     </form> 
    </body> 
</html> 

सर्वलेट:

package core; 

import java.io.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 

public class handlingReg extends HttpServlet { 

    //database parameters 
    private static final String db_server = "localhost/"; 
    private static final String db_name ="bus_guide"; 
    private Connection con = null; 

    //init of connection to dabatase 
    public void init(ServletConfig config) throws ServletException { 
    try { 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     } 
    catch (Exception e) { 
     System.out.println("Exception in init(): unable to load JDBC DriverA"); 
     } 
    try { 
    con = DriverManager.getConnection("jdbc:mysql://"+ db_server + db_name , "root" , ""); 
     System.out.println("conn: "+con); 
     } 
    catch (Exception e) { 
     System.out.println(e.getMessage()); 
     } 
    } 
    //end init() 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     //response handling 

     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 

     //handling request 
     String enteredUsername = request.getParameter("txtregUsername"); 
     String enteredPw = request.getParameter("txtregPassword"); 
     String enteredName = request.getParameter("txtregName"); 
     String enteredEmail = request.getParameter("txtregEmail"); 

     //inserting values into database 
     try { 
      Statement stmnt = con.createStatement(); 
      stmnt.executeUpdate("INSERT INTO regUsers VALUES('"+enteredUsername+"','"+enteredPw+"','"+enteredName+"','"+enteredEmail+"')"); 
     } catch (SQLException ex) { 
      System.out.println(ex.getMessage()); 
     } 

     //output html out.println(""); 
     out.println("<?xml version = \"1.0\" encoding =\"utf-8\"?>"); 
     out.println("<!DOCTYPE html PUBLIC \"-//WAPFORUM/DTD XHTML Mobile 1.0//EN\""); 
     out.println(" \"http://www.wapforum.org/DTD/xhtml-mobile10.dtd\">"); 
     out.println("<html xmlns=\"http://www.w3.org/1000/xhtml\">"); 

     out.println("<head>"); 
     out.println("<title></title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("Register Success!"); 
     out.println("<a href = \"index.xhtml\"> Click here to go back to main page. 
        </a>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } 

} 

web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 

<!--Self declared servlet mapping starts here--> 
<servlet> 
    <servlet-name>handleRegister</servlet-name> 
    <servlet-class>core.handlingReg</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>handleRegister</servlet-name> 
    <url-pattern>/regSuccess.do</url-pattern> 
</servlet-mapping> 

<!--Self declared servlet mapping ends here--> 
<servlet-mapping> 
    <servlet-name>invoker</servlet-name> 
    <url-pattern>/servlet/*</url-pattern> 
</servlet-mapping> 
<mime-mapping> 
    <extension>xhtml</extension> 
    <mime-type>text/html</mime-type> 
</mime-mapping> 
<mime-mapping> 
    <extension>jad</extension> 
    <mime-type>text/vnd.sun.j2me.app-descriptor</mime-type> 
</mime-mapping> 
<mime-mapping> 
    <extension>jar</extension> 
    <mime-type>application/java-archive</mime-type> 
</mime-mapping> 
</web-app> 

संपादित करें: हटाया doGet (अनुरोध, प्रतिक्रिया);

+2

सर्वलेट के 'init() 'में एक डीबी कनेक्शन खोलना एक बहुत बुरा विचार है। ओपनिंग और क्लोजिंग को उसी प्रयास में जाना चाहिए-अंततः ब्लॉक को निष्पादित करते समय ब्लॉक करें। – BalusC

उत्तर

22

ऐसा इसलिए है क्योंकि आप वास्तव में doGet() लागू किए बिना doGet() पर कॉल कर रहे हैं। यह doGet() का डिफ़ॉल्ट कार्यान्वयन है जो त्रुटि को फेंकता है कि यह विधि समर्थित नहीं है।

+0

मैंने अभी डॉगेट (अनुरोध, प्रतिक्रिया) हटा दिया है; हालांकि मुझे अभी भी वही त्रुटि मिलती है। – sutoL

+0

क्या आप 110% सुनिश्चित हैं कि आप पुराने .class फ़ाइल या कुछ का उपयोग नहीं कर रहे हैं? DoGet() कॉल पूरी तरह से समस्या की व्याख्या करेगा। मैं कोड के साथ किसी भी अन्य समस्या को नहीं देख सकता ... –

+0

हां, मैंने अपनी संकलित कक्षाएं हटा दी हैं और यह सुनिश्चित करने के लिए उन्हें दोबारा तैयार किया है कि मुझे एक नया संकलित वर्ग मिल गया है, फिर मैंने अपने वेब-आईएनएफ/कक्षाओं/कोर – sutoL

3

यह कहता है "POST समर्थित नहीं है", इसलिए अनुरोध आपके सर्वलेट को नहीं बुला रहा है। अगर मैं आप थे, तो मैं आपके POST अनुरोध जारी करने वाले सटीक URL पर एक GET जारी करता हूं (उदा। ब्राउज़र का उपयोग करना), और देखें कि आपको क्या मिलता है। मुझे यकीन है कि आप कुछ अप्रत्याशित देखेंगे।

+0

यह विधि = "पोस्ट" एक्शन = "/ कुछ" के लिए हो सकता है, इसलिए यह आपका सर्वलेट नहीं है जिसे कॉल किया जा रहा है लेकिन स्वागत-फ़ाइल-सूची में एक डिफ़ॉल्ट सर्वलेट या जेएसपी है। – weberjn

9

आप बिल्ला उपयोग कर रहे हैं यदि आप <servlet-name> को यह

<servlet-mapping> 

    <http-method>POST</http-method> 

</servlet-mapping> 
अलावा

कोशिश कर सकते हैं और <url-mapping>

1

यह मुझे क्या हुआ जब:

  • यहां तक ​​कि के साथ मेरी सर्वलेट एकमात्र तरीका होने "doPost"
  • और फ़ॉर्म विधि = "पोस्ट"

  • मैंने प्रपत्र सबमिट करने के बिना सीधे यूआरएल का उपयोग करके कार्रवाई तक पहुंचने की कोशिश की। चूंकि URL के लिए डिफ़ॉल्ट विधि doGet विधि है, जब आप सबमिट सबमिट का उपयोग नहीं करते हैं, तो आप @ your console को http 405 त्रुटि देखेंगे।

समाधान: केवल अपनी फ़ॉर्मलेट क्रिया में मैप किए गए फॉर्म बटन का उपयोग करें।

संबंधित मुद्दे