Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从servlet到JSP的输出_Java_Jsp_Servlets - Fatal编程技术网

Java 从servlet到JSP的输出

Java 从servlet到JSP的输出,java,jsp,servlets,Java,Jsp,Servlets,我正在将参数从JSP页面calendar.JSP传递到servlet connect.java。 在Java类中,我从数据库传递一个查询。它可以很好地检索数据,但我需要它将结果打印回JSP页面 我尝试了以下代码,但在out.println()处出错 @WebServlet(“/calendar”) 公共类Connect扩展了HttpServlet{ @凌驾 受保护的无效服务(HttpServletRequest请求、HttpServletResponse响应) 抛出ServletExceptio

我正在将参数从JSP页面calendar.JSP传递到servlet connect.java。 在Java类中,我从数据库传递一个查询。它可以很好地检索数据,但我需要它将结果打印回JSP页面

我尝试了以下代码,但在
out.println()
处出错

@WebServlet(“/calendar”)
公共类Connect扩展了HttpServlet{
@凌驾
受保护的无效服务(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
字符串fromDate=request.getParameter(“fromDate”);
字符串toDate=request.getParameter(“toDate”);
System.out.println(“fromDate-->”+fromDate);
System.out.println(“toDate-->”+toDate);
String query=“从ksdi.login\u详细信息中选择操作时间、用户操作、用户ip、用户id,其中(操作时间、操作时间)重叠(日期)”
+fromDate+“',DATE'+toDate+“'+整数'1')”+
“按操作顺序\u时间描述”;
连接conn=null;
PreparedStatement=null;
ResultSet ResultSet=null;
试一试{
conn=ConnectionUtil.getConnection();
语句=conn.preparest陈述(查询);
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((操作\时间)+++(用户\操作)+++(用户\ ip)+++(用户\ id)+”);
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
out.println(“操作时间”+((结果集)请求).getString(“操作时间”)+“
”; RequestDispatcher视图=request.getRequestDispatcher(“calendar.jsp”); 视图。转发(请求、响应); } }否则{ System.out.println(“未找到”); } }捕获(SQLE异常){ 抛出新的ServletException(“DB交互失败”,e); }捕获(例外e){ e、 printStackTrace(); }最后{ 如果(resultSet!=null),请尝试{resultSet.close();}catch(SQLException ignore){} 如果(statement!=null),请尝试{statement.close();}catch(SQLException ignore){} 如果(conn!=null),请尝试{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>

发件人:
致:

CAN正在将返回的
HttpServletRequest
请求转换为
ResultSet
,我认为它应该使用
ResultSet
getString
方法而不进行转换

   PrintWriter out = response.getWriter();  
   out.println("action time"+ resultSet.getString("action_time") + "<br />");  
PrintWriter out=response.getWriter();
out.println(“操作时间”+结果集.getString(“操作时间”)+“
”;
很好地在servlet中这样设置获取到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);  
//response.setContentType(“text/html”);
//PrintWriter out=response.getWriter();
//out.println(“操作时间”+((结果集)请求).getString(“操作时间”)+“
”; setAttribute(“动作时间”,动作时间); setAttribute(“用户操作”,用户操作); setAttribute(“用户ip”,用户ip); setAttribute(“用户标识”,用户标识); RequestDispatcher视图=request.getRequestDispatcher(“calendar.jsp”); 视图。转发(请求、响应);
在转发到的calendar.jsp中,通过

<%= request.getAttribute("action_time")%>
<%= request.getAttribute("user_action")%>
<%= request.getAttribute("user_ip")%>
<%= request.getAttribute("user_id")%>

1)在servlet代码中,您做错了。您应该使用PrintWriter的
println()
输出,或者使用RequestDispatcher的
forward()
方法。但是不是在同一个servlet的方法中同时使用这两种方法

引述如下:

与“include”不同,“forward”丢弃 Servlet写入响应的上一个输出

参见上述页面中的示例

如果您选择使用
forward()

request.setAttribute("actionTime", action_time);
当然,您必须在调用
forward()
之前执行

然后在JSP中,您可以使用以下命令输出数据:
test.jsp


测试页
测试通过的值
操作时间:${actionTime}


2) 另一个问题是,在servlet代码中有一行代码是这样的:
((结果集)请求).getString(“操作时间”)

Neaither也没有方法
getString()
。虽然ResultSet有这样的方法,但在您的情况下,将请求强制转换到ResultSet是毫无意义和错误的


附加说明

发布您的异常堆栈。什么?您是否正在尝试在转发到JSP后设置请求属性?这是错误的。请纠正你的回答我就是这么想的。没问题)RequestDispatcher只将一个结果传递给jsp,但我有多个从数据库//@IshanKaushik获取的结果,RequestDispatcher转发的是请求,而不是结果。在请求中,您可以设置任意多个属性。此外,您还可以使用DTO模式将所有结果放在一些JavaBean中(阅读这里:)。也请阅读我在回答中提供链接的文章。再加上阅读一些教程,比如,和。
request.setAttribute("actionTime", action_time);
<%@ 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>