2

ユーザーが何らかの値を入力するフォームを含む jsp ページがあります。次に、これらの値をサーブレットに渡します。サーブレットはそれを処理し、関連するデータ セットを取得します。これで、サーブレット ページでデータを取得できますが、リクエストをフェッチしたのと同じ JSP ページに表示できません。


jsp 内で Java コードを使用したくありません。サーブレットのみを使用して同じことをしたいと思います。私はこのようなことをしたくありません


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

サーブレット ファイルですべての結果を処理し、サーブレットから 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();
            }
}
4

1 に答える 1

4

サーブレットでプレゼンテーションを行うべきではありません。これらの行をサーブレットに含めないください。

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 に転送して、それらすべてのデータに対して適切な 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>

より具体的な例については、次の回答も参照してください: MVC および DAO パターンを使用して JSP ページの HTML で JDBC ResultSet を表示する

以下も参照してください。

于 2012-06-24T13:57:47.383 に答える