为什么我不能在我的servlet代码中使用doGet方法?

时间:2012-10-22 14:47:19

标签: java servlets

我是servlets的新手,我开发了一个html页面,其中有一个触发的提交按钮 我的servlet。一切正常。但是现在我想使用GET方法,因为我的html页面没有发布任何内容。我做了以下更改: 1)在我的page.html文件中,我用method =“GET”替换了method =“POST”。 2)我在servlet中使用doGet更改了doPost。 但我收到错误消息“GET不允许在这里”。为什么会这样? 以下是正确工作的原始文件(在进行更改之前):

我的page.html页面:

<html>
<head>
<title>A simple revision of servlets</title>
</head>
<body>
<form method="POST" action="Idiot">
    <input type="SUBMIT">
</form>
</body>
</html>

我的部署描述符:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>TangoCharlie</servlet-name>
<servlet-class>Revise</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TangoCharlie</servlet-name>
<url-pattern>/Idiot</url-pattern>
</servlet-mapping>
</web-app>

最后我的servlet文件名为Revise.java

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class Revise extends HttpServlet
{
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    out.println("<html><body><h3>Hello India</h3></body></html>");
    out.println("Hello");
}
}

1 个答案:

答案 0 :(得分:0)

  

我不想添加任何输入字段。我的目标只是在html页面上没有单个按钮的情况下运行servlet,该按钮也使用“POST”方法调用。

只需在doGet()方法中完成工作(不要忘记在编辑servlet代码后正确重建/重新部署/重新启动项目,否则你仍将面临“HTTP 405:方法不允许”错误)和直接调用servlet的URL,而不是浏览器地址栏中的JSP URL。

因此,浏览器地址栏中的URL应为

  

http://example.com/contextname/Idiot

而不是

  

http://example.com/contextname/page.html


无关到具体问题,在servlet中发出HTML是糟糕的设计。它应该由JSP完成。在完成RequestDispatcher#forward()业务逻辑后,您可以使用doGet()将请求转发到JSP。此外,无包装类也是一个糟糕的设计。您应该始终将可公开重用的Java类放在包中。无包装servlet仅适用于Tomcat + JVM版本的某些组合。

另见: