gpt4 book ai didi

java - 将从数据库检索的数据从servlet显示到jsp文件

转载 作者:行者123 更新时间:2023-11-30 06:10:05 27 4
gpt4 key购买 nike

当用户单击个人资料链接时,我尝试显示用户个人资料详细信息。我正在使用 eclipse 。同样采用mvc架构。没有发生错误,但数据没有显示在 jsp 文件中。

CustomerProfileController servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String name = request.getParameter("name");
CustomerViewQuery cvq = new CustomerViewQuery(name);

try {
List<Customer> customers = cvq.list();
request.setAttribute("customers", customers); // Will be available as ${products} in JSP
request.getRequestDispatcher("CustomerProfile.jsp").forward(request, response);
} catch (SQLException e) {
throw new ServletException("Cannot obtain vehicles from DB", e);
}
}

CustomerView查询文件

package dbhelpers;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import models.Customer;


public class CustomerViewQuery {
DBConnection databaseCon = new DBConnection();
String uName;
public CustomerViewQuery(String name) {
this.uName = name;
}

public List<Customer> list() throws SQLException {
List<Customer> customers = new ArrayList<Customer>();
try (
Connection con = databaseCon.dbconnect();
PreparedStatement pst = con.prepareStatement("SELECT * FROM customers WHERE username='\"+uName+\"'");
ResultSet resultSet = pst.executeQuery();
) {
while (resultSet.next()) {
Customer customer = new Customer();
customer.setId(resultSet.getInt("id"));
customer.setName(resultSet.getString("name"));
customer.setEmail(resultSet.getString("email"));
customer.setAddress(resultSet.getString("address"));
customer.setSex(resultSet.getString("sex"));
customer.setBday(resultSet.getString("bday"));
customer.setTelephone(resultSet.getString("telephone"));
customer.setUsername(resultSet.getString("username"));
customer.setPassword(resultSet.getString("password"));
customers.add(customer);
}
}catch(SQLException e) {
e.printStackTrace();
}

return customers;
}

}

Getter 和 Setter 位于 Customer.java 文件中

我没有收到任何错误,但 CustomerProfile.jsp 文件中也没有显示任何内容。这是代码

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:forEach items="${customers}" var="customer">

</c:forEach>

<div class="container mt-5"><br>
<form role="form" action="CustomerController" data-toggle="validator" method="post" id="registerForm">
<div class="form-group row">
<label for="name" class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input type="text" name="name" value="${customer.name}" placeholder="Name">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" name="email" value="${customer.email}" placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Address</label>
<div class="col-sm-10">
<input type="text" name="address" value="${customer.address}" placeholder="Address">
</div>
</div>
<div class="form-group row">
<label for="sex" class="col-sm-2 col-form-label">Sex</label>
<div class="col-sm-10">
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1">Male</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline2" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline2">Female</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="birthdate" class="col-sm-2 col-form-label">Birthdate</label>
<div class="col-sm-10">
<input type="date" name="bday" value="${customer.bday}" placeholder="Birthdate" required>
</div>
</div>
<div class="form-group row">
<label for="telephone" class="col-sm-2 col-form-label">Telephone</label>
<div class="col-sm-10">
<input type="text" name="tele" value="${customer.telephone}" placeholder="Telephone">
</div>
</div>
<div class="form-group row">
<label for="username" class="col-sm-2 col-form-label">Username</label>
<div class="col-sm-10">
<input type="text" name="username" value="${customer.username}" placeholder="Username">
</div>
</div>
<div class="form-group row">
<label for="passowrd" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" name="password" value="${customer.password}" id="inputPassword" placeholder="Password" data-minlength="6">
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
</div>
<button type="submit" class="btn btn-primary btn-block btn-large">Sign me up.</button>
</form><br>
</div>

最佳答案

在这里我用你的代码改变了一些东西。现在应该可以了。让我知道。

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

String name = request.getParameter("name");

CustomerViewQuery cvq = new CustomerViewQuery();

 try {

List<Customer> customers = cvq.list(name);
request.setAttribute("customers", customers);
request.getRequestDispatcher("CustomerProfile.jsp").forward(request, response);

} catch (SQLException e) {
throw new ServletException("Cannot obtain vehicles from DB", e);
}
}

这里也有一些变化:

public class CustomerViewQuery {

public List<Customer> list(String name) throws SQLException {

List<Customer> customers = new ArrayList<Customer>();
//get connection like this
try(Connection con = DBConnection.dbconnect()) {

PreparedStatement pst = con.prepareStatement("SELECT * FROM customers WHERE username=?;");
pst.setString(1, name); //set name like this (The '1' means first occurance of a question mark '?')
ResultSet resultSet = pst.executeQuery();

while (resultSet.next()) {
Customer customer = new Customer();
customer.setId(resultSet.getInt("id"));
customer.setName(resultSet.getString("name"));
customer.setEmail(resultSet.getString("email"));
customer.setAddress(resultSet.getString("address"));
customer.setSex(resultSet.getString("sex"));
customer.setBday(resultSet.getString("bday"));
customer.setTelephone(resultSet.getString("telephone"));
customer.setUsername(resultSet.getString("username"));
customer.setPassword(resultSet.getString("password"));
customers.add(customer);
}
}catch(SQLException e) {
e.printStackTrace();
}

return customers;
}

}

