从JDBC检索值,并使用JSTL标记调用的方法(Retrieve values from JDBC

2019-07-20 18:58发布

下面是我写了从数据库中检索值的代码(我已经添加了整个代码,所以它会更容易让你明白我想在这里说):

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并调用它的方法呢? 有人可以帮帮我吗。 提前致谢!

Answer 1:

因为它看起来你是新来的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什么代码读者喜欢更实用UserDAOYourEntityDAO )。
  • 通过不同的包分发给你的类。 每一个包应该只包含相关类的范围,即edu.home.dao的DAO类, edu.home.service服务/业务逻辑类,并...


Answer 2:

在课堂上使用列表作为返回值,

 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数组还



Answer 3:

首先,如果你正在尝试做的与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>


文章来源: Retrieve values from JDBC and use JSTL tags to call the methods