Output directory αρχείων σε Dynamic Web Project

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
michalis
Gbyte level
Gbyte level
Posts: 1061
Joined: Mon Dec 12, 2011 8:42 pm
Academic status: Alumnus/a
Gender:

Output directory αρχείων σε Dynamic Web Project

Postby michalis » Wed Nov 06, 2013 2:58 am

Καλησπέρα παιδιά.
Θέλω να ρωτήσω κάτι σχετικό με ένα jsp project που φτιάχνω. Έχω πάρει κλάσεις με Copy από ένα άλλο απλό project (στo οποίo τις έτρεχα πειραματικά) και αυτές οι κλάσεις θέλω τώρα να είναι java resources στο dynamic web project μου. Το πρόβλημα είναι ότι δημιουργούν κάποια αρχεία που χρειάζονται μετά στα jsp μου αλλά πάνε και τα αποθηκεύουν στο directory του αρχικού project των κλάσεων, οπότε προφανώς τα jsp δεν θα τα δουν. Δεν ξέρω αν μου ξεφεύγουν βασικά πράγματα του Eclipse αλλά μου φαίνεται αρκετά περίεργο, δεδομένου ότι δοκίμασα απλά να πάρω τον κώδικα με cp και να φτιάξω εντελώς νέα κλάση στο dynamic web project αλλά πάει πάλι και αποθηκεύει τα output files στο directory του άλλου project....

O κώδικας για το Write:

Code: Select all

TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         DOMSource source = new DOMSource(doc);
         StreamResult result = new StreamResult(new File("file"+friendsOfUser.getUserId()+".xml"));

         // Output to console for testing
         // StreamResult result = new StreamResult(System.out);
         transformer.setOutputProperty(OutputKeys.INDENT, "yes");   //pretty printer
         transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
         transformer.transform(source, result);


Είμαι σχεδόν βέβαιος ότι για κάποιο λόγο γίνεται κλήση της αρχικής κλάσης που είχα στο απλό project, αντί για την τοπική που έχω στο Dynamic Web project.
Thanks in advance!
Last edited by michalis on Wed Nov 06, 2013 3:16 am, edited 1 time in total.
User avatar
rexes
Kilobyte level
Kilobyte level
Posts: 397
Joined: Wed Sep 21, 2011 8:22 pm
Academic status: 3rd year
Gender:
Location: SomeWhere

Re: Output directory αρχείων σε Dynamic Web Project

Postby rexes » Wed Nov 06, 2013 3:12 am

Πήρες μήπως και κανα config file μαζί σου κατά την αντιγραφή;


EDIT: Αμα παίζει τέτοιο θέμα δοκίμασες να κάνεις clean ;;;
Last edited by rexes on Wed Nov 06, 2013 3:17 am, edited 1 time in total.
Εφαρμογή για το Πρόγραμμα του Οικονομικού Πανεπιστημίου Αθηνών
Image
Δείτε περισσότερα για την εφαρμογή και πείτε την άποψή σας!
michalis
Gbyte level
Gbyte level
Posts: 1061
Joined: Mon Dec 12, 2011 8:42 pm
Academic status: Alumnus/a
Gender:

Re: Output directory αρχείων σε Dynamic Web Project

Postby michalis » Wed Nov 06, 2013 3:17 am

Όχι μόνο κώδικα, γι'αυτό έχω σκαλώσει...Πάει και καλεί την κλάση του αρχικού project αντί για την τοπική.

Edit: SOLVED. Απλά είμαι ηλίθιος.....anyway. Παρ'ολα αυτά keep topic alive and stay on γιατί σίγουρα αν κρίνω απ'το πόσο jsp ξέρω, θα επανέλθω σύντομα.... :roll:


Question2: Επίσης κάτι άλλο αν γνωρίζει κάποιος. Έχω παρατηρήσει ότι για να χρησιμοποιήσουν τα jsp μου αρχεία τρέχοντας κλάσεις από java resources, αυτά θα πρέπει να είναι τόσο έξω-έξω στον directory, όσο και μέσα στο WebContent, αλλά και στο WebContent/WEB-INF. Μέχρι τώρα ό,τι έχω δοκιμάσει δεν έχει τρέξει αν το αρχείο δεν είναι και στις 3 αυτές τοποθεσίες. Γνωρίζει κάποιος γιατί συμβαίνει αυτό και πως λύνεται; Γιατί να πρέπει να γίνεται έτσι το βρίσκω λίγο χαζό...Οπότε μάλλον εγώ κάνω κάτι λάθος.
User avatar
nachos
Gbyte level
Gbyte level
Posts: 1252
Joined: Mon Aug 21, 2006 4:28 pm
Academic status: Alumnus/a
Gender:
Location: Brachamee City

