invocar - Cómo implementar el servicio RESTful JAX-RS en el marco JSF
java rest client json (3)
En mi laboratorio me pidieron que creara un sitio web simple usando el marco JSF y que también usara REST. Investigué un poco sobre esos dos. Resulta que para REST tengo que usar el marco JAX-RS con Jersey. Me preguntaba cómo puedo integrar estos dos marcos, JAX-RS y JSF.
Ya tengo el siguiente servlet en
web.xml
para JSF:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
Para Jersey, pensé que tenía que usar el siguiente servlet en
web.xml
:
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.jbm.rest</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
Ahora mi preocupación es que, para mí, parece que este servlet de Jersey reemplazará al servlet Faces en
web.xml
.
Esto cambiará mi aplicación de JSF a JAX-RS.
Pero quiero mantener JSF y usar JAX-RS también.
¿Cómo puedo hacer eso?
Al publicar esto para cualquiera que intente hacer esto en XPages, hay un Control REST que puede colocar en la página desde la biblioteca de componentes.
Como vincular un ActionListener, vincula una clase java al componente y establece un patrón de URL.
Consulte esta nota: https://oliverbusse.notesx.net/hp.nsf/blogpost.xsp?documentId=2C4E
y aplicación de muestra https://github.com/zeromancer1972/simplerest/blob/master/ODP/XPages/index.xsp
Esta preocupación es innecesaria.
Puede tener múltiples servlets de forma segura en una sola aplicación web, siempre que sus patrones de URL no entren en conflicto entre sí.
Por lo general, si ese fuera el caso, un contenedor de servlets un poco cuerdo ya arrojaría una excepción durante el inicio de la aplicación web.
En su caso, ha registrado el servlet JSF en
/test/*
(lo cual es extraño, por cierto,
usually
usa
*.xhtml
para eso), y ha registrado el servlet JAX-RS en
/api/*
.
Entonces
solo
tiene que llamarlos usando URL que coincidan con esos patrones de URL.
Y, para aclarar un malentendido conceptual, no puede ni puede "implementar REST en JSF" en absoluto. Son completamente independientes entre sí. Simplemente pueden ejecutarse uno al lado del otro en la misma aplicación web con total tranquilidad sin conocerse el uno al otro. Lo único que podrían compartir es la capa de servicio o beans administrados ''compartidos'' (CDI). Pero eso suele ser todo. El diseño de la capa de servicio es, a su vez, independiente de quién lo esté utilizando.
Este problema específico no está relacionado con JSF ni JAX-RS. Son solo servlets básicos . También podría valer la pena volver a lo básico y dedicar un poco de tiempo a aprender más sobre la piedra angular de básicamente todas las aplicaciones web Java EE.
No puede tener ambos directamente en la misma clase o capa de Java. Lo implementé como a continuación
|---> JSF Managed Beans(Inject logic here)
Database --> Daos --> Logic --|
|---> JAX-RS (Inject logic here)