无法执行servlet代码
can not execute servlet code
在开发 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&xyz)它显示错误:
HTTP 状态 500 - 内部服务器错误
输入异常报告
消息内部服务器错误
说明服务器遇到内部错误,无法完成此请求。
异常
java.lang.NullPointerException
注意 GlassFish Server Open Source Edition 4.1 日志中提供了异常的完整堆栈跟踪及其根本原因。
GlassFish Server 开源版 4.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>
这里的问题是您未能将正确的名称传递给密码字段:
password:<input type="password" name="t1">
在 servlet 中,您使用了 returns p2
作为 null
的代码
String p2=req.getParameter("t2");
p2.equals(pwd)//results in NPE
在 html
试试这个
password:<input type="password" name="t2">
您 HTML 无法区分 name = t1
的名称和 name="t1"
的密码。尝试将其更改为 t1
和 t2
。在您的代码中,您没有向 servlet 发送任何 t2
。也尝试使用 HttpServlet 而不是 GenericServlet。
在开发 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&xyz)它显示错误:
HTTP 状态 500 - 内部服务器错误
输入异常报告
消息内部服务器错误
说明服务器遇到内部错误,无法完成此请求。
异常
java.lang.NullPointerException
注意 GlassFish Server Open Source Edition 4.1 日志中提供了异常的完整堆栈跟踪及其根本原因。 GlassFish Server 开源版 4.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>
这里的问题是您未能将正确的名称传递给密码字段:
password:<input type="password" name="t1">
在 servlet 中,您使用了 returns p2
作为 null
String p2=req.getParameter("t2");
p2.equals(pwd)//results in NPE
在 html
试试这个password:<input type="password" name="t2">
您 HTML 无法区分 name = t1
的名称和 name="t1"
的密码。尝试将其更改为 t1
和 t2
。在您的代码中,您没有向 servlet 发送任何 t2
。也尝试使用 HttpServlet 而不是 GenericServlet。