tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
2906
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    vanity vanity ist offline Grünschnabel
    Registriert seit
    Dec 2006
    Beiträge
    1
    Hallo,

    Ich schreibe zur Zeit an einer Webanwendung die Java ServerFaces in Verbindung mit Tomcat nutzt.
    Folgendes Problem:
    Ich habe eine Seite die Bilder hochläd. Diese werden dann in das Zielverzeichnis des WebContents gespeichert. Funktoniert auch prima. Nur kann ich aus dem Browser heraus nicht auf die hochgeladenen Dateien zugreifen weil der Tomcat der Meinung ist das die Datei nicht da wäre. Obwohl sie Nachweislich am richtigen Ort in der Verzeichnisstruktur liegt.
    Mache ich im Eclipse ein refresh (F5) des Ordners wo die Bilder liegen gehts und die Bilder werden korrekt angezeigt.
    Meine Frage nun wie mache ich einen solchen Refresh aus der Java Logik heraus oder muss ich vielleicht irgendwas in der server.xml ändern?
    Bin für jede Hilfe dankbar!
     

  2. #2
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Ja moment, liegt dein Eclipse worspace im Tomcat? Ich hoffe nicht. Normalerweise musst du die Anwendung aus Eclipse heraus in den Tomcat deployen. Alles was unterhalb deines webroot Verzeichnisses liegt sollte eigentlich zugreifbar sein (ausser WEB-INF und META-INF) bzw. sich dynamisch ersetzen lassen. Sonst würde zum Beispiel das Hotcodedeployment der MyEclipseIDE nicht funktionieren (Klasse speichern und schon ist sie deployed)

    Wie sieht denn deine Verzeichnisstruktur / -organisation aus?

    Gruß
    Ollie
     

  3. #3
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo!

    Wie wärs denn, wenn du deine Bilder außerhalb des Tomcats speichern würdest? Sprich wenn jemand irgendwelche Dateien hochlädt werden erstmal eventuelle Metadaten in ne DB gehauen, anschließend wird dir Datei gespeichert wird die Datei dann in irgend einem Verzeichnis relativ zu TOMCAT_HOME / etwa. ..\UPLOAD wenn nun jemand eine Datei anfordert dann leitest du die Anfrage einfach an ein spezielles Servlet, dass dann in dem UPLOAD Verzeichnis nach der Datei schaut und dann den Inhalt zum Client schickt...

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo!

    Mit Commons File-Upload / CommonsIO lässt sich sowas leicht machen:

    Unser Upload Servlet
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    
    package de.tutorials.web.upload;
     
    import java.io.File;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileItemFactory;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.commons.io.FilenameUtils;
     
    /**
     * Servlet implementation class for Servlet: UploadServlet
     * 
     */
    public class UploadServlet extends javax.servlet.http.HttpServlet implements
            javax.servlet.Servlet {
        private static final String UPLOAD_PAGE = "UPLOAD_PAGE";
        private static final String UPLOAD_DIR = "UPLOAD_DIR";
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#HttpServlet()
         */
        public UploadServlet() {
            super();
        }
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
         *      HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
     
            FileItemFactory fileItemFactory = new DiskFileItemFactory();
            ServletFileUpload servletFileUpload = new ServletFileUpload(
                    fileItemFactory);
            
            try {
                List items = servletFileUpload.parseRequest(request);
                for (Iterator iterator = items.iterator(); iterator.hasNext();) {
                    FileItem fileItem = (FileItem) iterator.next();
                    try {
                        String fileName = FilenameUtils.getName(fileItem.getName());
                        String uniqueFileName = generateFileUploadEntryInDatabase(fileName);
                        StringBuilder stringBuilder = new StringBuilder();
                        stringBuilder.append("Uploading: ");
                        stringBuilder.append(fileName);
                        stringBuilder.append(" to ");
                        stringBuilder.append(new File(getInitParameter(UPLOAD_DIR),
                                uniqueFileName).getAbsolutePath());
                        System.out.println(stringBuilder);
                        fileItem.write(new File(getInitParameter(UPLOAD_DIR),
                                uniqueFileName));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
            
            request.getRequestDispatcher(getInitParameter(UPLOAD_PAGE)).forward(request, response);
        }
     
        private String generateFileUploadEntryInDatabase(String fileName) {
            String uniqueName = System.nanoTime() + "#"+ fileName;
            System.out.println("save in db... " + fileName + " -> " + uniqueName);
            return uniqueName;
        }
    }

    Unser index.jsp mit dem Upload Feld:
    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="upload" method="POST" encType="multipart/form-data">
    File: <input type="file" name="file"/><input type="submit" value="upload"/>
    </form>
    </body>    
    </html>

    Unser Web.xml:
    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <display-name>
        de.tutorials.web.upload.example</display-name>
        <servlet>
            <description>
            </description>
            <display-name>
            UploadServlet</display-name>
            <servlet-name>UploadServlet</servlet-name>
            <servlet-class>
            de.tutorials.web.upload.UploadServlet</servlet-class>
            <init-param>
                <description>
                the UPLOAD Directory</description>
                <param-name>UPLOAD_DIR</param-name>
                <param-value>../UPLOAD</param-value>
            </init-param>
            <init-param>
                <description>
                the UPLOAD Page</description>
                <param-name>UPLOAD_PAGE</param-name>
                <param-value>index.jsp</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>UploadServlet</servlet-name>
            <url-pattern>/upload</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

    Das Working Directory vom Tomcat ist in der Regel: %TOMCAT_HOME%/bin wenn du nun innerhalb von TOMCAT_HOME ein entsprechendes Verzeichnis namens UPLOAD anlegst kannst du vom Tomcat heraus über new File("../UPLOAD") darauf verweisen.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  5. #5
    hadda hadda ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Beiträge
    118
    Hallo Thomas,

    ich will dein Beispiel erweitern mit einem Feld innerhalb <form>

    PHP-Code:
    <form action="upload" method="POST" encType="multipart/form-data">
    File: <input type="file" name="file"/>
    <
    input type="text" name="feldname">
    <
    input type="submit" value="upload"/>
    </
    form
    <>

    ich kann mit request.getParmeter("feldname") nicht lesen?

    Besten Dank
    Hadda
     

Ähnliche Themen

  1. Tomcat Version zur Laufzeit
    Von Buschiii im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 26.11.09, 10:11
  2. Antworten: 0
    Letzter Beitrag: 15.10.09, 08:54
  3. Compilieren zur Laufzeit
    Von Drizztd im Forum Java
    Antworten: 1
    Letzter Beitrag: 13.10.09, 22:25
  4. apache2 + tomcat mit mod_jk --> zugriff auf tomcat über apache2
    Von reweiss im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 16.10.07, 14:30
  5. Laufzeit Verringerung
    Von Winner im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 04.10.07, 16:27