¿Dónde pongo archivos estáticos para la aplicación GWT?¿Carpeta de guerra o carpeta pública?
-
19-09-2019 - |
Pregunta
Tengo algunos archivos JavaScript, un archivo HTML principal, un archivo CSS principal y algunos archivos CSS que se importan al archivo principal.
Entiendo que puedo colocar archivos estáticos en dos lugares:a) la carpeta 'guerra';o b) la carpeta 'pública'.
¿Cuál es el mejor lugar para guardar mis archivos estáticos?¿Se tratan las dos ubicaciones de manera diferente?¿Existe una "mejor práctica" sobre este tema?
Solución
La diferencia entre las 2 ubicaciones es que el compilador gwt copia los archivos de las carpetas públicas a la carpeta 'su módulo' en la carpeta 'war'.Esto significa que si implementa la 'guerra' (por ejemplo, a través del complemento de Google en el motor de aplicaciones de Google), los archivos de la carpeta 'pública' no están en el nivel superior.
Por ejemplo, si tiene un index.html en la carpeta 'pública' con un módulo gwt llamado 'mymodule' y lo implementa en www.example.com, tendrá el siguiente aspecto, deberá acceder a él a través de:
www.example.com/mymodule/index.html
Si tiene index.html en la carpeta 'war', obtendrá:
www.example.com/index.html
Resumiendo.Su página de destino debe estar en la carpeta "guerra".Los archivos de recursos utilizados por la página de destino también se pueden almacenar aquí (css, imágenes).Cualquier otro archivo de recursos al que se haga referencia en cualquier archivo de módulo gwt (o código, como imágenes) debe almacenarse en la carpeta 'pública' relacionada con el módulo gwt.
Otros consejos
La nueva forma de trabajar en GWT es utilizar la carpeta de guerra.
Sin embargo, si usted proyecta es una librería de widgets reutilizable que se utiliza en una aplicación GWT, entonces debería poner los recursos en la carpeta pública. El compilador se asegurará de que los archivos se incluyen automáticamente en el paquete generado.
A mi entender, que depende de sus necesidades, pero vamos a empezar a hablar ejemplo primero ...
(debe ser GWT 2.6.0) sobre este que es incorrecta o al menos incompleta / confuso. Tal como lo veo ( No soy un gurú así que por favor me corrija si mis investigaciones están equivocados! ) Estoy buscando en el siguiente Ejemplo de estructura proj
myproj/
src/my/gwtproj/
client/
img/
foo1.png
AppClientBundle.java
foo2.png
public/
img/
foo3.png
foo4.png
war/
img/foo5.png
foo6.png
.classpath
.project
Imaginemos que puede (o no) que hacer referencia a dichos recursos en alguna de las interfaces AppClientBundle
(u otro marco de referencia de aplicación):
interfaces AppClientBundle extends ClientBundle {
@Source("img/foo1.png")
ImageResource fooImg();
}
A continuación, se parece a dependen de sus requisitos , por ejemplo:.
- R.A) estos recursos (como imágenes) son referido en el código de la aplicación , por ejemplo en nuestra interfaz
AppClientBundle
a través de anotaciones@Source
- R.B.) estos recursos han de ser agrupados por carpetas , por ejemplo,
foo2.png
vsimg/foo1.png
- R. C) estos recursos deben estar disponibles fuera algún camino específico contexto URL de la aplicación, por ejemplo, si se utiliza como librería de widgets, por ejemplo
http://host1/gwtapp1/foo4.png
vshttp://host1/gwtapp2/foo4.png
- R.d) estos recursos necesita ser aplicación independiente (por ejemplo externamente) URL con referencia a, por ejemplo,
http://host1/gwtapp1/foo4.png
vshttp://host1/foo6.png
Esto es lo que uno puede hacer ( Posibilidades ) y es implicaciones en relación con R * arriba:.
- P.1) ( generalmente se recomienda como la veo ) poner muy bien recursos de carpetas-estructurado bajo
my.gwtproj.client
(en este ejemplo,foo1.png
)-
@Source("img/foo1.png")...
esta manera funciona bien - en la documentación anterior que atendemos sobre algunos carpeta
public
(en mi casomy.gwtproj.public
), pero la creación como un paquete en Eclipse no me permite esto (ya quepublic
es una aplicación Java reservada palabra clave , pero su creación a través de la vistaNavigator
obras)- Sin embargo, de esta manera el
@Source
anterior no funciona (probablemente porque es un problema con la ubicación relativa del sistema de archivosAppClientBundle
) - , sin embargo, si el recurso debe estar disponible al público bajo el contexto de aplicación uno puede tener que hacerlo a través de esta carpeta
public
- Sin embargo, de esta manera el
-
- P.2) put recursos "no agrupados" directamente bajo
myproj/war
, por ejemploprojdir/war/foo6.png
- esta manera se puede utilizar / se encuentra dentro de anotaciones, por ejemplo,
@Source
- y se puede hacer referencia fuera de la aplicación en sí a través de, por ejemplo,
http://host1/foo6.png
- esta manera se puede utilizar / se encuentra dentro de anotaciones, por ejemplo,
- P.3) put recursos de carpetas-estructurada bajo
myproj/war
, por ejemploprojdir/war/img/foo5.png
- en contraste con P.2)
@Source("img/foo5.png")
No trabajaría nunca
- en contraste con P.2)