Думаю, стоит подумать об этом ответе BalusC на вопрос «Как избежать использования кода Java в файлах JSP?»
Использование скриплетов (тех,<% %>
вещей) в JSP действительно крайне не рекомендуется с момента рождения taglibs (например, JSTL ) и EL (Expression Language, эти ${}
вещи)более десяти лет назад.
Основные недостатки скриплетов:
- Возможность повторного использования : вы не можете повторно использовать скриптлеты.
- Заменяемость : вы не можете сделать абстрактные скриптлеты.
- OO-способность : вы не можете использовать наследование / композицию.
- Отладка : если скриптлет выбрасывает исключение на полпути, все, что вы получаете, это пустая страница.
- Тестируемость : скриптлеты не тестируются модулем.
- Ремонтопригодность : для сохранения логики смешанного / загроможденного / дублированного кода требуется больше времени.
Вашспецифическая проблема здесь ремонтопригодность .
Что вам следует сделать, это отделить логику вашего приложения, чтобы вы могли иметь высокий уровень возможности повторного использования / тестирования / отладки / обслуживания и т. Д. Давайте начнем с создания класса Java для подключения к базе данных, может быть,что-то вроде этого:
public class DBConnection {
private static String url = null;
private static Connection conn = null;
public static Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
url = "jdbc:mysql://localhost:3306/login";
conn = DriverManager.getConnection(url,"root","your-password");
} catch (Exception e) {
System.out.println(e);
}
return conn;
}
}
Затем вы можете использовать этот класс, когда захотите подключиться к вашей базе данных и сделать что-то из других классов, в приведенных ниже примерах мы создадим объект для обработки данных вашего сотрудника, а затемиспользуйте это для получения информации из вашей базы данных:
public class EmployeeObject {
int id;
String firstname;
String lastname;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
Теперь, когда у нас есть этот класс объектов, допустим, у вас есть другой класс с именем Employees, и в этом классе у вас есть метод, который получает информацию о сотрудниках из employeesloginaccount
table:
public class Employees {
public List<EmployeeObject> getEmployeeInfo(){
//this class will return a list of EmployeeObjects from the database.
ArrayList<EmployeeObject> employees = new ArrayList<EmployeeObject>();
//get connection from our DBConneciton class we created earlier
try(Connection conn= DBConnection.getConnection()){
PreparedStatement pst = conn.prepareStatement("select * from employeesloginaccount;");
ResultSet rs = pst.executeQuery();
while (rs.next()) {
//for each result in database, create an EmployeeObject
EmployeeObject employee = new EmployeeObject();
int id = rs.getInt("id");
employee.setId(id);
String fname = rs.getString("first_name");
employee.setFirstname(fname);
String lname = rs.getString("last_name");
employee.setLastname(lname);
employees.add(employee); // add each EmployeeObject to the arrayList of EmployeeObject's
}
} catch (SQLException e) {
e.printStackTrace();
}
return employees; //return all the results
}
}
Затем вы создаете сервлет, который будет получать эту информацию, давайте упростим его и поместим наш код в метод сервлета doGet, чтобы при каждом посещении URL-адреса этого сервлета мы моглиназову этот код (в этом случае я назвал мой Servlet Test, с URL-адресом маpping / Test:
@WebServlet("/Test")
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
public Test() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Employees e = new Employees(); //instantiate the Employees class
List<EmployeeObject> employees = e.getEmployeeInfo(); //get employee info from database
request.setAttribute("employees", employees); //set this list of employees to the request so we can access it in our jsp
RequestDispatcher rd = request.getRequestDispatcher("example.jsp"); //change to whatever your jsp is that you want to view the information
rd.forward(request, response);
}
}
И, наконец, на нашей странице JSP, где мы можем просмотреть эту информацию:
<!DOCTYPE HTML>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<table style="width:100%;">
<thead>
<tr>
<td>id</td>
<td>Firstname</td>
<td>Lastname</td>
</tr>
</thead>
<tbody>
<!-- for each item in our employees list create a variable called "employee" -->
<c:forEach items="${employees}" var="employee">
<tr>
<td>${employee.id}</td>
<td>${employee.firstname}</td>
<td>${employee.lastname}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
Дайте мне знать, если это поможет вам или у вас есть какие-либо вопросы.:)