在开发servlet程序时我遇到了一个使用netbeans ide并使用glassfish服务器的探测器 这是我的index.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();
}
}
我认为解析变量时出现的问题是servlet ... 请任何人可以帮助我? 并且索引文件执行完美但是当我直接点击按钮而不在文本框中输入任何内容时它显示正确的输出但是当我输入在程序(abc&amp; xyz)中指定的用户名和密码时它显示错误:
HTTP状态500 - 内部服务器错误
输入例外报告
messageInternal Server Error
description服务器遇到内部错误,导致无法完成此请求。
例外
显示java.lang.NullPointerException
注意GlassFish Server Open Source Edition 4。1日志中提供了异常的完整堆栈跟踪及其根本原因。 GlassFish Server开源4.1版
答案 0 :(得分:1)
GenericServlet
用于与协议无关的servlet。对于Web,请使用HttpServlet
。因此,您应该扩展HttpServlet
而不是GenericServlet
并覆盖doGet
或doPost
方法。由于您有密码字段,因此覆盖doPost
方法,出于安全原因,建议使用此方法。比在web.xml
配置servlet或使用@WebServlet
注释
@WebServlet
public class NewServlet extends HttpServlet{
public void doPost(...){}
}
在表单中,您需要定义post
方法
<form action="NewServlet" method="post">
...
</form>
答案 1 :(得分:1)
问题在于您未能将正确的名称传递给密码字段:
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">
答案 2 :(得分:1)
您的HTML无法区分名称的name = t1
和密码的name="t1"
。尝试将其更改为t1
和t2
。在您的代码中,您不会向servlet发送任何t2
。还尝试使用HttpServlet而不是GenericServlet。