Java 从JDBC检索值并使用JSTL标记调用方法

Java 从JDBC检索值并使用JSTL标记调用方法,java,jsp,model-view-controller,jdbc,jstl,Java,Jsp,Model View Controller,Jdbc,Jstl,下面是我为从数据库检索值而编写的代码(我添加了整个代码,以便您更容易理解我在这里要说的内容): 下面是我用来将数据库中的值填充到选择框中的JSP代码 <select name="sltSection"> <% AddRecords added = new AddRecords(); String sectionNm [] = added.populateSelect(); for(int i=0; i<sectionNm.length

下面是我为从数据库检索值而编写的代码(我添加了整个代码,以便您更容易理解我在这里要说的内容):

下面是我用来将数据库中的值填充到选择框中的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>


首先,如果你想用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>

${ipsection}

使用类中的列表作为返回值

 List<String> sectionName = new ArrayList<String>();

while (resultSet.next())
   sectionName.add(resultSet.getString("section_name"));
List sectionName=new ArrayList();
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>

${parameter}
此处参数是用于访问列表变量值的meadiator变量
您还可以使用字符串数组

,因为它看起来是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(基于以下内容的实现):

视图:

  • 您已经有了一个JSP文件。由于您还没有发布名称,我们将其命名为
    hello.jsp
    。我将仅使用以下方法adap您的实际JSP代码:

    
    请选择一个元素:
    ${record}
    

    您已选择${selectedRecord}!
现在,要运行该示例,请使用
http://localhost:8080/YourWebProjectName/RecordServlet
。此外,您还可以在
web.xml
文件中设置:


RecordServlet
然后运行web项目

一些注意事项:

  • 为类/方法使用相关名称,我使用了
    RecordXXX
    ,因为您有这个
    AddRecord
    类(它应该是
    RecordDAO
    或对代码读者更有用的东西,比如
    UserDAO
    YourEntityDAO
  • 通过不同的包分发您的类。每个包应仅包含其范围内的相关类,即对于dao类,
    edu.home.dao
    ,对于服务/业务逻辑类,
    edu.home.service
    ,等等

使用
JPA
与数据库通信。您必须使用执行该代码并将数据保存在会话或请求对象中。然后您可以使用来访问数据(并使用来显示)。我建议你浏览这些链接,它们非常好。你的答案不完整。如果您只是这样做,那么当直接访问JSP时,servlet GET请求根本不会被调用。你的假设是什么?既然OP没有定义他/她是如何实现这个MVC的,你至少应该用普通的servlet来展示这个例子。然后,建议如何通过使用MVC框架(如Struts 2、Spring、JSF、GAE或其他框架)来利用它。@LuiggiMendoza所以你想让我编写整个MVC流?也许你也可以这样做并发布你的框架建议。我不能返回一个字符串数组并在JSTL标记中使用它吗?你可以使用列表或字符串数组中的任何东西。没问题,我不明白,什么是var=“ipsection”,它没有在任何地方声明?在我的场景中,参数应该是什么?我不需要从类
AddRecords
实例化对象来访问其方法
populateSelect()
的返回值吗?让我们非常感谢这个伟大的答案。我也需要配置我的web.xml吗?@frozenhaart回答更新显示你可以在
web.xml
中添加
RecordServlet
作为欢迎文件。你的代码帮助了我很多Luiggi,我也在@frozenhaart找到了一些很棒的教程。我想网上有很多关于类似问题的教程,他们可以提供更多信息,这只是一个基本的开始。不客气:)。
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();
    }
}
@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);
    }
}