Ошибка при сборке проекта: Deployment error: Cannot invoke "String.isEmpty()"
Пытаюсь создать небольшую Web приложение для лабораторной работы с использованием Servlet, но при сборке проекта в NetBeans 19 возникает ошибка Deployment error: Cannot invoke "String.isEmpty()" because "path" is null
Не подскажете откуда могут расти ноги, посмотрел весь код, вроде нигде не замечен String.isEmpty()
ControllerServlet
import DAO.UserDAO;
import DAO.ProductDAO;
import Models.User;
import Models.Product;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ControllerServlet extends HttpServlet {
private UserDAO userDAO;
private ProductDAO productDAO;
@Override
public void init() throws ServletException {
super.init();
userDAO = new UserDAO();
productDAO = new ProductDAO();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
if (action == null) {
action = "list";
}
switch (action) {
case "create":
showCreateForm(req, resp);
break;
case "list":
default:
listUsersAndProducts(req, resp);
break;
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
switch (action) {
case "create":
createUserAndProduct(req, resp);
break;
default:
resp.sendRedirect("ControllerServlet?action=list");
break;
}
}
private void showCreateForm(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/WEB-INF/views/create.jsp").forward(req, resp);
}
private void createUserAndProduct(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String userName = req.getParameter("userName");
String productName = req.getParameter("productName");
User user = new User();
user.setName(userName);
userDAO.save(user);
Product product = new Product();
product.setName(productName);
productDAO.save(product);
resp.sendRedirect("ControllerServlet?action=list");
}
private void listUsersAndProducts(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("users", userDAO.getAll());
req.setAttribute("products", productDAO.getAll());
req.getRequestDispatcher("/WEB-INF/views/list.jsp").forward(req, resp);
}
}
ProductDAO
package DAO;
import Models.Product;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class ProductDAO implements DAO<Product> {
private DataSource dataSource;
public ProductDAO() {
try {
InitialContext context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/javadao");
} catch (NamingException e) {
e.printStackTrace();
}
}
@Override
public Product save(Product product) {
String sql = "INSERT INTO Product (id, name) VALUES (?, ?)";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, product.getId());
statement.setString(2, product.getName());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return product;
}
@Override
public void update(Product product) {
String sql = "UPDATE Product SET name = ? WHERE id = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, product.getName());
statement.setInt(2, product.getId());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void delete(Product product) {
String sql = "DELETE FROM Product WHERE id = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, product.getId());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public Product get(int id) {
Product product = null;
String sql = "SELECT * FROM Product WHERE id = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, id);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
product = new Product();
product.setId(resultSet.getInt("id"));
product.setName(resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return product;
}
@Override
public List<Product> getAll() {
List<Product> products = new ArrayList<>();
String sql = "SELECT * FROM Product";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
Product product = new Product();
product.setId(resultSet.getInt("id"));
product.setName(resultSet.getString("name"));
products.add(product);
}
} catch (SQLException e) {
e.printStackTrace();
}
return products;
}
@Override
public List<Product> search(String query) {
List<Product> products = new ArrayList<>();
String sql = "SELECT * FROM Product WHERE name LIKE ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, "%" + query + "%");
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
Product product = new Product();
product.setId(resultSet.getInt("id"));
product.setName(resultSet.getString("name"));
products.add(product);
}
} catch (SQLException e) {
e.printStackTrace();
}
return products;
}
}
UserDAO
package DAO;
import Models.User;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class UserDAO implements DAO<User> {
private DataSource dataSource;
public UserDAO() {
try {
InitialContext context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/javadao");
} catch (NamingException e) {
e.printStackTrace();
}
}
@Override
public User save(User user) {
String sql = "INSERT INTO User (id, name) VALUES (?, ?)";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, user.getId());
statement.setString(2, user.getName());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
@Override
public void update(User user) {
String sql = "UPDATE User SET name = ? WHERE id = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, user.getName());
statement.setInt(2, user.getId());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void delete(User user) {
String sql = "DELETE FROM User WHERE id = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, user.getId());
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public User get(int id) {
User user = null;
String sql = "SELECT * FROM User WHERE id = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, id);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
user = new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
@Override
public List<User> getAll() {
List<User> users = new ArrayList<>();
String sql = "SELECT * FROM User";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
@Override
public List<User> search(String query) {
List<User> users = new ArrayList<>();
String sql = "SELECT * FROM User WHERE name LIKE ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, "%" + query + "%");
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
}
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/javadao" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javadao"/>
</Context>
Ответы (1 шт):
Автор решения: Котлетка еее
→ Ссылка
Найдите класс, в котором у вас используется переменная path типа String. По логике программы, в неё должен быть записан путь к чему-то (например, к файлу конфигурации БД). Но её значение почему-то null. Отсюда ноги и растут.