【问题标题】:doGet and doPost in one classdoGet 和 doPost 在一个类中
【发布时间】:2017-12-06 19:37:28
【问题描述】:

当我尝试在一个类中使用 doGet 和 doPost 并使用 post 方法传递参数时,我得到了

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET

但是当我评论 doGet 时,它工作得很好。这是为什么? doGetdoPost不能在同一个类中使用?

这是课程代码:

package pl.javastart.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class wypisz_parametry extends HttpServlet {
private static final long serialVersionUID = 1321321321L;

/*public void doGet(HttpServletRequest request,
        HttpServletResponse response)    throws ServletException, IOException {
  PrintWriter out = response.getWriter();

  String parametr1 = request.getParameter("parametr1");
  String parametr2 = request.getParameter("parametr2");
  String parametr3 = request.getParameter("parametr3");

  out.println("Wczytanie 3 parametrow z zadania :");
  out.println(parametr1);
  out.println(parametr2);
  out.println(parametr3);
  }*/

public void doPost(HttpServletRequest request,
        HttpServletResponse response)   throws ServletException, IOException {
    PrintWriter out = response.getWriter();

    out.println("Wczytanie 3 parametrow z zadania :");
    out.println(request.getParameter("parametr1"));
    out.println(request.getParameter("parametr2"));
    out.println(request.getParameter("parametr3"));
}

}

还有html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
  <TITLE>Przyklad POST</TITLE>
</HEAD>

<H1 ALIGN="CENTER">Przyklad HTTP POST</H1>

<FORM ACTION="http://localhost:8080/Parameters/wypisz_parametry"
  METHOD="POST">
Parametr 1:
<INPUT TYPE="TEXT" NAME="parametr1"><BR>
Parametr 2:
<INPUT TYPE="TEXT" NAME="parametr2"><BR>
Parametr 3:
<INPUT TYPE="TEXT" NAME="parametr3"><BR>
<INPUT TYPE="SUBMIT" VALUE="Wyslij">
</FORM>

</BODY>
</HTML>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <servlet>
    <servlet-name>Parameters</servlet-name>
    <servlet-class>pl.javastart.servlets.wypisz_parametry</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Parameters</servlet-name>
    <url-pattern>/wypisz_parametry</url-pattern>
  </servlet-mapping>
</web-app>

【问题讨论】:

  • 对我来说看起来不错。可能是您的 url 映射有问题。请将您的 web.xml 添加到您的问题中。

标签: java servlets post get


【解决方案1】:

doGet()doPost() 方法都可以调用同一个 servlet。所以问题绝对出在别的东西上。可能web.xml 中的 URL 映射有问题。

映射至少存在一个问题: 在页面上我们有:

ACTION="http://localhost:8080/Parameters/wypisz_parametry"

但是在web.xml 我们期望:

ACTION="http://localhost:8080/wypisz_parametry"

另外最好使用相对路径:

ACTION="/wypisz_parametry"

【讨论】:

  • 那它为什么有效?我认为在 web.xml 中我们期望 localhost:8080/Parameters/wypisz_parametry 因为 /Parameters 默认添加,因为它是项目名称。
  • 奇怪,但是 servlet 名称不应该是 URL 的一部分。请查看 java servlet 教程的示例:tutorialspoint.com/servlets/servlets-first-example.htm。 servlet 名称只存在于 web.xml 中,因为同一个 servlet 可以映射到不同的 URL,所以在这种情况下,我们将有一个 servlet 声明和多个 servlet 映射。
【解决方案2】:

在 html 代码操作部分中,您提到了该方法作为帖子。当您选择 post 方法时,get 方法不起作用

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 2012-02-27
    • 2011-07-09
    • 2013-08-12
    • 1970-01-01
    • 2011-08-18
    • 2014-05-23
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多