Qual é a diferença entre o Contexto de Aplicativo e o Contexto de Aplicativo Web?
Estou ciente de que WebApplicationContext
é usado para aplicativos orientados à arquitetura Spring MVC?
Quero saber de que serve os ApplicationContext
aplicativos MVC? E em que tipo de beans são definidos ApplicationContext
?
spring
spring-mvc
applicationcontext
Sumit Trehan
fonte
fonte
web.xml
arquivo; esta pergunta está perguntando sobre algumas aulas da primavera.web.xml
mas sim sobre as variantes de configuração do Spring XML bean deApplicationContext
eWebApplicationContext
. Todas as definições de bean emapplicationContext.xml
estarão disponíveis noApplicationContext
enquanto todas as definições de bean em*-servlet.xml
estarão disponíveis em aWebApplicationContext
.Respostas:
Contexto do aplicativo da Web estendido Contexto do aplicativo, projetado para funcionar com o javax.servlet.ServletContext padrão, para que ele possa se comunicar com o contêiner.
Beans, instanciados em WebApplicationContext também poderão usar ServletContext se implementarem a interface ServletContextAware
É possível fazer muitas coisas com a instância ServletContext, por exemplo, acessar recursos WEB-INF (configurações xml e etc.) chamando o método getResourceAsStream (). Normalmente, todos os contextos de aplicativos definidos em web.xml em um servlet Spring são contextos de aplicativos da Web, isso vai para o contexto de aplicativo da web raiz e para o contexto de aplicativo do servlet.
Além disso, dependendo dos recursos de contexto do aplicativo da Web, o aplicativo pode ser um pouco mais difícil de testar e você pode precisar usar a classe MockServletContext para teste.
Diferença entre o servlet e o contexto raiz O Spring permite criar hierarquias de contexto de aplicativo multinível, para que o bean necessário seja buscado no contexto pai, se não estiver presente no contexto atual do aplicativo. Em aplicações web como padrão, existem dois níveis de hierarquia, raiz e servlet contextos: .
Isso permite que você execute alguns serviços como os singletons de todo o aplicativo (beans Spring Security e serviços básicos de acesso ao banco de dados geralmente residem aqui) e outro como serviços separados nos servlets correspondentes para evitar conflitos de nomes entre os beans. Por exemplo, um contexto de servlet servirá as páginas da Web e outro implementará um serviço da Web sem estado.
Essa separação de dois níveis sai da caixa quando você usa as classes de servlet spring: para configurar o contexto do aplicativo raiz, você deve usar a tag context-param em seu web.xml
(o contexto do aplicativo raiz é criado por ContextLoaderListener, declarado em web.xml
) e tag de servlet para os contextos do aplicativo de servlet
Observe que, se init-param for omitido, o spring usará myservlet-servlet.xml neste exemplo.
Consulte também: Diferença entre applicationContext.xml e spring-servlet.xml no Spring Framework
fonte
Voltando aos dias do Servlet, o web.xml pode ter apenas um
<context-param>
, portanto, apenas um objeto de contexto é criado quando o servidor carrega um aplicativo e os dados nesse contexto são compartilhados entre todos os recursos (Ex: Servlets e JSPs). É o mesmo que ter o nome do driver de banco de dados no contexto, o que não será alterado. Da mesma forma, quando declaramos o parâmetro contextConfigLocation no<contex-param>
Spring, cria um objeto Application Context.Você pode ter vários servlets em um aplicativo. Por exemplo, você pode querer manipular / proteger / * pedidos de uma maneira e / non-seucre / * de outra maneira. Para cada um desses Servlets, você pode ter um objeto de contexto, que é um WebApplicationContext.
fonte
A resposta aceita é completa, mas há uma explicação oficial sobre isso:
Pela maneira servlet e raiz de contexto são ambos WebApplicationContext:
fonte
ApplicationContext (Contexto do Aplicativo Raiz): Todo aplicativo Web Spring MVC possui um arquivo applicationContext.xml configurado como a raiz da configuração do contexto. Spring carrega esse arquivo e cria um applicationContext para o aplicativo inteiro. Este arquivo é carregado pelo ContextLoaderListener, que é configurado como um parâmetro de contexto no arquivo web.xml. E haverá apenas um applicationContext por aplicativo da web.
WebApplicationContext: WebApplicationContext é um contexto de aplicativo com reconhecimento da Web, ou seja, possui informações de contexto de servlet. Um único aplicativo da Web pode ter vários WebApplicationContext e cada servlet do Dispatcher (que é o controlador frontal da arquitetura Spring MVC) é associado a um WebApplicationContext. O arquivo de configuração webApplicationContext * -servlet.xml é específico para um DispatcherServlet. E como um aplicativo Web pode ter mais de um servlet de expedidor configurado para atender a várias solicitações, pode haver mais de um arquivo webApplicationContext por aplicativo Web.
fonte
O contexto de aplicativo da Web , especificado pela
WebApplicationContext
interface, é um contexto de aplicativo do Spring para aplicativos da Web. Ele possui todas as propriedades de um contexto de aplicativo Spring regular, uma vez que aWebApplicationContext
interface estende aApplicationContext
interface e inclui um método para recuperar a API Servlet padrãoServletContext
para o aplicativo Web.Além dos escopos padrão do bean Spring
singleton
eprototype
, existem três escopos adicionais disponíveis em um contexto de aplicativo da web:request
- define uma única definição de bean para o ciclo de vida de uma única solicitação HTTP; ou seja, cada solicitação HTTP tem sua própria instância de um bean criado na parte de trás de uma única definição de beansession
- define uma definição de bean único para o ciclo de vida de uma sessão HTTPapplication
- define uma única definição de bean para o ciclo de vida de umServletContext
fonte