#java #html #image #security #applet
#java #HTML #изображение #Безопасность #апплет
Вопрос:
Я смог встроить свой java-апплет на веб-сайт, используя следующий HTML-код.
<applet name = "Project" code = "Project.class" archive="Project.jar"
codebase="https://project.googlecode.com/svn/trunk/" width=800 height = 800>
</applet>
Я сохранил свой код в базе данных Google code и использовал TortoiseSVN для размещения моего jar-файла и других файлов в этой базе данных, включая мои файлы изображений.
Однако мои файлы изображений не отображаются. Я уже подписал свой jar и все другие файлы классов, но я не подписывал свои изображения. Я не думал, что мне это нужно. Когда я открываю веб-сайт, все остальные компоненты моей программы работают, за исключением изображений. Ни одно из изображений не отображается.
В моем appletviewer изображения действительно отображаются, и я использую следующий код для получения и отображения изображения.
class SwingPanel extends JPanel{
Image bg;
SwingPanel(){
bg = Toolkit.getDefaultToolkit().getImage("spacebg.jpg");
}
}
//In another class
public void paintComponent(Graphics g){//PaintComponent
super.paintComponent(g);//Super
g.drawImage(bg,0,0,800,800,this);
}
У меня есть и другое изображение, которое использует аналогичную структуру, как показано выше.
Как я могу заставить изображения отображаться на веб-сайте?
Комментарии:
1. Зачем кодировать апплет? Если это связано со спецификацией. by teacher, пожалуйста, обратитесь к ним, почему преподаватели CS должны прекратить преподавать Java-апплеты .
2. Исходная программа была JFrame, и у меня есть копия этого файла. Однако после самостоятельного исследования я обнаружил, что было бы проще использовать формат апплета, потому что я могу напрямую использовать HTML-код, на который я ссылался выше, и размещать его на веб-сайте оттуда. Я посмотрел на ссылку, и она показалась мне интересной. К вашему сведению, это расширение из проекта класса, и на нашем занятии мы узнали о JApplets, чтобы получить базовую основу и получить доступ к HTML. А затем после этого нырнул в JFrame. На мой взгляд, этот метод намного эффективнее, потому что он получает экспозицию, а также альтернативные методы.
Ответ №1:
Если изображения находятся внутри вашего файла .jar, вы можете получить к ним доступ, используя getResource
метод Class или ClassLoader:
bg = Toolkit.getDefaultToolkit().getImage(
SwingPanel.class.getResource("spacebg.jpg"));
Приведенный выше код ищет spacebg.jpg в том же пакете, который содержит класс SwingPanel.
Если вы развертываете изображение за пределами вашего файла .jar и размещаете его в том же каталоге, что и файл .jar на веб-сервере, вы можете создать URL-адрес относительно местоположения апплета:
bg = Toolkit.getDefaultToolkit().getImage(
new URL(applet.getCodeBase(), "spacebg.jpg"));
Ответ №2:
Вы должны указать полный веб-адрес в строке расположения ресурса.
Вместо этого:
bg = Toolkit.getDefaultToolkit().getImage("spacebg.jpg");
Вы должны использовать:
bg = Toolkit.getDefaultToolkit().getImage("http://location-of-image/spacebg.jpg");
Или, если он находится в jar-файле:
Вы должны использовать:
bg = Toolkit.getDefaultToolkit().getImage(getClass().getResource("package-of-class/spacebg.jpg").getFile());
Комментарии:
1. Ваше использование
getResource
правильно, но в документации для Toolkit.getImage(String) четко указано, что строковый аргумент — это имя файла, а не URL. Ваш пример не будет работать.2. пожалуйста, удалите -1, вы можете использовать URL.GetFile()
3. URL.GetFile() не возвращает имя файла. Он возвращает часть пути URL-адреса, которая может содержать экранированные октеты и, следовательно, не гарантируется соответствие существующему пути к файлу. Метод называется GetFile(), потому что класс URL очень старый, фактически является частью Java 1.0, и тогда URL-адреса часто ссылались на физические файлы (например, в ftp: URLs). Сравните
new URL("file:/C:/Program Files/Microsoft")
сnew File("C:\Program Files\Microsoft")
.4. В этом случае, когда апплет находится в jar-файле, и тот же jar-файл содержит изображение, URL.GetFile() делает трюк. Я пробовал это сам, и это работает как шарм.
5. Это сработает в нескольких случаях и не сработает во многих других случаях. Это ненадежно. Кроме того, в вопросе упоминается открытие апплета на веб-сайте, поэтому поиск файлов на клиентском компьютере может работать при тестировании, но, безусловно, не сработает при развертывании.