2013-04-15 32 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方式取得了诀窍。 –

相关问题