您的 forEach JSTL 标记没有迭代任何内容...

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<c:forEach items="${customers}" var="customer">

<div class="container mt-5"><br>
<form role="form" action="CustomerController" data-toggle="validator" method="post" id="registerForm">
<div class="form-group row">
<label for="name" class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input type="text" name="name" value="${customer.name}" placeholder="Name">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" name="email" value="${customer.email}" placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Address</label>
<div class="col-sm-10">
<input type="text" name="address" value="${customer.address}" placeholder="Address">
</div>
</div>
<div class="form-group row">
<label for="sex" class="col-sm-2 col-form-label">Sex</label>
<div class="col-sm-10">
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1">Male</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline2" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline2">Female</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="birthdate" class="col-sm-2 col-form-label">Birthdate</label>
<div class="col-sm-10">
<input type="date" name="bday" value="${customer.bday}" placeholder="Birthdate" required>
</div>
</div>
<div class="form-group row">
<label for="telephone" class="col-sm-2 col-form-label">Telephone</label>
<div class="col-sm-10">
<input type="text" name="tele" value="${customer.telephone}" placeholder="Telephone">
</div>
</div>
<div class="form-group row">
<label for="username" class="col-sm-2 col-form-label">Username</label>
<div class="col-sm-10">
<input type="text" name="username" value="${customer.username}" placeholder="Username">
</div>
</div>
<div class="form-group row">
<label for="passowrd" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" name="password" value="${customer.password}" id="inputPassword" placeholder="Password" data-minlength="6">
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
</div>
<button type="submit" class="btn btn-primary btn-block btn-large">Sign me up.</button>
</form><br>
</div>

</c:forEach>

编辑:以下是无需循环即可实现的方法:

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

String name = request.getParameter("name");
CustomerViewQuery cvq = new CustomerViewQuery();

try {
//not list required this time, created a new method called 'getCustomer'
Customer customer = cvq.getCustomer(name);
request.setAttribute("customer", customer);
request.getRequestDispatcher("CustomerProfile.jsp").forward(request, response);

} catch (SQLException e) {
throw new ServletException("Cannot obtain vehicles from DB", e);
}
}

CustomerViewQuery 类中名为“getCustomer”的新方法

public class CustomerViewQuery {


public Customer getCustomer(String name) throws SQLException {

Customer customer = new Customer();

try(Connection con = DBConnection.dbconnect()) {

PreparedStatement pst = con.prepareStatement("SELECT * FROM customers WHERE username=?;");
pst.setString(1, name); //set name like this (The '1' means first occurance of a question mark '?')
ResultSet resultSet = pst.executeQuery();

while (resultSet.next()) {

customer.setId(resultSet.getInt("id"));
customer.setName(resultSet.getString("name"));
customer.setEmail(resultSet.getString("email"));
customer.setAddress(resultSet.getString("address"));
customer.setSex(resultSet.getString("sex"));
customer.setBday(resultSet.getString("bday"));
customer.setTelephone(resultSet.getString("telephone"));
customer.setUsername(resultSet.getString("username"));
customer.setPassword(resultSet.getString("password"));

}
}catch(SQLException e) {
e.printStackTrace();
}

return customer;
}

}

除了删除了 JSTL forEach 标记(因为不再需要它)之外,此处没有任何更改。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<div class="container mt-5"><br>
<form role="form" action="CustomerController" data-toggle="validator" method="post" id="registerForm">
<div class="form-group row">
<label for="name" class="col-sm-2 col-form-label">Name</label>
<div class="col-sm-10">
<input type="text" name="name" value="${customer.name}" placeholder="Name">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" name="email" value="${customer.email}" placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Address</label>
<div class="col-sm-10">
<input type="text" name="address" value="${customer.address}" placeholder="Address">
</div>
</div>
<div class="form-group row">
<label for="sex" class="col-sm-2 col-form-label">Sex</label>
<div class="col-sm-10">
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1">Male</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input name="sex" type="radio" value="${customer.sex}" id="customRadioInline2" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline2">Female</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="birthdate" class="col-sm-2 col-form-label">Birthdate</label>
<div class="col-sm-10">
<input type="date" name="bday" value="${customer.bday}" placeholder="Birthdate" required>
</div>
</div>
<div class="form-group row">
<label for="telephone" class="col-sm-2 col-form-label">Telephone</label>
<div class="col-sm-10">
<input type="text" name="tele" value="${customer.telephone}" placeholder="Telephone">
</div>
</div>
<div class="form-group row">
<label for="username" class="col-sm-2 col-form-label">Username</label>
<div class="col-sm-10">
<input type="text" name="username" value="${customer.username}" placeholder="Username">
</div>
</div>
<div class="form-group row">
<label for="passowrd" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" name="password" value="${customer.password}" id="inputPassword" placeholder="Password" data-minlength="6">
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
</div>
<button type="submit" class="btn btn-primary btn-block btn-large">Sign me up.</button>
</form><br>
</div>

关于java - 将从数据库检索的数据从servlet显示到jsp文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com