मैं निम्नलिखित सर्वलेट है:HTTP स्थिति 405 - HTTP विधि प्राप्त इस URL द्वारा समर्थित नहीं है
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 16252534;
private static int ping = 3000;
private Thread t;
private static boolean shouldStop = false;
@Override
public void init() throws ServletException {
super.init();
t = new Thread(new Runnable() {
@Override
public void run() {
while(!shouldStop) {
System.out.println("Now:" + System.currentTimeMillis());
try {
Thread.sleep(ping);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
t.start();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
System.out.println("doGet");
PrintWriter out = resp.getWriter();
out.println("<html><h1>It works!!</h1></html>");
}
@Override
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
super.service(req, resp);
System.out.println("service");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
System.out.println("doPost");
}
@Override
public void destroy() {
super.destroy();
System.out.println("Destroy servlet");
shouldStop = true;
}
}
मेरी web.xml
में इस प्रकार है कौन सा मैप किया गया है:
<display-name>MyServer</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.myserver.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
जब मैं खोलने के अपने ब्राउज़र (क्रोम) http://localhost:8080/MyServer/MyServlet
पर, तो मुझे doService()
से कंसोल पर लॉग इन होने पर "सेवा" दिखाई देती है और मेरा धागा सही तरीके से काम करता है, हालांकि मुझे doGet()
से "यह काम करता है" दिखाई नहीं देता है और मुझे ब्राउज़र में निम्न त्रुटि मिलती है:
HTTP विधि प्राप्त इस URL
द्वारा समर्थित नहीं है यह कैसे के कारण होता है और मैं इसे कैसे हल कर सकते हैं?
आपको बहुत बहुत धन्यवाद। मैंने ServletContextListener का उपयोग किया है। एक प्रश्न: सर्वलेट में थ्रेड का उपयोग क्यों करना एक बुरा विचार है? – CeccoCQ
यह आवश्यक नहीं है, लेकिन जिस तरह से आपने लिखा है, कोड 100% CPU संसाधनों का हमेशा उपभोग करता है। आपको लिंक किए गए उत्तर में उल्लिखित थ्रेडपूल और शेड्यूलर का उपयोग करना चाहिए। और वेबपैप स्टार्टअप और शटडाउन के दौरान वैश्विक प्रारंभिकरण और सफाई करने के लिए 'ServletContextListener' बस सही जगह है। – BalusC
ठीक है, मैं समझता हूँ। धन्यवाद ;) – CeccoCQ