我们按正常步骤创建servlet,接着配置web.xml文件,然后我们启动服务器时发现提示如下错误:
提示Tomcat服务器遇到一个问题,那我们首先看一下java文件:
我们可以发现在16行处:@WebServlet("/login")
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.UserDao;
import entity.User;
/**
* Servlet implementation class login
*/
@WebServlet("/login")
public class login extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post");
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
UserDao userDao = new UserDao();
//根据密码查询用户
User user = userDao.login(username, password);
//判断user是否为空
if (user != null) {
//将用户的对象放到session中
req.getSession().setAttribute("user", user);
//转发到result.jsp页面
req.getRequestDispatcher("message.jsp").forward(req, resp);
/**
response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参
数,如:
url?id=1.
request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求
能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而
sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
*/
}else {
//登录失败
req.setAttribute("info","用户名或密码错误!");
req.getRequestDispatcher("message.jsp").forward(req, resp);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post");
doPost(req, resp);
}
}
接下来看一下xml文件:
发现我们已经配置好服务器了,那么问题究竟出在哪里呢?其实@WebServlet("/login")是3.0版本自带的,方便我们开发的,写了他就可以不用配置web.xml文件,同样如果你习惯配置web.xml,那也可以删除@WebServlet("/login"),所以二者留一个即可。