2016-04-27 170 views
0

我很開心JSP和Servlets,如果這個問題很簡單,請耐心等待,請不要關閉這個問題,因爲我已經搜索了這個問題,找不到解決方案。無法從數據庫中檢索數據並使用Servlet在JSP中顯示

我從JSP將數據傳遞到Servlet和數據庫,並從那裏retriving相同,傳遞給JSP顯示

我能夠從JSP傳遞數據並插入數據庫成功,但無法以檢索和插入再次顯示在jsp中。下面是代碼。

的jsp:

<!DOCTYPE HTML><%@page language="java" 
    contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<html> 
<head> 
<title>loginform</title> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
</head> 
<body> 
<form name=loginform action=TestServlet method=post> 


Input ID <input type=text name="id" size=10></input> <br><br> 

<Input type="button" value=Retrive> <br> 
<label for = "getdata" ></label> <br> 

value is <%= request.getSession().getAttribute("data") %> 
<input type=submit value=submit></input> 
</form> 

</body> 
</html> 

的Servlet:

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import java.sql.*; 

/** 
* Servlet implementation class TestServlet 
*/ 
public class TestServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public TestServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 

     } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 

     response.setContentType("text/html"); 

      // Actual logic goes here. 
     try { 

      String getvalue=request.getParameter("id"); 
      PrintWriter out = response.getWriter(); 
      out.println(getvalue); 
      out.println("attempting to read from table"); 

      Class.forName("oracle.jdbc.driver.OracleDriver");    
      // Open a connection 
      Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@IP:Port:ServiceName, UN, Pass); 
          // Execute SQL query 
      Statement stmt = conn.createStatement(); 
      String sqlinsert, sqlselect; 
      sqlinsert = "Insert into abc(abc) values("+getvalue+")"; 
      sqlselect="Select abc from abc"; 

      ResultSet rs = stmt.executeQuery(sqlinsert); 
      ResultSet rs1 = stmt.executeQuery(sqlselect); 
      int id=0 ; 
      // Extract data from result set 
      while(rs1.next()){ 
       //Retrieve by column name 
       id = rs1.getInt("ABC"); 

       //Display values 

       out.println("ID: " + id + "<br>"); 

      } 
      HttpSession session = request.getSession(false); 
      request.setAttribute("data", "0"); 
       request.getRequestDispatcher("/loginform.jsp").forward(request, response); 
      // out.println("</body></html>"); 

      // Clean-up environment 
      rs.close(); 
      stmt.close(); 
      conn.close(); 
      }catch(SQLException se){ 
      //Handle errors for JDBC 
      se.printStackTrace(); 
      }catch(Exception e){ 
      //Handle errors for Class.forName 
      e.printStackTrace(); 
      } 

    } 

} 

真的無法每次我跑我能看到的只有null在JSP

代碼時間去了解問題出在哪裏?

回答

2

只需更改request.getSession().getAttribute("data")request.getAttribute("data"),它會正常工作。

+0

感謝它的工作..你能解釋什麼是語法的確切問題。 – Siva

+0

你已經將數據設置爲你的請求,所以你肯定會從那裏得到它。 :) –

2

在你的Java代碼中你使用request.setAttribute("data", "0");,但是在你的JSP頁面中你使用的是request.getSession().getAttribute("data"),所以你不會得到這些數據。

+0

謝謝..能否請您解釋更多,我應該修改,以獲取數據 – Siva

+0

在你的servlet您在要求範圍內設置'data',但在jsp頁面中,您可以從會話範圍中獲取它。你也應該從請求中獲得。在jsp頁面中,您可以將其更改爲'request.getAttribute(「data」);' – mashuai

1

你實際上是在會話中存儲你的數據,並嘗試從請求範圍中獲取它,所以我認爲你得到了空值。

在jsp中刪除<%= request.getSession().getAttribute("data") %>線和使用該行的回覆<%= request.getAttribute("data") %>

+1

感謝您的回答 – Siva

+1

@Siva我認爲你是與範圍混淆。您正在將數據存儲在會話範圍中,並嘗試從請求範圍中獲取數據。反之亦然。意思是如果你不想改變你的jsp代碼而不是在會話範圍內的servlet存儲數據中,但是在使用數據之後你必須使會話無效或移除該屬性。 – Darshit

相關問題