从JDBC检索值并使用JSTL标记来调用方法 [英] Retrieve values from JDBC and use JSTL tags to call the methods
问题描述
下面是我为从数据库中检索值而编写的代码(我添加了整个代码,以便您更容易理解我在这里想说的内容):
Below is the code which i have written to retrieve values from the database (I have added the whole code so it will be easier for you to understand what i am trying to say here):
package ipscheme;
import java.sql.*;
public class AddRecords {
Connection con = new DBConnection().getConnection();
ResultSet resultSet = null;
public String [] populateSelect() throws SQLException {
Statement statement = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
resultSet = statement.executeQuery("SELECT * FROM ipsections");
resultSet.last();
int size = resultSet.getRow();
resultSet.beforeFirst();
String [] sectionName = new String[size];
int j = 0;
while (resultSet.next()){
sectionName[j] = resultSet.getString("section_name");
j = j + 1;
}
resultSet.close();
statement.close();
con.close();
return sectionName;
}
}
在这里是我用来将数据库中的值填充到选择框中的JSP代码。
And down here is the JSP Code which i have used to populate values from the database into a selectbox.
<select name="sltSection">
<%
AddRecords added = new AddRecords();
String sectionNm [] = added.populateSelect();
for(int i=0; i<sectionNm.length; i++){ %>
<option>
<% out.print(sectionNm[i]); %>
</option>
<% } %>
</select>
以上代码工作正常,没有任何编译错误。正如您所看到的,我在.jsp页面中使用了Java代码来完成任务,这是一件错误的事情。
The above code works fine without any compilation errors. As you can see i have used Java code in my .jsp page to fulfill the task, which is a wrong thing to do.
我需要根据MVC实现这段代码,因此我应该使用JSTL标签来实现.jsp的代码?如果是这样我怎么做?如何从类 AddRecords
中实例化Object并调用其方法?有人可以帮帮我吗。在此先感谢!
I need to implement this code according to the MVC and therefore i should use JSTL tags to implement the code to .jsp? if so how do i do that? How do i instantiate Object from the class AddRecords
and call its methods? Can someone please help me. Thanks in advance!
推荐答案
因为看起来您是Java Web Programming的新手,您可以使用JSP实现完整的MVC场景(视图),Servlet(控制器)和实体,DAO和服务层(模型)。这就是你拥有的:
Since it looks you're new to Java Web Programming, you can implement a full MVC scenario using JSP (View), Servlet (Controller) and Entities, DAOs and Service layer (Model). This is what you have:
型号:
-
DBConnection
作为数据库访问类(数据访问层) -
AddRecords
作为您的DAO类(数据)访问层) -
没有类作为服务类(业务逻辑层)。对于这个例子,我们有一个
RecordService
类:
DBConnection
as a database access class (Data access layer)AddRecords
as your DAO class (Data access layer)No class as Service class (Business logic layer). For this example, let's have a
RecordService
class for this:
public class RecordService {
public RecordService() {
}
//since it has no real business logic, it will serve as facade
public String[] getRecords() {
AddRecords addRecords = new AddRecords();
return addRecords.populateSelect();
}
}
控制器:
-
尚未获得Controller类。由于我假设您使用的是纯Java EE,因此您将使用Servlet(基于 Servlets StackOverflow wiki 的实现):
@WebServlet("/RecordServlet")
public class RecordsServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//it will fire on a GET request (like accessing directly to the URL
//from the browser)
//here you should load the data for the View (JSP)
loadData(request);
//forward to show the view
request.getRequestDispatcher("hello.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//it will fire on a POST request (like submitting the form using POST method)
String selectedRecord = request.getParameter("selectedRecord");
System.out.println(selectedRecord);
request.setAttribute("selectedRecord", selectedRecord);
loadData(request);
//forward to show the view
request.getRequestDispatcher("hello.jsp").forward(request, response);
}
//method to load the data available to select
private void loadData(HttpServletRequest request) {
RecordService recordService = new RecordService();
String[] records = recordService.getRecords();
//set the data as attribute on the request to be available on the View
request.setAttribute("records", records);
}
}
查看:
-
您已有JSP文件。由于您尚未发布该名称,我们称之为
hello.jsp
。我将使用 JSTL 调整您的实际JSP代码:
You already have a JSP file. Since you haven't posted the name, let's call it
hello.jsp
. I will just adap your actual JSP code using JSTL:
<!-- at the beginning of the JSP, call the JSTL library -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<form action="RecordServlet" method="POST">
Please select an element:
<select id="selectedRecord" name="selectedRecord">
<c:forEach items="${records}" var="record">
<option value="${record}">${record}</option>
</c:forEach>
</select>
<br />
<input type="submit" value="Show selected record" />
<c:if test="${not empty selectedRecord}">
<br />
You've selected ${selectedRecord}!
</c:if>
</form>
现在,要运行该示例,请构建使用 http:// localhost:8080 / YourWebProjectName / RecordServlet
进行项目和访问。此外,您可以在 web.xml
文件中设置:
Now, to run the example, build the project and access to it using http://localhost:8080/YourWebProjectName/RecordServlet
. Also, you can set in the web.xml
file:
<welcome-file-list>
<welcome-file>RecordServlet</welcome-file>
</welcome-file-list>
只需运行网络项目。
一些注释:
- 使用类/方法的相关名称,我使用
RecordXXX
因为你有这个AddRecord
类(它应该是RecordDAO
或对代码读者更有用的东西,比如UserDAO
或YourEntityDAO
)。 - 通过不同的包分发您的类。每个包应仅包含其范围的相关类,即DAO类的
edu.home.dao
,edu.home.service
用于服务/业务逻辑类,以及......
- Use relevant names for the class/methods, I used
RecordXXX
since you had thisAddRecord
class (it should beRecordDAO
or something more useful to code readers likeUserDAO
orYourEntityDAO
). - Distribute your classes through different packages. Every package should contain only relevant classes to its scope i.e.
edu.home.dao
for DAO classes,edu.home.service
for service/business logic classes, and on...
这篇关于从JDBC检索值并使用JSTL标记来调用方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!