如何在eclipse中将servlet程序与数据库(mysql)连接?
Posted
技术标签:
【中文标题】如何在eclipse中将servlet程序与数据库(mysql)连接?【英文标题】:how to connect servlet program with database(mysql) in eclipse? 【发布时间】:2015-02-16 17:15:51 【问题描述】:import java.sql.*;
import java.io.*;
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.awt.*;
@WebServlet("/JDBCServlet")
public class JDBCServlet extends HttpServlet
private static final long serialVersionUID = 1L;
public JDBCServlet()
super();
// TODO Auto-generated constructor stub
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
String uname,pwd;
uname=request.getParameter("t1");
pwd=request.getParameter("t2");
PrintWriter out=response.getWriter();
response.setContentType("text/html");
try
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con=DriverManager.getConnection
("jdbc:mysql//localhost:3306/school","t1","t2");
System.out.println("driver is connected");
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("select * from student");
out.println("<html><head><title>DATABASE_RESULT</title></head><body>");
out.println("<tr><td>ROLL_NO=</td><td>FIRST_NAME</td><td>LAST_NAME</td><td>"+"CLASS_NAME</td></tr>");
while(rs.next())
out.println("<tr><td>"+rs.getInt(1)+"</td></tr>");
out.println("<tr><td>"+rs.getString(2)+"</td></tr>");
out.println("<tr><td>"+rs.getString(3)+"</td></tr>");
out.println("<tr><td>"+rs.getInt(4)+"</td></tr>");
out.println("</body></html>");
catch (Exception e)
System.out.println("exception occured");
e.printStackTrace();
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
和html标签是
在此处插入标题
<form method="get" action="JDBCServlet">
USER_NAME<input type="text" name="t1" value="" ><br>
USER_PASSWORD<input type="password" name="t2" value = ""><br>
<input type="submit" name="login" value="login">
</form>
输出(异常)->
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at JDBCServlet.doGet(JDBCServlet.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
我已经编写了单独的 db 程序和 servlet 程序,它们都可以正常工作,但是当我用单个程序编写时却没有。请回答。
【问题讨论】:
定义无效。不工作是什么意思? 我没有得到任何输出。但是在控制台中,就像在 catch 中一样,我发生了异常。当我在 Class.forName() 之前写它时,它工作但在它之后没有。谢谢 Class.forName() 方法发生异常。 我认为错误 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 是由于缺少 mysqlconnector jar 文件 那么请告诉我如何在servlet程序中导入mysql jar ......谢谢......@anptk 【参考方案1】:你没有说明你得到了什么例外,这对任何人帮助你都很重要。 假设异常是 ClassNotFound/NoClassDefFoundError,则 可能是您的类路径中没有设置 mysql-connector jar。如果你这样做,它可能会解决问题。 祝你好运。
【讨论】:
我也进入了异常............还有一件事 Connection con=DriverManager.getConnection ("jdbc:mysql//localhost:3306/school", “t1”,“t2”);我将 t1 和 t2 替换为 unname 和 pwd 但仍然无法正常工作。@user3138997 1.确保您的 lib 文件夹中有 mysql-connecter.jar。如果你没有,你可以从 mysql 官方网站下载它。 2. 正如 singhakash 正确指出的那样,将 Class.forName("com.mysql.jdbc.Driver").newInstance() 更改为 Class.forName("com.mysql.jdbc.Driver");再次祝你好运 在 Eclipse 中我已经在项目中添加了 jar 文件,然后我也删除了 newInstance() 但它没有工作............谢谢。 @user3138997 要验证您是否使用了正确的 jar,解压缩 jar 文件并检查是否看到 Driver 类。顺便说一句,如果你说在项目中添加了jar文件时没有从http://dev.mysql.com/downloads/connector/j/下载干净的文件,你是怎么做到的?最简单的方法是将 jar 文件放入 WEB-INF/lib 文件夹中。刷新并重新运行。 我做到了,但它仍然不起作用..现在我想我放置了 mysql jar 几乎所有文件夹,但结果相同..........谢谢@user3138997【参考方案2】:从
中删除.newInstance()
Class.forName("com.mysql.jdbc.Driver").newInstance()
;
因为它不是必需的,请记住您在类路径中有 mysql-connecter.jar
【讨论】:
不......对不起,我没有告诉你......仍然有同样的问题......@singhakash @rajeevranjan 你是如何添加 jar 的 java 资源-> src-> 配置构建路径->(在库中)添加外部jar 还复制并粘贴了项目中的几乎所有文件夹............但没有工作......谢谢@singhakash......【参考方案3】:这可能对你有帮助
首先是jsp页面
<%@ page language="java"
contentType="text/html; charset=windows-1256"
pageEncoding="windows-1256"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<title>Login Page</title>
</head>
<body>
<form action="LoginServlet">
Please enter yopur username
<input type="text" name="un"/><br>
Please enter your password
<input type="text" name="pw"/>
<input type="submit" value="submit">
</form>
</body>
LoginServlet
package examplepackage;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException
try
UserBean user = new UserBean();
user.setUserName(request.getParameter("un"));
user.setPassword(request.getParameter("pw"));
// user = UserDAO.login(user);
UserDAO obj=new UserDAO();
int k=obj.loginCheck(user);
if(k==1)
response.sendRedirect("userLogged.jsp"); //logged-in page
else
response.sendRedirect("invalidLogin.jsp"); //error page
/*
if (user.isValid())
HttpSession session = request.getSession(true);
session.setAttribute("currentSessionUser",user);
response.sendRedirect("userLogged.jsp"); //logged-in page
else
response.sendRedirect("invalidLogin.jsp"); //error page
*/
catch (Throwable theException)
System.out.println(theException);
还有豆子
package examplepackage;
public class UserBean
private String username;
private String password;
public String getPassword()
return password;
public void setPassword(String newPassword)
password = newPassword;
public String getUsername()
return username;
public void setUserName(String newUsername)
username = newUsername;
DAO
public class UserDAO
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
public UserDAO()
try
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost/db_sampleservlet","root","root");
catch(Exception e)
System.out.println("Error in connection"+e);
public int loginCheck(UserBean bean)
String u=bean.getUsername();
String p=bean.getPassword();
int flag=0;
try
ps=con.prepareStatement("select * from tbl_login where username=? and password=?");
ps.setString(1, u);
ps.setString(2, p);
rs=ps.executeQuery();
while(rs.next())
flag=1;
catch(Exception e)
System.out.println("Error in loginCheck"+e);
return flag;
注意:加载驱动程序类需要 MysqlConnector .jar 文件(com.mysql.jdbc.Driver)
这是非常简单的架构,这可能对你有所帮助
【讨论】:
【参考方案4】:我犯了很多错误。
1> 连接 con=DriverManager.getConnection ("jdbc:mysql//localhost:3306/school","t1","t2"); 代替“t1”和“t2”将有uname 和pwd。 我也错过了一个':'。 因此声明将是
Connection con=DriverManager.getConnection ("jdbc:mysql://localhost:3306/school",uname,pwd);
2> 我也没有正确导入驱动程序 在这里,我错过了复制 mysql.jar 并将其放入 WebContent/WEB-INF/lib 中。
感谢朋友们的支持............
【讨论】:
以上是关于如何在eclipse中将servlet程序与数据库(mysql)连接?的主要内容,如果未能解决你的问题,请参考以下文章
Servlet.init() for servlet [spring-dispatcher] threw exception
如何在 Eclipse 中将我的应用程序添加到 Tomcat?
在 tomcat 或 jetty 中部署 mule 应用程序时,如何在 configuration.xml 文件中将 http 端点更改为 servlet 端点?