Re: Output directory αρχείων σε Dynamic Web Project

Postby nachos » Wed Nov 06, 2013 5:20 pm

Nothing is impossible for the man who doesn't have to do it himself
michalis
Gbyte level
Gbyte level
Posts: 1061
Joined: Mon Dec 12, 2011 8:42 pm
Academic status: Alumnus/a
Gender:

Re: Output directory αρχείων σε Dynamic Web Project

Postby michalis » Thu Nov 07, 2013 3:07 am

Με τα class δεν έχω θέμα, τα αφήνω στη default θέση που τα βγάζει ο compiler. Με τα files που χρησιμοποιώ σε input streams έχω θέμα....Απλά αν πετάξω τα .class στο web-inf και βάλω και τα input files εκεί...Thanks όπως και να χει, θα το κοιτάξω!
User avatar
nachos
Gbyte level
Gbyte level
Posts: 1252
Joined: Mon Aug 21, 2006 4:28 pm
Academic status: Alumnus/a
Gender:
Location: Brachamee City

Re: Output directory αρχείων σε Dynamic Web Project

Postby nachos » Thu Nov 07, 2013 1:11 pm

Κατάλαβα τι εννοείς. Ουσιαστικά το πρόβλημά σου είναι ότι γράφεις/διαβάζεις αρχεία με relative path, μέσα από java κώδικα, και σου είναι δύσκολο να προσδιορίσεις που στο καλό καταλήγουν αυτά τα αρχεία.

Θα πρέπει να αλλάξεις την προσέγγισή σου, γιατί είναι εξαρχής λάθος. Θα πρέπει να παίξεις με absolute paths, ώστε ανά πάσα στιγμή, άσχετα από το context του κώδικα, να κατασκευάζεις τα αρχεία σου στο σωστό σημείο. Αυτό γίνεται μέσω της μεθόδου getRealPath(string path) του interface ServletContext.

Στην περίπτωση που ο κώδικας που γράφεις είναι jsp, ή κανονική κλάσση που κληρονομεί το HttpServlet, θα έχεις διαθέσιμο ένα ServletContext μέσω της μεθόοδυ getServletContext(). Αν από την άλλη είσαι σε μια οποιαδήποτε άλλη κλάσση που δεν κληρονομεί από την HttpServler (και δεν έχει νόημα να το κάνει), μπορείς να κατασκευάσεις μια static helper μέθοδο που θα μπορείς να καλείς για να κάνεις τη δουλειά σου. Τσέκαρε το παρακάτω παράδειγμα για να δείς πως θα το κάνεις:

http://javaevangelist.blogspot.gr/2011/06/determining-absolute-path-in-web.html
Nothing is impossible for the man who doesn't have to do it himself
michalis
Gbyte level
Gbyte level
Posts: 1061
Joined: Mon Dec 12, 2011 8:42 pm
Academic status: Alumnus/a
Gender:

Re: Output directory αρχείων σε Dynamic Web Project

Postby michalis » Thu Nov 07, 2013 3:12 pm

Ok ευχαριστώ! Κάτι τέτοιο έχω προσπαθήσει να κάνω αλλά προς το παρόν δε δουλεύει αρκετά καλά. Θα διαβάσω το link μήπως βγάλω κάτι.
Στην ουσία εγώ καλώ τη java μεθοδο του model μου απ'το jsp με παράμετρο το realPath του αρχείου (που παίρνω με τον τρόπο που είπες) ΑΛΛΑ για κάποιο λόγο αυτό το αρχείο δεν το βρίσκει ποτέ αν δεν είναι και στα 3 μέρη που έγραψα πιο πάνω. Αν λείπει έστω από μια τοποθεσία, θα χτυπήσει filenotfound και δεν καταλαβαίνω το λόγο.
User avatar
nachos
Gbyte level
Gbyte level
Posts: 1252
Joined: Mon Aug 21, 2006 4:28 pm
Academic status: Alumnus/a
Gender:
Location: Brachamee City

