我已经创建了一个基本的servlet来处理我的网络应用程序上的登录。
目前处于形式;
index.jsp - > loginServlet - > admin.jsp
请求通过映射/登录
发送我遇到的问题是,如果你尝试访问/ login而不发送post / get它会产生NullPointerException。
您如何处理直接发送的请求?还是有更好的方法来解决这个问题?
堆栈追踪:
java.lang.NullPointerException
loginServlet.doGet(loginServlet.java:39)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
HttpSession session = request.getSession(true);
String task = request.getParameter("task");
if(task.equals("logout")) {
session.removeAttribute("username");
}
RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp");
dispatcher.forward(request, response);
}
答案 0 :(得分:1)
如果您尝试访问/ login而不发送post / get
这怎么可能?
我想有一些误解或糟糕的设计正在进行中。以下是一些提示您走上正确轨道的提示:
将login.jsp
放入/WEB-INF
文件夹。
重写doGet()
以便转发到该JSP。
将登录处理作业保留在doPost()
中。确保它永远不会抛出RuntimeException
。这些异常基本上是开发人员的错误。始终检查null
上的用户输入,绝不相信用户输入。
这样,当您通过GET请求调用该servlet时,将打开登录页面(例如,直接在地址栏中输入其URL,跟随书签等,并且当您提交{{1时)将完成登录处理作业在JSP内部。
作为奖励,您可以获得更好的网址。
答案 1 :(得分:0)
有可能是你的NullPointer异常:
String task = request.getParameter("task");
if(task.equals("logout")) {
session.removeAttribute("username");
}
因为您没有先检查确保您甚至检索到任务参数。需要检查该值是否为空。