将java应用程序转换为jsp / servlet

时间:2014-03-19 03:29:44

标签: java jsp servlets

我有一个接受分段上传的java应用程序,我的问题是我希望有一个HTML / JSP前端而不是它只是在服务器上工作。根据我提供的代码,实现这一目标的最佳方法是什么。这对我来说有点混乱,因为我不确定如何将文件上传部分带入html / jsp页面。任何建议都会有所帮助。

非常感谢, 音

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.ProgressEvent;
import com.amazonaws.services.s3.model.ProgressListener;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.Upload;

public class S3TransferProgressSample {

private static AWSCredentials credentials;
private static TransferManager tx;
private static String bucketName;

private JProgressBar pb;
private JFrame frame;
private Upload upload;
private JButton button;

public static void main(String[] args) throws Exception {

    AmazonS3 s3 = new AmazonS3Client(credentials = new ClasspathPropertiesFileCredentialsProvider().getCredentials());
    Region usWest2 = Region.getRegion(Regions.US_WEST_2);
    s3.setRegion(usWest2);
    tx = new TransferManager(s3);

    bucketName = "s3-upload-sdk-sample-" + credentials.getAWSAccessKeyId().toLowerCase();

    new S3TransferProgressSample();
}

public S3TransferProgressSample() throws Exception {
    frame = new JFrame("Amazon S3 File Upload");
    button = new JButton("Choose File...");
    button.addActionListener(new ButtonListener());

    pb = new JProgressBar(0, 100);
    pb.setStringPainted(true);

    frame.setContentPane(createContentPane());
    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

class ButtonListener implements ActionListener {
    public void actionPerformed(ActionEvent ae) {
        JFileChooser fileChooser = new JFileChooser();
        int showOpenDialog = fileChooser.showOpenDialog(frame);
        if (showOpenDialog != JFileChooser.APPROVE_OPTION) return;

        createAmazonS3Bucket();

        ProgressListener progressListener = new ProgressListener() {
            public void progressChanged(ProgressEvent progressEvent) {
                if (upload == null) return;

                pb.setValue((int)upload.getProgress().getPercentTransfered());

                switch (progressEvent.getEventCode()) {
                case ProgressEvent.COMPLETED_EVENT_CODE:
                    pb.setValue(100);
                    break;
                case ProgressEvent.FAILED_EVENT_CODE:
                    try {
                        AmazonClientException e = upload.waitForException();
                        JOptionPane.showMessageDialog(frame,
                                "Unable to upload file to Amazon S3: " + e.getMessage(),
                                "Error Uploading File", JOptionPane.ERROR_MESSAGE);
                    } catch (InterruptedException e) {}
                    break;
                }
            }
        };

        File fileToUpload = fileChooser.getSelectedFile();
        PutObjectRequest request = new PutObjectRequest(
                bucketName, fileToUpload.getName(), fileToUpload)
            .withProgressListener(progressListener);
        upload = tx.upload(request);
    }
}

private void createAmazonS3Bucket() {
    try {
        if (tx.getAmazonS3Client().doesBucketExist(bucketName) == false) {
            tx.getAmazonS3Client().createBucket(bucketName);
        }
    } catch (AmazonClientException ace) {
        JOptionPane.showMessageDialog(frame, "Unable to create a new Amazon S3 bucket: " + ace.getMessage(),
                "Error Creating Bucket", JOptionPane.ERROR_MESSAGE);
    }
}

private JPanel createContentPane() {
    JPanel panel = new JPanel();
    panel.add(button);
    panel.add(pb);

    JPanel borderPanel = new JPanel();
    borderPanel.setLayout(new BorderLayout());
    borderPanel.add(panel, BorderLayout.NORTH);
    borderPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
    return borderPanel;
    }
}

4 个答案:

答案 0 :(得分:3)

将java应用程序转换为jsp / servlet

取决于它是什么类型的程序,它可以像在其中使用具有main()方法的类一样容易,使其成为HttpServlet的子类并且采取所有'在main()方法中的s并将其放在servlet的doGet() method中。然后,您将所有System.out.println()语句替换为语句,以HTML格式打印输出。如果它只是一个没有GUI (Graphical User Interface)的命令行程序,那么这将有效。

如果您的程序没有GUI,那么您可以在这里停止阅读。如果它确实有GUI,那么它可能会复杂得多。根据它的程序类型,您可以执行以下操作之一:

1。将整个内容放在Applet中。

This is pretty simple. Instead of replacing a few lines to turn the program into a Servlet, you'd be replacing a few lines to turn it into an Applet. This you could do if you don't need the server to communicate with, like if you had a solitare game. Otherwise, you could do #2.

2。将GUI放在Applet中并将后端保留在服务器上。

This is what you'd call a "client/server" application.

第3。创建基于JSP / Servlet的网站。

The most complicated option, but if you don't want to use Applets this is the only way to go.Here you're changing from a Java based GUI to an HTML/CSS based GUI. You might also need some JavaScript. If you're not familiar with all this stuff, but you're comfortable making Java GUI's using things like Swing, you might want to check out GWT (Google Web Toolkit). This allows you to make rich websites using plain Java. The Java code "compiles" into HTML and Javascript.

另一个:

在第一次调用JSP时,它在运行时完成。一些Web服务器还附带一个JSP编译器,允许在构建时执行此操作,这有两个优点:

  1. 它允许在构建时检测JSP语法错误,而不是 运行

  2. 它避免了第一次调用时间的惩罚(需要一些时间 将JSP编译为Java,然后将Java编译为字节码。

答案 1 :(得分:2)

将Java代码放入JSP中这种做法已经失去了10年的声誉。在moderne JSP中,使用JSTL和EL代替糟糕的Java代码。

您可能会发现此article有助于学习如何构建现代Web应用程序。

答案 2 :(得分:0)

您可以使用JSP提供用户界面(即浏览和上传文件)。您可以使用HTML的多部分表单和文件标记。有关here的更多信息。

此外,您可以使用Servlet将控件委派给处理该文件的相应业务类。

这样,您就可以清楚地区分模型,视图和控制器。

答案 3 :(得分:0)

你在这里使用swing来进行GUI。您可以使用JSP进行视图或GUI,而不是使用swing,您可以使用它来捕获用户输入并在JSP上填充数据。而对于处理业务逻辑,您可以使用servlet。

希望它会对你有所帮助。