Java 通过servlet从数据库获取信息

Java 通过servlet从数据库获取信息,java,jsp,servlets,model-view-controller,jdbc,Java,Jsp,Servlets,Model View Controller,Jdbc,当我加载index.jsp时,我希望所有的客户都被加载到页面上。由于某些原因,我无法让客户从数据库中显示。我假设servlet中的某个地方出了问题 下面是索引页和servlet 指数 客户刀 包edu.witc.Assignment05.model; 导入java.sql.CallableStatement; 导入java.sql.Connection; 导入java.sql.DriverManager; 导入java.sql.ResultSet; 导入java.sql.SQLException

当我加载index.jsp时,我希望所有的客户都被加载到页面上。由于某些原因,我无法让客户从数据库中显示。我假设servlet中的某个地方出了问题

下面是索引页和servlet

指数 客户刀
包edu.witc.Assignment05.model;
导入java.sql.CallableStatement;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.util.ArrayList;
导入java.util.Collection;
公共类客户道{
静态最终字符串数据库\u URL=
“jdbc:jtds:sqlserver://localhost/A1Kennel;实例=sqlexpress”;
private GenericClassmyCustomers=新的GenericClass();
public CustomerDAO()抛出ClassNotFoundException
{}
公共集合getData()引发ClassNotFoundException
{//可以从控制器调用以获取数据的公共方法
集合customerList=null;
customerList=fetchData();
返回客户列表;
}
@抑制警告(“未选中”)
私有集合fetchData()引发ClassNotFoundException
{//稍加调整,此方法可用于返回任何
//从数据库中收集
//结果集rs=null;
字符串myProc=“{Call FetchCustomer_All()}”;
客户=空;
CollectionalCustomers=新的ArrayList();
CallableStatement procCall=null;
连接conn=null;
尝试
{
类forName(“net.sourceforge.jtds.jdbc.Driver”);
conn=DriverManager.getConnection(数据库URL,“,”);
procCall=conn.prepareCall(myProc);
ResultSet rs=procCall.executeQuery();
如果(rs!=null)
{
while(rs.next())
{
//构建一个对象
customer=新客户(rs.getInt(“customerId”)、rs.getString(“firstName”)、rs.getString(“lastName”),
rs.getBoolean(“customerIsActive”)、rs.getInt(“emailId”)、rs.getString(“emailAddress”),
rs.getInt(“emailUnitId”)、rs.getInt(“phoneId”)、rs.getInt(“phoneUnitId”)、rs.getString(“phoneNumber”);
myCustomers.addItem(客户);
}
allCustomers=(集合)myCustomers.getCollection();
}
}
catch(SQLException-badSQL)
{
System.out.print(badSQL.getMessage());
}
最后{
尝试
{
procCall.close();
康涅狄格州关闭();
}
捕获(例外情况除外)
{
例如getMessage();
}
}
退回所有客户;
}
}
您需要:

  • 访问servlet而不是URL中的JSP视图,这意味着您将使用GET请求
  • 在servlet的
    doGet
    方法中:
    • 检索要显示给用户的所有所需数据
    • 将此数据存储在请求属性中
    • 转发到所需的视图(JSP)
这是一个如何实现
doGet
方法的框架:

public void doGet(HttpServletRequest request, 
        HttpServletResponse response)
        throws ServletException, IOException {
    CustomerService customerService = new CustomerService();
    //assuming this method connects to database using a database connection pool
    //and retrieves the results through JDBC using ResultSet
    List<Customer> customers = customerService.findAllCustomers();
    //store the data in request attribute
    request.setAttribute("customers", customers);       
    //forward to the desired view:
    String url = "/customerManagement.jsp";
    request.getRequestDispatcher(url).forward(request,response);
}
public void doGet(HttpServletRequest),
HttpServletResponse(响应)
抛出ServletException、IOException{
CustomerService CustomerService=新CustomerService();
//假设此方法使用数据库连接池连接到数据库
//并使用ResultSet通过JDBC检索结果
列出客户=customerService.findAllCustomers();
//将数据存储在请求属性中
request.setAttribute(“客户”,客户);
//转发到所需的视图:
字符串url=“/customerManagement.jsp”;
getRequestDispatcher(url).forward(请求,响应);
}

除此之外,您应该知道在Servlet上没有任何状态。这将导致此处提到的并发问题:。这意味着,从Servlet中删除
列表客户
字段(以及任何非
最终静态
字段或任何非托管资源)。

这可能会有所帮助。我添加了customer类和customer dao,它们连接到数据库并调用一个存储过程。在这方面我是新手,java对我来说有点难掌握。我想不出哪里出了问题。
package edu.witc.Assignment05.controller;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//import javax.servlet.annotation.WebServlet;
//import javax.servlet.http.HttpServlet;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;




import javax.servlet.http.HttpSession;

import edu.witc.Assignment05.model.Customer;
import edu.witc.Assignment05.model.CustomerDAO;




@WebServlet(description = "servlet to get act as controller between form and models", urlPatterns = { "/fetchDataServlet","/addCustomer","/addPet", "/customerManagement" })
public class FetchDataServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public FetchDataServlet() {
        super();
    }

    private List<edu.witc.Assignment05.model.Customer> customers = new ArrayList<Customer>();


    private void addCustomer(HttpServletResponse response, HttpServletRequest request)//redirect to form
            throws IOException, ServletException {
            String url = "/customerManagement.jsp";
            //processRequest(request, response);
            Customer customer = new Customer();
            HttpSession session = request.getSession();
            session.setAttribute("customer", customer);
            request.getRequestDispatcher(url).forward(request,response);
     }

    private void addPet(HttpServletResponse response, HttpServletRequest request)//redirect to pet page
         throws IOException, ServletException {
         String url = "/pets.jsp";
         request.getRequestDispatcher(url).forward(request,response);
    }

    public void doGet(HttpServletRequest request, 
        HttpServletResponse response)
        throws ServletException, IOException {

    HttpSession session = request.getSession();
    request.setAttribute("customers", customers);
    String url = "/index.jsp";
 request.getRequestDispatcher(url).forward(request,response);

}
    public void doPost(HttpServletRequest request, 
            HttpServletResponse response)
            throws ServletException, IOException {

        int customerId = 0;
        Customer customer = new Customer();

        if (customer != null) {
            customerId = customers.size()+1;
            customer.setCustomerId(customerId);
            customer.setFirstName(request.getParameter("firstName"));
            customer.setLastName(request.getParameter("lastName"));
            customer.setEmailAddress(request.getParameter("email"));
            customer.setPhoneNumber(request.getParameter("phone"));
            customers.add(customer);



        }

    }
}
package edu.witc.Assignment05.model;

