2013-04-15 53 views
1

我現在用的石英調度安排工作。而且我可以按照通常的方式安排工作,沒有任何問題。通過一個Web應用程序使用用戶輸入

代碼

public class QuartzTest implements Job { 

    public void execute(JobExecutionContext context) 
      throws JobExecutionException { 
       System.out.println("Hello Quartz on " + new Date()); 
      } 

    public static Scheduler scheduler; 

    public void scheduleLoad(String time, int jobNo) { 
     try { 
      // Transform user input into a date 
      SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy:HH:mm:ss"); 
      Date scheduleDate = dateFormat.parse(time); 

      // Grab the Scheduler instance from the Factory 
      //Scheduler 
      scheduler = StdSchedulerFactory.getDefaultScheduler(); 

      // Listener 
      //scheduler.getListenerManager().addJobListener(new SimpleJobListener()); 

      // and start it if it is shut down 
      if(!scheduler.isStarted()) 
       scheduler.start(); 

      // Define a job and tie it to a class 
      JobDetail job = newJob(QuartzTest.class) 
        .withIdentity("job"+jobNo) 
        .build(); 

      // Define trigger 
      SimpleTrigger trigger = (SimpleTrigger) newTrigger() 
        .startAt(scheduleDate) 
        .forJob("job"+jobNo) 
        .build(); 

      // Schedule job using trigger 
      scheduler.scheduleJob(job, trigger); 

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

    public static void main(String[] args) throws SchedulerException { 
     String runTime = "04/15/2013:17:37:10"; 
     QuartzTest quartz = new QuartzTest(); 
     quartz.scheduleLoad(runTime,1); 
     String runTime2 = "04/15/2013:17:37:15"; 
     quartz.scheduleLoad(runTime2,2); 
     String runTime3 = "04/15/2013:17:37:20"; 
     quartz.scheduleLoad(runTime3,3); 
    } 
} 

但我要創建一個Web應用程序,在我所安排使用「用戶輸入」的工作。這是我陷入困境的地方。我該怎麼做呢 ?我將使用JSP。

EG-用戶1的命令 - /home/user/load.sh -a -b -c(週一時間表) 用戶2的命令 - /home/user/load.sh -a -b -g(週二時間表)

我可以從網頁作爲字符串取得用戶的命令,計劃日期等,再後來Quartz調度裏面解析這個字符串。但是,如何將這個字符串首先傳遞給Quartz來安排用戶的工作?

只是爲了讓自己清楚 - 我希望用戶能夠定義自己的工作和時間表。

感謝

+0

'JSP!= webapp'。看看['servlets'](http://stackoverflow.com/tags/servlets/info)。 –

+0

不要把'jsp'腳本編譯成一個'servlet'? –

+0

當然,但不要那樣做。這是不好的做法。 –

回答

0

你需要擴展了在應用程序的web.xml文件註冊HttpServlet類。再次,看一看的wiki,如何做到這一點

@WebServlet("/jobs") // only with Servlet 3.0 
public class SchedulerServlet extends HttpServlet { 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // get input parameter 
     String time = request.getParameter("time"); 
     // validate that it is not null/empty and is valid time (custom method) 
     if (time != null && !time.isEmpty() && isValidTime(time)) { 
      int jobNo = ... // generate job no 
      YourJobScheduler scheduler = ... // get scheduler 
      JobDetails jobDetails = scheduler.scheduleLoad(time, jobNo); // maybe this return details of the scheduled job 

      request.setAttribute("jobDetails", jobDetails);    
      // do something with response 
      request.getRequestDispatcher("/WEB-INF/ShowJobDetails.jsp").forward(request, response); 
     } 

     // missing input parameter, so send error 
    } 
} 

這個類將輸入參數time,驗證它,然後把它傳遞給你的調度,這基本上是你有方法的問題,但可能會返回一個包含您剛安排的工作細節的對象。如果您將該對象添加到您的請求屬性中,則可以在視圖中顯示它(作爲jsp)。

+0

謝謝,servlet方式取得了訣竅。 –

相關問題