Struts 2 - Dosya Yüklemeleri
Struts 2 çerçevesi, "HTML'de Form Tabanlı Dosya Yüklemesi" kullanılarak dosya yüklemesinin işlenmesi için yerleşik destek sağlar. Bir dosya karşıya yüklendiğinde, genellikle geçici bir dizinde depolanır ve verilerin kaybolmamasını sağlamak için Action sınıfınız tarafından işlenmeli veya kalıcı bir dizine taşınmalıdır.
Note - Sunucular, geçici dizin ve web uygulamanıza ait olan dizinler dışındaki dizinlere yazmanızı yasaklayan bir güvenlik politikasına sahip olabilir.
Struts'ta dosya yükleme, adı verilen önceden tanımlanmış bir engelleyici aracılığıyla mümkündür. FileUpload org.apache.struts2.interceptor.FileUploadInterceptor sınıfı aracılığıyla kullanılabilen vedefaultStack. Yine de, aşağıda göreceğimiz gibi çeşitli parametreleri ayarlamak için struts.xml'nizde kullanabilirsiniz.
Görünüm Dosyaları Oluşturun
Seçilen bir dosyaya göz atmak ve yüklemek için gerekli olacak görünümümüzü oluşturmaya başlayalım. Öyleyse bir yaratalımindex.jsp kullanıcının bir dosya yüklemesine olanak tanıyan düz HTML yükleme formu ile -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>File Upload</title>
</head>
<body>
<form action = "upload" method = "post" enctype = "multipart/form-data">
<label for = "myFile">Upload your file</label>
<input type = "file" name = "myFile" />
<input type = "submit" value = "Upload"/>
</form>
</body>
</html>
Yukarıdaki örnekte kayda değer birkaç nokta var. İlk olarak, formun enctype şu şekilde ayarlanır:multipart/form-data. Bu, dosya yüklemelerinin dosya yükleme engelleyicisi tarafından başarılı bir şekilde işlenmesi için ayarlanmalıdır. Bir sonraki nokta, formun eylem yöntemidir.upload ve dosya yükleme alanının adı - myFile. Eylem yöntemini ve struts yapılandırmasını oluşturmak için bu bilgiye ihtiyacımız var.
Sonra, basit bir jsp dosyası oluşturalım success.jsp başarılı olması durumunda dosya yüklememizin sonucunu görüntülemek için.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>File Upload Success</title>
</head>
<body>
You have successfully uploaded <s:property value = "myFileFileName"/>
</body>
</html>
Sonuç dosyası aşağıdadır error.jsp dosyayı yüklerken bir hata olması durumunda -
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>File Upload Error</title>
</head>
<body>
There has been an error in uploading the file.
</body>
</html>
Eylem Sınıfı Oluşturun
Ardından, adında bir Java sınıfı oluşturalım uploadFile.java bu, dosyanın yüklenmesini ve bu dosyanın güvenli bir yerde saklanmasını sağlar -
package com.tutorialspoint.struts2;
import java.io.File;
import org.apache.commons.io.FileUtils;
import java.io.IOException;
import com.opensymphony.xwork2.ActionSupport;
public class uploadFile extends ActionSupport {
private File myFile;
private String myFileContentType;
private String myFileFileName;
private String destPath;
public String execute() {
/* Copy file to a safe location */
destPath = "C:/apache-tomcat-6.0.33/work/";
try {
System.out.println("Src File name: " + myFile);
System.out.println("Dst File name: " + myFileFileName);
File destFile = new File(destPath, myFileFileName);
FileUtils.copyFile(myFile, destFile);
} catch(IOException e) {
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public File getMyFile() {
return myFile;
}
public void setMyFile(File myFile) {
this.myFile = myFile;
}
public String getMyFileContentType() {
return myFileContentType;
}
public void setMyFileContentType(String myFileContentType) {
this.myFileContentType = myFileContentType;
}
public String getMyFileFileName() {
return myFileFileName;
}
public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
}
}
uploadFile.javaçok basit bir sınıftır. Unutulmaması gereken önemli nokta, FileUpload durdurucunun Parameters Interceptor ile birlikte bizim için tüm ağır işi yapmasıdır.
FileUpload engelleyicisi, varsayılan olarak sizin için üç parametreyi kullanılabilir kılar. Aşağıdaki düzende adlandırılırlar -
[your file name parameter] - Bu, kullanıcının yüklediği gerçek dosyadır. Bu örnekte "MyFile" olacak
[your file name parameter]ContentType- Bu, yüklenen dosyanın içerik türüdür. Bu örnekte "myFileContentType" olacaktır
[your file name parameter]FileName- Bu, yüklenen dosyanın adıdır. Bu örnekte "myFileFileName" olacak
Struts Interceptors sayesinde üç parametre bizim için mevcuttur. Tek yapmamız gereken, Action sınıfımızda doğru adlarla üç parametre oluşturmak ve bu değişkenler otomatik olarak bizim için otomatik olarak kablolanır. Dolayısıyla, yukarıdaki örnekte, her şey yolunda giderse basitçe "başarı" döndüren, aksi takdirde "hata" döndüren üç parametremiz ve bir işlem yöntemimiz var.
Yapılandırma Dosyaları
Dosya yükleme sürecini kontrol eden Struts2 yapılandırma özellikleri aşağıdadır -
Sr.No | Özellikler ve Açıklama |
---|---|
1 | struts.multipart.maxSize Dosya yüklemesi olarak kabul edilecek bir dosyanın maksimum boyutu (bayt cinsinden). Varsayılan 250M'dir. |
2 | struts.multipart.parser Çok parçalı formu yüklemek için kullanılan kitaplık. Varsayılan olarakjakarta |
3 | struts.multipart.saveDir Geçici dosyanın saklanacağı konum. Varsayılan olarak javax.servlet.context.tempdir'dir. |
Bu ayarlardan herhangi birini değiştirmek için kullanabilirsiniz constant Yüklenecek dosyanın maksimum boyutunu değiştirmek için yaptığım gibi, uygulamalarınızın struts.xml dosyasındaki etiketini tıklayın.
Bize sahip olalım struts.xml aşağıdaki gibi -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<constant name = "struts.multipart.maxSize" value = "1000000" />
<package name = "helloworld" extends = "struts-default">
<action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
</package>
</struts>
Dan beri, FileUploadönleme, öntanımlı durdurucu yığınının bir parçasıdır, açıklığını yapılandırmamıza gerek yoktur. Ancak, <action> içine <interceptor-ref> etiketi ekleyebilirsiniz. FileUpload engelleyicisi iki parametre alır(a) maximumSize ve (b) allowedTypes.
MaximumSize parametresi, izin verilen maksimum dosya boyutunu ayarlar (varsayılan yaklaşık 2MB'dir). AllowTypes parametresi, aşağıda gösterildiği gibi, kabul edilen içerik (MIME) türlerinin virgülle ayrılmış bir listesidir -
<action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">
<interceptor-ref name = "basicStack">
<interceptor-ref name = "fileUpload">
<param name = "allowedTypes">image/jpeg,image/gif</param>
</interceptor-ref>
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
Aşağıdakilerin içeriği web.xml dosya -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Şimdi proje adına sağ tıklayın ve tıklayın Export > WAR FileSavaş dosyası oluşturmak için. Sonra bu SAVAŞI Tomcat'in webapps dizininde konuşlandırın. Son olarak, Tomcat sunucusunu başlatın ve URL'ye erişmeyi deneyinhttp://localhost:8080/HelloWorldStruts2/upload.jsp. Bu, aşağıdaki ekranı oluşturacaktır -
Şimdi Gözat düğmesini kullanarak bir "Contacts.txt" dosyası seçin ve dosyayı sunucunuza yükleyecek olan yükle düğmesini tıklayın ve sonraki sayfayı görmelisiniz. Yüklenen dosyanın C: \ apache-tomcat-6.0.33 \ work'e kaydedilmesi gerektiğini kontrol edebilirsiniz.
FileUpload Interceptor'ın yüklenen dosyayı otomatik olarak sildiğini, bu nedenle yüklenen dosyayı silinmeden önce bir yere programlı olarak kaydetmeniz gerektiğini unutmayın.
Hata mesajları
FileUplaod engelleyicisi birkaç varsayılan hata mesajı anahtarı kullanır -
Sr.No | Hata Mesajı Anahtar ve Açıklama |
---|---|
1 | struts.messages.error.uploading Dosya yüklenemediğinde ortaya çıkan genel bir hata. |
2 | struts.messages.error.file.too.large Yüklenen dosya maximumSize tarafından belirtildiği gibi çok büyük olduğunda gerçekleşir. |
3 | struts.messages.error.content.type.not.allowed Yüklenen dosya belirtilen beklenen içerik türleriyle eşleşmediğinde oluşur. |
Bu mesajların metnini şuradan geçersiz kılabilirsiniz: WebContent/WEB-INF/classes/messages.properties kaynak dosyaları.