如何在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)连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何在eclipse中创建一个servlet程序

Servlet.init() for servlet [spring-dispatcher] threw exception

如何在 Eclipse 中将我的应用程序添加到 Tomcat?

servlet 与 J2me 项目通信?

如何使用eclipse创建简单的servlet

在 tomcat 或 jetty 中部署 mule 应用程序时,如何在 configuration.xml 文件中将 http 端点更改为 servlet 端点?