2009-06-15 7 views
3

Je travaille sur un site Web fonctionnant sous Tomcat qui stocke beaucoup de données sur les membres, et je ne suis pas certain de la meilleure façon de l'empaqueter. Je veux être capable de déployer une guerre facilement sans avoir besoin de retirer quoi que ce soit d'abord. Ma première pensée était de séparer les données des membres dans leur propre répertoire en dehors de la guerre, mais mon problème est que certains de ces contenus doivent être liés dans le site Web (images, etc.).Comment mieux emballer un site Web

Il doit y avoir une meilleure solution que de déployer une guerre, puis de recopier les données. Est-ce que quelqu'un a des suggestions?

+0

De quel type de "données membres" parlons-nous? Stuff chargé par les utilisateurs? Personnalisation pour différents clients exécutant l'application Web? Il n'est pas clair à partir de votre question quand et pourquoi ces "données membres" seraient supprimées/ajoutées à l'application. –

+0

Oui, ce sont des éléments téléchargés par l'utilisateur. Je veux l'enlever pour pouvoir déployer une guerre non explosée sans la modifier. – Jesse

+0

Comment le contenu peut-il être téléchargé par les utilisateurs AVANT le déploiement? –

Répondre

4

Votre première pensée était correcte. Stocker des données dans un direcotry extérieur est la meilleure solution. Vous pouvez facilement résoudre le problème avec les images en créant une servlet qui accèderait à ce répertoire externe sur demande d'image.

Je ne peux pas poster mon code, mais voici un extrait similaire qui crée une réponse. Il suffit de créer une classe en étendant FileServlet et d'écrire du code pour charger le fichier depuis votre répertoire.

http://snippets.dzone.com/posts/show/4629

Ensuite, ajoutez à votre web.xml:

<servlet> 
    <servlet-name>My File Servlet</servlet-name> 
    <servlet-class>my.package.FileServlet</servlet-class> 
    <load-on-startup>0</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>My File Servlet</servlet-name> 
    <url-pattern>/upload/*</url-pattern> 
</servlet-mapping> 

et chaque lien comme http://myapp.com/upload/userimage.jpg sera créé par servlet

+0

C'est ce que je pensais, mais je ne pouvais pas penser à la façon de faire le servlet. Dites, je répartis le répertoire membre en/usr/members. Si j'essaie de renvoyer un lien, le conteneur ne pourra pas le trouver.Alors, que dois-je faire dans la servlet? – Jesse

+0

J'ai ajouté quelques explications et du code. – GvS

+0

Merci beaucoup. J'ai juste fait un petit test, et ça a bien marché! – Jesse

1

Vous devez certainement séparer vos données de votre application. Comme je ne suis pas sûr des raisons que vous avez eues à l'origine pour mettre des données sur les membres (apparemment des images et quelque chose d'autre), je peux offrir des suggestions basées sur un environnement plus idéal.

Si vous stockez des informations sur un grand nombre de personnes différentes et avez besoin d'y accéder à plusieurs endroits, pourquoi ne pas choisir d'utiliser une base de données? Peut-être même un gratuit comme PostgreSQL ou MySQL?

Si vous stockez vos données dans une base de données, il est facile de les récupérer via java, soit en utilisant un ORM comme Hibernate ou seulement certaines bibliothèques JDBC de base. Cela suppose que vous compreniez SQL et la couche de base de données en Java.

Ensuite, si vous avez besoin d'accéder à certains fichiers, vous pouvez créer une architecture SOA (Service Orientated Architecture) et utiliser un service Web reposant pour extraire les images en fonction d'une URL. Cela permettrait de décharger le stockage sur une autre machine de votre zone de confiance.

Il est difficile d'offrir une bonne solution sans plus de détails sur le problème et la configuration de votre serveur.

+0

Nous utilisons déjà un db pour stocker les données des membres, mais avons besoin de stockage de fichiers pour des choses comme des images. Quant à savoir pourquoi c'est comme ça, eh bien, ce n'était pas mon choix. Je suppose que c'était fait pour fournir un accès facile aux images pour l'affichage sur le site. – Jesse

Questions connexes