【发布时间】:2016-06-19 09:22:20
【问题描述】:
我的项目有问题。项目文件:
House.class
public class House implements Serializable {
//properties -------------------------------------------------------------
private String price;
private String square;
private String RoomNumbers;
//------------------------------------------------------------------------
//getters - settersm Object overriding.... -----------------------------
HouseDAO.class
public class HouseDAO {
Connection connection;
final String DB_CONNECTION = "jdbc:mysql://localhost:3306/mydb2";
final String DB_USER = "root";
final String DB_PASSWORD = "root";
public HouseDAO(Connection connection) {
this.connection = connection;
}
public List<House> getList() {
List<House> houses = new ArrayList<>();
try {
connection = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
System.out.println("Connection available");
PreparedStatement ps = connection.prepareStatement("SELECT Square, RoomNumbers, Price FROM houses WHERE District = 'Dnepr'");
ResultSet rs = ps.executeQuery();
while (rs.next()){
House house = new House();
house.setSquare(rs.getString("Square"));
house.setRoomNumbers(rs.getString("RoomNumbers"));
house.setPrice(rs.getString("Price"));
houses.add(house);
}
}catch (Exception ex){
System.out.println("SQL exceprion");
ex.printStackTrace();
}
return houses;
}
}
和 Servlet: HousesBaseServlet
@WebServlet("/post")
public class HosesBaseServlet extends HttpServlet {
Connection conn;
private HouseDAO houseDAO;
@Override
public void init(){
houseDAO = new HouseDAO(conn);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
//choice from html form
// String choice = request.getParameter("district");
try {
List<House> houses = houseDAO.getList();
request.setAttribute("houses", houses);
request.getRequestDispatcher("/houses.jsp").forward(request,response);
}catch (Exception ex ) {
System.out.println("Fail to connect with base");
ex.printStackTrace();
}
}
}
我阅读了一些解决方案,但没有帮助。两个例外的问题:
SQL 异常 java.sql.SQLException: 找不到合适的驱动程序 jdbc:mysql://localhost:3306/mydb2
我尝试添加:
Class.forName("com.mysql.jdbc.Driver");
添加到我的代码中,并将mysql连接器jar添加到我的项目中,但它会引发异常:
SQL 异常 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
第二个例外:
JasperException:绝对 uri:http://java.sun.com/jsp/jstl/core 无法在 web.xml 或部署的 jar 文件中解析 此应用无法与基地连接
这是我的 pom.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
,
JSP 标签库:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %
和项目结构: [项目结构][1]
在项目结构中 -> 库我有所有的罐子。
【问题讨论】:
-
你的 WEB-INF 没有任何 lib 文件夹来放置 mysql jar
-
@Override public void init(){ houseDAO = new HouseDAO(conn); }有点奇怪conn在这个 servlet 中有什么意义。关于您的问题,我认为 Idea 没有“看到”这是一个 Maven 项目,请尝试重新导入它 -
没有帮助。仅在使用 tomcat 时出现问题,在具有 MAIN 类的标准项目中所有工作
-
检查 MySQL jar 是否存在 - 这就是错误。您可以将其设为
<scope>runtime</scope>,因为 JDBC 不会针对供应商的 API/jar 进行编译。对于当前的 JDBC 4,将不再需要Class.forName自己动态加载驱动程序。最后的补救措施将 jar 放在 WEB-INF/lib/ 中。
标签: java mysql jsp servlets jdbc