4

JSPページcalendar.jspからサーブレットconnect.javaにパラメータを渡しています。Javaクラスでは、データベースからクエリを渡しています。データは正常に取得されますが、結果をJSPページに出力するために必要です。

次のコードを試しましたが、でエラーが発生しましたout.println()

@WebServlet("/calendar")
public class Connect extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
        String fromDate = request.getParameter("fromDate");
        String toDate = request.getParameter("toDate");
        System.out.println("fromDate---->"+fromDate);
        System.out.println("toDate---->"+toDate);
        String query = "SELECT action_time,user_action,user_ip,user_id FROM ksdi.login_detail where (action_time, action_time) OVERLAPS (DATE '"
                    + fromDate+ "',DATE '"+ toDate+ "'+ integer '1')" +
                    " order by action_time desc";

        Connection conn = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            conn = ConnectionUtil.getConnection();
            statement = conn.prepareStatement(query);
            resultSet = statement.executeQuery();

            if (resultSet.next()) {
                while (resultSet.next()) {
                    String action_time=resultSet.getString("action_time");
                    String user_action=resultSet.getString("user_action");
                    String user_ip=resultSet.getString("user_ip");
                    String user_id=resultSet.getString("user_id");
                    System.out.println((action_time) + " " + (user_action) + " "+(user_ip) + " "+(user_id) + " ");

                    response.setContentType("text/html");  
                    PrintWriter out = response.getWriter();  
                    out.println("action time"+((ResultSet) request).getString("action_time")+"<br />");  
                    RequestDispatcher view = request.getRequestDispatcher("calendar.jsp");  
                    view.forward(request,response);         
                }
            } else {
                System.out.println("not found");
            }
        } catch (SQLException e) {
            throw new ServletException("DB interaction failed", e);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
            if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
            if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
        }
    }

}


これが私のJSPファイルです。

<%@ page import="java.sql.*" %>
<%  String path = request.getContextPath();%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

    <script src="<%=path%>/js/calendar.js"></script>
    <link href="<%=path %>/css/calendar.css" rel="stylesheet">
</head>
<body>
<form action="calendar">
            <div class="container">
            From:<input  name="fromDate" type="text" class="calendarSelectDate" />
            To: <input   name="toDate"   type="text" class="calendarSelectDate" />
            <input type="submit" name="b1" value="Go">
        </div>          
<div id="calendarDiv"></div>


</form> 

</body>
</html>
4

3 に答える 3

3

1)サーブレットコードで間違っています。PrintWriterを使用して出力するprintln() RequestDispatcherのforward()メソッドを使用する必要があります。ただし、同じサーブレットのメソッドの両方ではありません

ここからの引用:リクエストディスパッチャとは何ですか?どのように使用しますか?

'include'の場合とは異なり、'forward'は、サーブレットが応答に書き込んだ以前の出力を破棄します。

上記のページの例を参照してください。

forward()また、データベースから以前に取得したデータを渡すためにthenを使用することを選択した場合は、そのデータをリクエストスコープに保存できます。つまり、次のようにリクエスト属性を設定できます。

request.setAttribute("actionTime", action_time);

もちろん、電話する前にforward()それをしなければなりません!

次に、JSPで、次のようにExpressionLangugeを使用してそのデータを出力できます
。test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Test Page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <h1>Testing the passed values</h1>
    <p>Action time: ${actionTime}</p>
    <!-- same way for other data -->
</body>
</html>


2)別の問題として、サーブレットコードに次の行があります。
((ResultSet) request).getString("action_time")

NeaitherServletRequestもHttpServletRequestもメソッドを持っています。ResultSetにはそのようなメソッドがありますが、あなたの場合、ResultSetにリクエストをキャストすることは無意味で間違っています。getString()


PSJSP
でスクリプトレットを使用することはお勧めしません

于 2013-02-17T00:32:41.710 に答える
0

返さHttpServletRequestれたリクエストをにキャストしている可能性があります。キャストせずにのメソッドをResultSet使用する必要があると思います。ResultSetgetString

   PrintWriter out = response.getWriter();  
   out.println("action time"+ resultSet.getString("action_time") + "<br />");  
于 2013-02-16T10:31:15.110 に答える
0

サーブレットでこのようにhttprequestにフェッチする値を適切に設定します

PS:不要な行にコメントしました

   //response.setContentType("text/html");  
     //PrintWriter out = response.getWriter();  
    // out.println("action time"+((ResultSet) request).getString("action_time")+"<br />"); 

        request.setAttribute("action_time",action_time);
        request.setAttribute("user_action",user_action);
        request.setAttribute("user_ip",user_ip);
        request.setAttribute("user_id",user_id);


     RequestDispatcher view = request.getRequestDispatcher("calendar.jsp");  
    view.forward(request,response);  

そして、転送先のcalendar.jspで、次の方法で値にアクセスします。

<%= request.getAttribute("action_time")%>
<%= request.getAttribute("user_action")%>
<%= request.getAttribute("user_ip")%>
<%= request.getAttribute("user_id")%>
于 2013-02-16T17:50:34.627 に答える