【问题标题】:Send parameters from JSP to Servlet using POST使用 POST 将参数从 JSP 发送到 Servlet
【发布时间】:2013-05-16 06:02:06
【问题描述】:

我正在构建一个简单的网络应用程序并尝试创建一个登录页面。该页面由一个 JSP 和一个加载 Servlet 的表单组成。

我已经使用 GET 方法使表单工作:

JSP 看起来像这样:

<form method="get" action="Login">
Email:<input name="email"/>
Password:<input name="password"/>
<input type="Submit" value="Log in"/>

在 Servlet 中:

@WebServlet(name = "Login", urlPatterns = {"/Login"})
public class Login extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");

//Assign variables from the request parameters
String loginFormEmail = request.getParameter("email");
String loginFormPassword = request.getParameter("password");

此代码有效,但它在 URL 字符串中包含用户名和密码,因此这显然不是一个好习惯。我曾尝试使用 POST 来执行此操作,但我遇到了错误。 (HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST)

我需要知道如何使用 POST 将参数从 JSP 发送到 Servlet。我认为这可能涉及使用 RequestDispatcher 对象,但我发现的所有教程都解释了使用 RequestDispatcher 将数据从 Servlet 发送到 JSP,而不是相反。您可以/应该使用 Request Dispatcher 将 POST 数据从 JSP 发送到 Servlet 吗?以及如何从 Servlet 访问这些参数? (对于 POST 是否有等效的 request.getParameter()?)

我知道使用 POST 仍然不安全,但它比在查询字符串中包含密码要好得多,我稍后会考虑安全性。

对于这个基本问题,我深表歉意,我在网上找到了很多教程,但似乎没有一个能回答这个具体问题。谢谢。

【问题讨论】:

  • 使用 POST 时遇到什么错误?
  • 我在使用 POST 时遇到的错误是 HTTP Status 405 - HTTP method POST is not supported by this URL
  • 请多做一点研究。您可以将 “HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST” 复制粘贴到 Google 搜索输入字段中,甚至只是在 Stack Overflow 上(右上角)。

标签: java jsp servlets netbeans


【解决方案1】:

试试

<form method="POST" action="Login>

注意:method 而不是 type 用于指定 GET/POST。

但它实际上并不比使用 GET 更“安全”。它们仍然在帖子正文中以明文形式提供。如果您希望它安全,请确保使用 HTTPS。

编辑

您现在已经编辑了您的问题,看来您使用的是method,而不是type。因此,如果在将其更改为 POST 后仍然出现错误,请指定您遇到的错误。

编辑2

您指定您收到HTTP method POST is not supported by this URL 错误。这意味着您的 servlet 不接受 POST 方法。这很可能意味着您正在继承一些只接受GET 的基本servlet。查看 servlet 的所有代码会很有帮助。

【讨论】:

  • 谢谢,我已更正此问题,但在使用 POST 时仍然出现错误。我在提交表单时遇到的错误是:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST
  • 您可能没有显示所有代码。您是否继承了另一个 servlet?
  • 我正在使用扩展 HttpServlet 的 NetBeans Servlet 模板。我已更新问题以显示 Servlet 的完整代码。谢谢。
  • 这不可能是所有代码。 HttpServlet 类中没有 processRequest,因此必须从其他地方调用它。我很确定你在某处有一个doGet 方法。确保您的编辑器没有折叠任何内容。
  • 你是对的,在 Servlet 模板底部的“编辑器折叠”中有折叠的 HttpServlet 方法。我想我在某处丢失了 } 导致问题。很抱歉浪费您的时间。
【解决方案2】:
<form type="get" action="Login" method="POST">
 Email:<input name="email"/>
 Password:<input name="password"/>
<input type="Submit" value="Log in"/>

我建议你不要使用processRequest(),而是使用doPost() 方法。

【讨论】:

    【解决方案3】:

    在你的元素中使用 method="POST" 属性

    【讨论】:

    • 当我这样做时,我在提交表单时收到此错误:HTTP Status 405 - HTTP method POST is not supported by this URL
    【解决方案4】:

    Login 类中覆盖 HttpServlet#doPost() 方法

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        String loginFormEmail = request.getParameter("email");
        String loginFormPassword = request.getParameter("password");
        // do something to produce a response
    }
    

    这可能需要您更改可能被覆盖的service() 方法以调用您的processRequest() 方法,而不管HTTP 方法如何。这取决于您未显示的 Login 类实现的其余部分。

    然后更改您的&lt;form&gt; 以发出POST 请求。

    【讨论】:

      【解决方案5】:

      尝试重写 HttpServlet 方法 doPost() 和 doGet():

      public void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException,IOException {
          processRequest(request,response);
      }
      public void doPost(HttpServletRequest request, HttpServletResponse response)
              throws ServletException,IOException {
          processRequest(request,response);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多