Java 通过servlet从数据库获取信息
当我加载index.jsp时,我希望所有的客户都被加载到页面上。由于某些原因,我无法让客户从数据库中显示。我假设servlet中的某个地方出了问题 下面是索引页和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
包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);
}