当前位置: 首页 > 知识库问答 >
问题:

无法执行servlet代码

傅茂实
2023-03-14

在开发servlet程序时,我遇到了一个问题,我使用了netbeans ide,并使用了glassfish服务器。这是我的索引代码。html文件:-

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <body>
        <form action="NewServlet">
            name:<input type="text" name="t1">
            password:<input type="password" name="t1">
            <input type="submit" value="login">
        </form>
    </body>
</html>

servlet的代码是:-

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

/**
 *
 * @author Prathamesh
 */
public class NewServlet extends GenericServlet {
    @Override
    public void service(ServletRequest req,ServletResponse res)throws ServletException,IOException
    {
        res.setContentType("text/html");
        PrintWriter pw=res.getWriter();
        String un="abc";
        String pwd="xyz";
        String p1=req.getParameter("t1");
        String p2=req.getParameter("t2");
        if((p1.equals(un))&&(p2.equals(pwd)))
            pw.println("<h1>Welcome to home page</h1>");
        else
            pw.println("Invalid");
        pw.close();    
    }
}

我认为问题是在解析变量时发生的。。。拜托,谁能帮我??而且索引文件执行得很好,但当我直接点击按钮而不在文本框中键入任何内容时,它会显示正确的输出,但当我输入程序(abc)中指定的用户名和密码时

HTTP状态500-内部服务器错误

类型异常报告

Message内部服务器错误

描述服务器遇到内部错误,无法满足此请求。

例外

JAVAlang.NullPointerException

请注意,GlassFish Server开源版本4.1日志中提供了异常及其根本原因的完整堆栈跟踪。GlassFish服务器开源版本4.1

共有3个答案

程凯定
2023-03-14

GenericServlet用于协议无关的servlet。对于Web,使用HttpServlet。因此,您应该扩展HttpServlet而不是GenericServlet并覆盖doGetdoPost方法。由于您有密码字段,因此覆盖doPost方法,出于安全原因,建议使用该方法。而不是在web.xml配置servlet或使用@WebServlet注释

@WebServlet
public class NewServlet extends HttpServlet{
   public void doPost(...){}
}

在表单中,您需要定义post方法

<form action="NewServlet" method="post">
      ...
</form>
公孙智
2023-03-14

HTML无法区分名称的name=t1和密码的name=“t1”。尝试将其更改为t1t2。在代码中,您没有向servlet发送任何t2。还可以尝试使用HttpServlet代替GenericServlet。

查学文
2023-03-14

这里的问题是您未能将正确的名称传递给密码字段:

password:<input type="password" name="t1">

在servlet中,您使用了代码,它将p2返回为null

String p2=req.getParameter("t2");

p2.equals(pwd)//results in NPE

用html试试这个

password:<input type="password" name="t2">
 类似资料:
  • 我没有得到“你好”:请想知道为什么和做什么

  • 无法对代理执行签出:“”C:\Program Files\git\bin\git.exe“-C Core.askpass=C:\TeamCity\BuildAgent\Temp\BuildTmp\Pass8517307457314531623.bat-C Credential.helper=-C Credential.helper=C:/TeamCity/Buildagent/Temp/Build

  • 我正在尝试从命令行从Android SDK 工具运行 。但是,它不会启动并打印以下异常: 我的命令行是: 已设置。 以下是我的安装(sdkmanager - list): 怎么了?

  • 问题内容: 我一直在做倒计时计划,我想到了这个。 在while循环的最后,没有内部的print / println语句,倒计时代码将不会执行。怎么会?该程序可以很好地与print语句一起工作。 问题答案: 首先,您的程序是 线程不安全的, 因为它是一个 共享变量 ,但是在同步块中既不访问也不访问。 现在,偶然地是一种同步方法,并且在任何实际架构上,使用 内存屏障 CPU指令来实现进入和退出同步块,

  • 我正在尝试为DataBricks设置一个开发环境,因此我的开发人员可以使用VSCODE IDE(或其他一些IDE)编写代码并针对DataBricks集群执行代码。 因此,我阅读了DataBricks Connect的文档,并按照文档中的建议进行了设置。https://docs.databricks.com/dev-tools/databricks-connect.html#overview 发布安

  • 问题内容: 构建示例mvn项目后,我添加了依赖项和Java代码。 然后,我通过成功构建了JAR 。最后,尝试运行JAR时遇到错误。 问题答案: 您需要使用以下命令在清单中设置主类 取自这里。 编辑 如果您想将生成的jar与依赖项打包在一起,可以使用此 取自这里。