public class Customer {

    int customerId = 0;
    String firstName = ""; 
    String lastName = "";
    boolean customerIsActive = true;
    int emailId = 0;
    String emailAddress = "";
    int emailUnitId = 0;
    int phoneId = 0;
    int phoneUnitId = 0;
    String phoneNumber = "";

    public Customer(){

    }


    public Customer(int customerId, String firstName, String lastName,
                    boolean customerIsActive, int emailId, String emailAddress,
                    int emailUnitId, int phoneId, int phoneUnitId, String phoneNumber){
        this.customerId = customerId;
        this.firstName = firstName;
        this.lastName = lastName;
        this.customerIsActive = customerIsActive;
        this.emailId = emailId;
        this.emailAddress = emailAddress;
        this.emailUnitId = emailUnitId;
        this.phoneId = phoneId;
        this.phoneUnitId = phoneUnitId;
        this.phoneNumber = phoneNumber;
    }

    public int getCustomerId() {
        return customerId;
    }

    public String getFirstName() {
        return firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public boolean getCustomerIsActive(){
        return customerIsActive;
    }
    public int getEmailId(){
        return emailId;
    }
    public String getEmailAddress(){
        return emailAddress;
    }
    public int getEmailUnitId(){
        return emailUnitId;
    }
    public int getPhoneId(){
        return phoneId;
    }
    public int getPhoneUnitId(){
        return phoneUnitId;
    }
    public String getPhoneNumber(){
        return phoneNumber;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setCustomerIsActive(boolean customerIsActive) {
        this.customerIsActive = customerIsActive;
    }

    public void setEmailId(int emailId) {
        this.emailId = emailId;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

    public void setEmailUnitId(int emailUnitId) {
        this.emailUnitId = emailUnitId;
    }

    public void setPhoneId(int phoneId) {
        this.phoneId = phoneId;
    }

    public void setPhoneUnitId(int phoneUnitId) {
        this.phoneUnitId = phoneUnitId;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }


    public void setCustomerId(int customerId) {
        this.customerId = customerId;

    }

}
package edu.witc.Assignment05.model;


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;


public class CustomerDAO<T> {

    static final String DATABASE_URL = 
            "jdbc:jtds:sqlserver://localhost/A1Kennel;instance=sqlexpress";


   private GenericClass<Customer>myCustomers = new GenericClass<>();

   public CustomerDAO() throws ClassNotFoundException
   {}

   public Collection<T> getData() throws ClassNotFoundException
   {   //Public method that can be called from the controller to get data
       Collection<T> customerList = null;
       customerList = fetchData();
       return customerList;
   }

   @SuppressWarnings("unchecked")
   private Collection<T> fetchData() throws ClassNotFoundException
   {   //With a little tweaking, this method could be used to return any
       //collection from the database
       //ResultSet rs = null;
       String myProc = "{Call FetchCustomer_All()}";
       Customer customer = null;

       Collection<T>allCustomers = new ArrayList<>();
       CallableStatement procCall = null;
       Connection conn = null;

       try 
       {
           Class.forName("net.sourceforge.jtds.jdbc.Driver");
           conn = DriverManager.getConnection(DATABASE_URL,"","");
           procCall = conn.prepareCall(myProc); 
           ResultSet rs = procCall.executeQuery();

           if(rs != null)
           {
               while(rs.next())
               {
                   //build an object
                   customer = new Customer(rs.getInt("customerId"), rs.getString("firstName"), rs.getString("lastName"),
                                           rs.getBoolean("customerIsActive"), rs.getInt("emailId"), rs.getString("emailAddress"), 
                                           rs.getInt("emailUnitId"), rs.getInt("phoneId"), rs.getInt("phoneUnitId"), rs.getString("phoneNumber"));
                   myCustomers.addItem(customer);
               }

               allCustomers = (Collection<T>) myCustomers.getCollection();
           }
       }
       catch(SQLException badSQL)
       {
           System.out.print(badSQL.getMessage());
       }
       finally{
           try
           {
               procCall.close();
               conn.close();
           }
           catch(Exception ex)
           {
               ex.getMessage();
           }
       }
       return allCustomers;
   }

}
public void doGet(HttpServletRequest request, 
        HttpServletResponse response)
        throws ServletException, IOException {
    CustomerService customerService = new CustomerService();
    //assuming this method connects to database using a database connection pool
    //and retrieves the results through JDBC using ResultSet
    List<Customer> customers = customerService.findAllCustomers();
    //store the data in request attribute
    request.setAttribute("customers", customers);       
    //forward to the desired view:
    String url = "/customerManagement.jsp";
    request.getRequestDispatcher(url).forward(request,response);
}