2016-07-21 20 views
2

我有稱爲下列servlet「PayslipAdmin其中從數據庫中檢索信息,如下所示,但只有當‘PayrollRun’小服務程序運行:如何截斷表格以便稍後輸入新值,但仍顯示以前的值?

public class PayslipAdmin extends HttpServlet { 

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

     HttpSession session = request.getSession(false); 
     String employee_id = ""; 

        if(session != null) { 
         employee_id = (String)session.getAttribute("employeeid"); 
        }  

        Class.forName("com.mysql.jdbc.Driver").newInstance(); 
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/payroll_system", "root", ""); 
        PreparedStatement ps = con.prepareStatement("SELECT run FROM payroll_system.payslip WHERE employeeID = ?); 
        ps.setString(1, employee_id); 
        ResultSet rs = ps.executeQuery(); 
        st = rs.next(); 
        payroll_run = rs.getBoolean("run"); 


       if(payroll_run) {  


        try{ 
        Class.forName("com.mysql.jdbc.Driver").newInstance(); 
         Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/payroll_system", "root", ""); 
         PreparedStatement ps = con.prepareStatement("select FirstName, LastName, Address, Role, BankName,AccNumber,SuperNumber,SuperCompany from payroll_system.employee_info where employeeID = ?"); 
         ps.setString(1, employee_id); 

        }catch(Exception e) 
        { 
         e.printStackTrace(); 
        } 
      } 

}

上述servlet將僅運行,如果了「PayrollRun」小服務程序已被執行,如下圖所示: 公共類PayrollRun延伸的HttpServlet {

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

     try{ 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/payroll_system", "root", ""); 

      PreparedStatement pss = con.prepareStatement("INSERT INTO payroll_system.payslip(run) VALUES("1")"); 
      pss.executeUpdate(); 

      PreparedStatement ps = con.prepareStatement("INSERT INTO payroll_system.payslip(employeeID) SELECT employeeID FROM payroll_system.employee_info"); 
      ps.executeUpdate(); 


      String paydate = new SimpleDateFormat("yyyy.MM.dd").format(new java.util.Date()); 
      PreparedStatement ps0= con.prepareStatement("UPDATE payroll_system.payslip SET paydate=?"); 
      ps0.setString(1, paydate); 
      ps0.executeUpdate(); 

      PreparedStatement ps1 = con.prepareStatement("UPDATE payroll_system.payslip pslip JOIN payroll_system.employee_info info ON pslip.employeeID = info.employeeID SET pslip.role = info.Role "); 
      ps1.executeUpdate(); 






}catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
} 

當工資管理員按下一個html按鈕來運行所述p ayroll,運行「PayrollRun」servlet。當員工按下html按鈕查看他們的薪資單時,將運行「PayslipAdmin」小服務程序。但是,只有在工資管理員運行「PayrollRun」servlet時纔會發生這種情況。

我的問題

每次工資管理員激活「PayrollRun」的servlet,布爾值「運行」將被設置爲true。這將允許員工在「PayslipAdmin」servlet中查看他們的工資單(也在上面顯示,但尚未完成)。當管理員運行「PayrollRun」時,我需要截斷幾個表,以便員工可以輸入由其他servlet管理的新值(與此問題無關)。但是,我還需要確保通過「PayslipAdmin」servlet,員工仍然可以查看他們的薪資單,但如果表格要被截斷,我該如何實現這一目標?

+0

你可以將它們合併成一個servlet嗎? – ck1

+0

@ ck1嗨!不幸的是,這是不可能的,因爲必須首先執行「PayrollRun」servlet,以便「PayslipAdmin」可以向員工顯示薪資單信息。除非你可以建議一種解決方法,這可能是可能的。當工資管理員按下html按鈕來運行工資單時,運行「PayrollRun」servlet。當員工按下html按鈕查看他們的薪資單時,將運行「PayslipAdmin」小服務程序。但是,只有在工資管理員運行「PayrollRun」servlet時纔會發生這種情況。它能夠合併它們並且仍然可以實現嗎? – javaprogrammer

+0

當執行PayrollRun時,您可以使用httpclient創建對另一個servlet的請求。 –

回答

0

首先,您需要通過maven或其他方式下載httpclient的jar包。 here是httpclient.well的快速​​啓動,當PayrollRun做業務,然後使用HttpClient的創建到PayslipAdmin一個新的請求,這意味着添加一些代碼追加到PayrollRun在「嘗試」。樣品代碼:

Request.Get("your servlet url, like http://localhost:8080/...").execute().returnContent(); 

這只是示例代碼,您需要根據您的業務更改代碼。作爲我的擔憂,您不需要returnContent()。

+0

謝謝惡魔。順便說一句,這不是一個真正的系統,只是一個模擬。我可以只輸入servlet名稱而不是url? – javaprogrammer

+0

不,如果你輸入servlet的名字,它不會起作用。實際上,你不需要編寫兩個servlet,因爲它是一個模擬。只需編寫一個普通的類,一個普通的方法。還有,你可以寫一個攔截器,可以在servlet被調用時執行。 –

+0

問題是,每次執行PayrollRun時,我都需要截斷幾個表,然後用新的值更新它們,這些值由其他servlet接收並與此問題無關。 – javaprogrammer

相關問題