Вызвать основной метод в Java-классе из JSP? - PullRequest
1 голос
/ 22 сентября 2011

У меня было требование создать небольшой класс файловой утилиты для запуска из командной строки с рабочего стола Windows.Код был завершен, однако, после рассмотрения того, как его упаковать, для запуска требуется специальная среда из основного приложения.Не спрашивайте, почему, поскольку это займет некоторое время, просто примите это как правильное предположение.

В любом случае, теперь они хотят, чтобы jsp вызывал этот класс, но они все еще хотят, чтобы он был болееотдельной утилиты, хотя она является частью основной кодовой базы.Они также хотят, чтобы он вызывал метод main в утилите, что для меня не похоже на хороший дизайн, но они не хотели менять его на класс сервлета.

Программа просто принимает некоторыеаргументы, а затем это в основном на одну операцию над файлами, а затем он заканчивается.Не совсем сценарий запроса / ответа типа jsp, но я не тот, кто пишет требования.

С точки зрения дизайна, есть ли лучший способ сделать это для простого служебного приложения?

Спасибо,

Джеймс

Ответы [ 3 ]

3 голосов
/ 22 сентября 2011

Если вы действительно не можете изменить дизайн, вы можете просто импортировать класс и вызвать его (это работает, только если он находится в пути к классам веб-приложения).

YourMainClass.main(new String[] {"some", "arguments"});

Или порождайте процесс и выполняйте его (это действительно не рекомендуется, поскольку новый процесс выделил бы другую группу памяти, такую ​​же, как сервер использует в настоящее время!).

Runtime.getRuntime().exec("java -cp /path/to/root com.example.YourMainClass some arguments");

Оба способа могут быть выполнены в скриптлете (гадость) или, предпочтительно, просто в сервлете.

2 голосов
/ 22 сентября 2011

Пусть метод main вызывает метод службы / библиотеки. JSP может вызывать один и тот же метод службы / библиотеки. Нет необходимости явно вызывать main; сделай его чистым с самого начала.

0 голосов
/ 26 мая 2014

T ** это мой JavaMail.java ** Это класс Java, который содержит метод Main ...

Public Class JavaMAil{
String d_email = "abc@gmail.com",//you email address
        d_password = "XXXX", //your email password
        d_host = "smtp.gmail.com",
        d_port = "465",
        m_to = "xyz@gmail.com    ", // Target email address
        m_subject = "Testing",
        m_text = "Hey, this is a test email.";



public JavaMail() {
    Properties props = new Properties();
    props.put("mail.smtp.user", d_email);
    props.put("mail.smtp.host", d_host);
    props.put("mail.smtp.port", d_port);
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.auth", "true");
    //props.put("mail.smtp.debug", "true");
    props.put("mail.smtp.socketFactory.port", d_port);
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");
    try {
        SMTPAuthenticator auth = new SMTPAuthenticator();
        Session session = Session.getInstance(props, auth);     
        MimeMessage msg = new MimeMessage(session);
        msg.setText(m_text);
        msg.setSubject(m_subject);
        msg.setFrom(new InternetAddress(d_email));
        msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));
        Transport.send(msg);
    } catch (Exception mex) {
        mex.printStackTrace();
    }
}

public static void main(String[] args) {
    JavaMail blah = new JavaMail();
}

private class SMTPAuthenticator extends javax.mail.Authenticator {
    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(d_email, d_password);
    }
}

}

**This is my mail.jsp**

And It is jsp it Invokes Main method from the class called JavaMail




<%@ page import="mail.JavaMail" %>
<%
JavaMail obj = new JavaMail();
%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...