2016-07-21 4 views
2

Ich habe folgendes Servlet namens „PayslipAdmin, die Informationen aus einer Datenbank abruft, wie unten gezeigt, aber nur, wenn der‚PayrollRun‘Servlet ausgeführt wird:Wie schneidet man eine Tabelle ab, so dass später neue Werte eingegeben werden können, aber immer noch die vorherigen Werte angezeigt werden?

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(); 
        } 
      } 

}

Die obige Servlet wird nur ausgeführt, wenn die "PayrollRun" Servlet ausgeführt wurde, wie unten dargestellt: public class PayrollRun erweitert 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(); 
} 
} 

Wenn ein Abrechnungs Admin drückt eine hTML-Taste, um die p zu laufen Ayroll, das "PayrollRun" Servlet wird ausgeführt. Wenn ein Mitarbeiter eine HTML-Schaltfläche drückt, um seinen Lohnzettel anzuzeigen, wird das "PayslipAdmin" -Servlet ausgeführt. Dies sollte jedoch nur geschehen, wenn der Payroll-Administrator das "PayrollRun" -Servlet ausgeführt hat.

Meine Frage

Jedesmal, wenn ein Abrechnungs Admin die "PayrollRun" Servlet wird der Booleschen Wert "run" auf true gesetzt werden aktiviert. Dies ermöglicht es den Mitarbeitern, ihre Gehaltsabrechnungen im "PayslipAdmin" -Servlet (das oben ebenfalls gezeigt, aber noch nicht abgeschlossen ist) einzusehen. Wenn der Administrator "PayrollRun" ausführt, muss ich einige Tabellen abschneiden, damit der Mitarbeiter neue Werte eingeben kann, die von anderen Servlets verwaltet werden (unabhängig von dieser Frage). Ich muss aber auch sicherstellen, dass die Mitarbeiter über das "PayslipAdmin" -Servlet ihre Gehaltsabrechnung sehen können, aber wie kann ich dies erreichen, wenn die Tabellen gekürzt werden sollen?

+0

Können Sie diese in einem einzigen Servlet konsolidieren? – ck1

+0

@ ck1 Hallo! Leider ist das nicht möglich, da das "PayrollRun" -Servlet zuerst ausgeführt werden muss, damit "PayslipAdmin" den Mitarbeitern die Lohnzettelinformationen anzeigen kann. Es sei denn, Sie können eine mögliche Abhilfe vorschlagen. Wenn ein Abrechnungsadministrator eine HTML-Schaltfläche drückt, um die Gehaltsabrechnung auszuführen, wird das "PayrollRun" -Servlet ausgeführt. Wenn ein Mitarbeiter eine HTML-Schaltfläche drückt, um seinen Lohnzettel anzuzeigen, wird das "PayslipAdmin" -Servlet ausgeführt. Dies sollte jedoch nur geschehen, wenn der Payroll-Administrator das "PayrollRun" -Servlet ausgeführt hat. Könnte es möglich sein, sie zusammenzuführen und immer noch zu erreichen? – javaprogrammer

+0

Sie können httpclient verwenden, um eine Anforderung an Ihr anderes Servlet zu erstellen, wenn PayrollRun ausgeführt wird. –

Antwort

0

Zuerst müssen Sie die httpclient Gläser per Maven oder etwas anderes herunterladen. here ist die quickstart von httpclient.well, wenn PayrollRun sein Geschäft gemacht hat, dann Httpclient verwenden, um eine neue Anfrage an PayslipAdmin zu schaffen, die einen Code bedeutet, fügen Sie anhängen zu PayrollRun im „versuchen“ .Sample Code:

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

Es ist nur Beispielcode, Sie müssen den Code entsprechend Ihrem Geschäft ändern. Als mein Anliegen brauchen Sie returnContent() hier nicht.

+0

Danke Dämon. Dies ist übrigens kein wirkliches System, nur ein Schein. Kann ich einfach den Servlet-Namen anstelle der URL eingeben? – javaprogrammer

+0

Nein, es würde nicht funktionieren, wenn Sie den Servlet-Namen eingeben. Eigentlich müssen Sie nicht zwei Servlet schreiben, weil es ein Mock ist. Schreiben Sie einfach eine normale Klasse, eine normale Methode.Was ist mehr, können Sie einfach schreiben Interceptor, der ausgeführt werden kann, als das Servlet aufgerufen wurde. –

+0

Das Problem ist, jedes Mal, wenn PayrollRun ausgeführt wird, muss ich einige Tabellen abschneiden und sie dann mit neuen Werten aktualisieren, die von anderen Servlets empfangen werden und für diese Frage irrelevant sind. – javaprogrammer