java - 在同一页面上获取、处理和显示结果

标签 java jsp servlets javabeans

我有一个 jsp 页面,其中包含一个表单,用户可以在其中填写一些值。现在,我将这些值传递到一个 servlet 中,该 servlet 会对其进行处理并检索一组相关的数据。现在,我可以检索 servlet 页面中的数据,但无法将其显示在我获取请求的同一 jsp 页面上。


我不想在jsp中使用java代码。我希望仅使用 servlet 执行相同的操作。我不想做这样的事情


<% if(rollno==null)
      // then display the form
   else 
      // process the request on the jsp page itself  
%>

我想在 servlet 文件中处理所有结果,然后通过将数据从 servlet 传递到 jsp 在 jsp 页面上显示结果。我在下面发布我的代码:


<form id="form" method="post" action="searchServlet">
Student Roll No :<br><input type="text" value="" name="rollno"><br><br>
<input type="submit" value="SHOW DETAILS" />
</form>

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
            String rollno=request.getParameter("rollno");
            ResultSet rs=null;

            Class.forName("com.mysql.jdbc.Driver");  
            String url="jdbc:mysql://localhost/schooldatabase";
            Connection con = DriverManager.getConnection(url,"root","passwd");

            Statement st= (Statement) con.createStatement();
            String strquery="SELECT name,regno FROM `schooldatabase`.`student_info` WHERE rollno="+ rollno+ ";";

            if(!con.isClosed()) {
                rs=st.executeQuery(strquery);

                while(rs.next())
                {
                    out.println(rs.getString("name"));
                    out.println(rs.getString("regno"));
                }
            }

            else
            {    // The connection is closed 
            }
          }           

            catch(Exception e)
            {
                out.println(e);
            }

             finally {            
               out.close();
            }
}

最佳答案

您不应该在 servlet 中进行演示。您不应在 servlet 中任何这些行。

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();

// ...
                out.println(rs.getString("name"));
                out.println(rs.getString("regno"));

// ...

            out.println(e);

您应该将数据存储在一个合理的集合中,并将其设置为请求属性,最后将请求/响应转发到 JSP,JSP 进而围绕所有这些数据生成正确的 HTML。像这样的事情:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        List<Student> students = studentDAO.find(request.getParameter("rollno"));
        request.setAttribute("students", students); // Will be available as ${students} in JSP
        request.getRequestDispatcher("/WEB-INF/students.jsp").forward(request, response);
    } catch (SQLException e) {
        throw new ServletException("Cannot obtain students from DB", e);
    }
}

students.jsp

中使用此内容
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
    <c:forEach items="${students}" var="student">
        <tr>
            <td>${student.name}</td>
            <td>${student.regno}</td>
        </tr>
    </c:forEach>
</table>

有关更具体的示例,另请参阅此答案:Show JDBC ResultSet in HTML in JSP page using MVC and DAO pattern

另请参阅:

关于java - 在同一页面上获取、处理和显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177971/

相关文章:

java - 斯坦福解析器 - 多线程问题 - LexicalizedParser

javascript - 如何使用 SpringBoot 和 Angular2 设置结构?

java - CloseHandle((Handle)端口)没有返回

java jsp if语句

java - 如何在应用程序启动时触发 servlet 执行?

tomcat - 当我也有一个 Servlet 时,将 404 映射到一个 URL/

java - 自定义布局 Swing 应用程序

java - iframe 不显示 struts 操作类中的对象

java - 如何将Array集合从flex传递到java servlet

java - Tomcat 会自动维护一个 MySql 连接池吗?