Re: Output directory αρχείων σε Dynamic Web Project

Postby nachos » Thu Nov 07, 2013 9:22 pm

Διπλοτσέκαρε ότι όντως έχεις δημιουργήσει σωστά το path των αρχείων. Από αυτό που μου λές, εμένα μου δίνει την εντύπωση ότι τα paths είναι relative. Για να το τσεκάρεις, δοκίμασε να τα τυπώνεις στη σελίδα σου. Επίσης άμα δε βαριέσαι, πόσταρε ακριβώς το σημείο του κώδικα που έχεις φτιάξει το path του αρχείου, και δημιουργείς το stream για να διαβάσεις/γράψεις.
Nothing is impossible for the man who doesn't have to do it himself
michalis
Gbyte level
Gbyte level
Posts: 1061
Joined: Mon Dec 12, 2011 8:42 pm
Academic status: Alumnus/a
Gender:

Re: Output directory αρχείων σε Dynamic Web Project

Postby michalis » Fri Nov 08, 2013 12:28 am

JSP:

Code: Select all

String fileName = getServletContext().getRealPath(
         "file.xml");
   feed = Collector.loadFriends(fileName);



java:Collector:loadFriends

Code: Select all

SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
      List<Tweet> feed=null;   //list of tweets (from XML)
   
      try {
         
         SAXParser saxParser = saxParserFactory.newSAXParser();
         MyHandler2 handler = new MyHandler2();
         saxParser.parse(new File(fname), handler);
         //Get Tweets list
         feed = handler.getTwList();
         System.out.println("Retrieved:"+feed.size()+" tweets");
         //print friend information
         
      } catch (ParserConfigurationException | SAXException | IOException e) {
         e.printStackTrace();
      }
      return feed;



Βασικά ναι, έχω καταλάβει ότι όντως relative βάζω αλλα όπως και να χει αν το κοιτάξεις απάντησε κάτι να τα ξεκαθαρίσω καλυτερα.


Εάν πετάω απευθείας absolute paths του host υπολογιστή ως παράμετρο στα filestreams, χωρίς καν να παίξω με getRealPath, δε θα δουλέψει σωστά; Αν έχω δηλαδή προαποφασίσει να χρησιμοποιήσω πολύ συγκεκριμένα directories εγγραφής/αποθήκευσης (προφανώς προσβάσιμα) και δίνω απευθείας το path....
User avatar
nachos
Gbyte level
Gbyte level
Posts: 1252
Joined: Mon Aug 21, 2006 4:28 pm
Academic status: Alumnus/a
Gender:
Location: Brachamee City

Re: Output directory αρχείων σε Dynamic Web Project

Postby nachos » Fri Nov 08, 2013 10:27 am

michalis wrote:Εάν πετάω απευθείας absolute paths του host υπολογιστή ως παράμετρο στα filestreams, χωρίς καν να παίξω με getRealPath


Σε καμμία περίπτωση. Αυτό είναι πολύ κακή πρακτική, καθώς στην παραμικρή αλλαγή στο deployment της εφαρμογής, θα έχεις runtime errors. Ουσιαστικά για κάθε διαφορετικό deployment μπορεί να χρειάζεται να αλλάζεις τον κώδικά σου. :smt018

Δοκίμασε στο σημείο που καλείς την getRealPath(), να δώσεις σαν παράμετρο την τιμή "/file.xml" (με slash στην αρχή δηλαδή). Επίσης, δοκίμασε να καλέσεις την parse του SAXParser που παίρνει String argument, αντί για File.

Ψάχνοντας λίγο, βρήκα δύο ενδιαφέροντα threads στο stackoverflow που μπορεί να σου χρησιμεύσουν (τσέκαρε και τι λένε σχετικά με το ότι αν γράψεις σε αρχεία, οι αλλαγές θα χαθούν αν/όταν γίνει redeploy το WAR):

http://stackoverflow.com/questions/12160639/what-does-mean-in-the-method-servletcontext-getrealpath

http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream

Συγνώμη που σε πάω ψάχνοντας, αλλά κι εγώ δεν έχω παίξει καθόλου με java web apps, οπότε και για μένα το τοπίο είναι θολό :-D
Nothing is impossible for the man who doesn't have to do it himself

Return to “Προγραμματισμός”

Who is online

Users browsing this forum: No registered users and 1 guest