【问题标题】:Java post form in JSP, get parameter in servlet returns NULLJSP中的Java post表单,servlet中的get参数返回NULL
【发布时间】:2014-03-06 15:36:26
【问题描述】:

我在提交简单的 Java 表单时遇到问题。

我有我的 login.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>The best login page in the world</title>
    </head>
    <body>

        <h1>Connexion</h1>
        <form id="asdasd" name="coucou" method="post" action="doLogin">
            <input type="text" name="user_email" />
            <input type="password" name="user_password" />
            <input type="submit" name="asd" value="Se connecter" />

        </form>
    </body>
</html>

我的 web.xml 指定 doLogin 实际上是 servlet loginServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>com.courses.web.servlet.loginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/loginServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/doLogin</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

还有我的 loginServlet.java

public class loginServlet extends HttpServlet {


    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {

        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse response) {
        String username = req.getParameter("user_email");
        String password = req.getParameter("user_password");

        Console console = System.console();
        console.printf("mail : %s\npassword: %s\n", username,password);

    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }

}

没什么复杂的,但我从 getParameter 得到的变量总是 NULL,我不知道为什么。

我做错了什么?

【问题讨论】:

  • 您访问哪个 URL 来显示您的登录视图?
  • 另外,既然您已经在使用 JSF,为什么不将它也用于您的登录视图呢?这样可以节省太多的开发时间。顺便说一句,如果您碰巧使用 JSF 2,我建议您将 Faces Servlet 的 URL 模式更改为 *.xhtml*.jsp,而不是旧的 /faces/*
  • 我从 localhost:8080/[projectname]/login.jsp 访问它。我对 Java 很陌生,使用 JSF 会改变我的登录视图吗?
  • 我试过了,没有任何改变
  • 谢天谢地,它没有工作,那意味着你的服务器坏了。在这一点上,我会为您的浏览器(或任何内置功能)使用一个插件来跟踪正在发送和接收的 HTTP 流量,以查看其中的实际内容;你所拥有的是正确的,应该可以工作!

标签: java jsp servlets


【解决方案1】:

由于您尚未发布堆栈跟踪,因此唯一可以返回 null 值的行是这一行:

Console console = System.console();

您的评论指出:我在 Netbeans 中运行 glassfish。所以,这条线会抛出一个NullPointerException

console.printf("mail : %s\npassword: %s\n", username,password); //console is null

尝试使用记录器来打印您的消息。只是为了一个肮脏的快速解决方案,请改用System.out.println,直到您碰巧配置和使用记录器。所以,简而言之,替换这些行:

Console console = System.console();
console.printf("mail : %s\npassword: %s\n", username,password);

收件人:

System.out.printf("mail : %s\npassword: %s\n", username,password));

【讨论】:

  • 我知道你要去哪里了;您说 OP 错误地将 NPE 报告为参数为空。你可能是对的。
  • 嗯,就是这样,为什么它不起作用?指针不应该为空,因为它指向一个具有值的变量...
  • @JayZus System.console 返回一个变量,指向运行 Java 应用程序的当前控制台。由于您从 Netbeans 控制台(不是真正的控制台)运行 GlassFish,它将返回 null
猜你喜欢
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2021-07-11
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
相关资源
最近更新 更多