下面是我写了从数据库中检索值的代码(我已经添加了整个代码,所以它会更容易让你明白我想在这里说):
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代码。
<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>
上面的代码工作正常,没有任何编译错误。 正如你可以看到我用Java代码在我的.jsp页面去完成任务,这是一种错误的做法。
我需要根据MVC实现这个代码,因此我应该使用JSTL标记来实现代码.JSP? 如果是的话我该怎么做呢? 如何从类实例化对象AddRecords
并调用它的方法呢? 有人可以帮帮我吗。 提前致谢!
因为它看起来你是新来的Java Web编程,可以实现使用JSP(视图),Servlet的(控制器)和实体的DAO和服务层(模型)一个完整的MVC场景。 这是你拥有的一切:
模型:
-
DBConnection
作为数据库访问类(数据访问层) -
AddRecords
为您的DAO类(数据访问层) 无类作为服务类(商业逻辑层)。 在这个例子中,我们有一个RecordService
这个类:
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(); } }
控制器:
无类控制器呢。 由于我假设你使用普通的Java EE,你可以使用一个Servlet(实现了基于Servlet的StackOverflow的维基 ):
@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
。 我只是ADAP您的实际JSP代码使用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
文件:
<welcome-file-list>
<welcome-file>RecordServlet</welcome-file>
</welcome-file-list>
而刚刚运行Web项目。
一些注意事项:
- 使用相关名称的类/方法,我用
RecordXXX
既然你有这样AddRecord
类(它应该是RecordDAO
什么代码读者喜欢更实用UserDAO
或YourEntityDAO
)。 - 通过不同的包分发给你的类。 每一个包应该只包含相关类的范围,即
edu.home.dao
的DAO类, edu.home.service
服务/业务逻辑类,并...
在课堂上使用列表作为返回值,
List<String> sectionName = new ArrayList<String>();
while (resultSet.next())
sectionName.add(resultSet.getString("section_name"));
然后做
<select name='name'>
<c:forEach var="parameter" items="${sectionName }">
<option value="${parameter}">${parameter}</option>
</c:forEach>
</select>
这里的参数是meadiator变量来访问列表变量值可以使用String数组还
首先,如果你正在尝试做的与MVC你应该解耦你的代码。 JSP文件只与没有Java代码在所有的请求访问。
所以,你的控制器需要做这样的事情。
request.setAttribute("ipsections",added.populateSelect());
然后,在你的JSP文件
<select name='anything'>
<c:forEach items="${ipsections}" var="ipsection">
<option value="${ipsection}">${ipsection}</option>
</c:forEach>
</select>