在HttpServlet的dopost方法中new出一个类,报错了,找了很久都没找到哪里错了。

package that.servlet;

import that.dao.UserDao;
import that.domain.User;

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 java.io.IOException;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置编码
        request.setCharacterEncoding("utf-8");
        //2.获取请求参数
        String username =request.getParameter("username");
        String password = request.getParameter("password");
        //封装user对象


        User loginUser = new User();
        loginUser.setUsername(username);
        loginUser.setPassword(password);
        //调用login方法
        UserDao dao = new UserDao();
        User user = dao.login(loginUser);
        //5.判断user
        if(user == null){
            //登录失败
            request.getRequestDispatcher("/failServlet").forward(request,response);
        }else{
            //登录成功
            //存储数据
            request.setAttribute("user",user);
            //转发
            request.getRequestDispatcher("/successServlet").forward(request,response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

package that.dao;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import that.domain.User;
import that.util.JDBCUtils;


/*
操作数据库中的User表的类
 */
public class UserDao {
   //声明JdbcTemplate对象共用
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDatasouce());
    /**
     * 登录方法
     * @param loginUser 只有用户名和密码
     * @return user包含用户的全部数据
     */

    public User login(User loginUser){
        //编写sql
        try {
            //1.编写sql
            String sql = "select * from user where username = ? and password = ?";
            //2.调用query方法
            User user = template.queryForObject(sql,
                    new BeanPropertyRowMapper<User>(User.class),
                    loginUser.getUsername(), loginUser.getPassword());


            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();//记录日志
            return null;
        }
    }
}

就是在new UserDao对象的时候报的错,后来我创建了一个测试类来用UserDao创建对象发现可以用,就是不能再dopost方法里创建这个类的对象,真的不知道为什么
报错图
图片说明

jar包:图片说明

提示DataAccessException没有找到,可能是对应的jar包没有在classpath下找到,如是maven管理包可以在pom文件中加下如下依赖或者下载spring-tx-5.2.4.RELEASE.jar,下载地址:https://repo1.maven.org/maven2/org/springframework/spring-tx/5.2.4.RELEASE/spring-tx-5.2.4.RELEASE.jar

<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.2.4.RELEASE</version>
</dependency>

这个是 web 应用工程,那么 spring 框架的 jar 包你有没有放到 WEB-INF 下的 lib 目录中呢?
或者说是通过别的方式添加的依赖呢?
有一种可能就是,lib 目录下没有这个 jar 包,导致 Tomcat 启动该应用时无法正确启动。

我也出现了同样的问题,已经解决了。可以试试用maven clean一下