Java 普通servlet可以配置为seam组件吗?

Java 普通servlet可以配置为seam组件吗?,java,servlets,dependency-injection,seam,Java,Servlets,Dependency Injection,Seam,我在seam gen(2.1.2)应用程序中创建了一个普通servlet,现在我想使用注入。因此,我用@Name对其进行了注释,并将其识别为组件: INFO [Component] Component: ConfigReport, scope: EVENT, type: JAVA_BEAN, class: com.mycompany.servlet.ConfigReport 不幸的是,在init() } 我的方法是否滥用? 备选方案是什么(向servlet发送请求的客户端是cur

我在seam gen(2.1.2)应用程序中创建了一个普通servlet,现在我想使用注入。因此,我用@Name对其进行了注释,并将其识别为组件:

     INFO  [Component] Component: ConfigReport, 
scope: EVENT, type: JAVA_BEAN, class: com.mycompany.servlet.ConfigReport
不幸的是,在
init()

}

我的方法是否滥用?

备选方案是什么(向servlet发送请求的客户端是curl,而不是浏览器)?

堆栈器,如果您希望Seam@在任何启用的组件中,它必须拦截您的请求。例如,@injection在使用EJB时起作用,因为Seam使用EJB拦截器。它解释了为什么在使用EJB时应该声明Seam EJB拦截器

另一方面,Java Server Faces,Seam利用表达式语言解析器,让您能够访问任何Seam组件,当Seam core jar放置在类路径上时,默认情况下安装了该组件

实现Seam与任何web技术的集成的关键是ContextFilter—请注意,您必须启用Seam Filter来使用ContextFilter—根据Seam in Action book的描述如下

为非JSF请求启用Seam容器和上下文。不应应用于JSF请求,因为它会导致执行重复的逻辑,从而导致未定义的结果

ContextFilter向非JSF打开对Seam容器及其上下文变量的访问 servlet,如Struts、SpringMVC和DirectWebRemoting(DWR)。尽管Seam的大部分工作是在JSFServlet中完成的,但是这些附加的过滤器允许Seam 将其生命周期的边界扩展到JSFServlet无法触及的范围之外

要启用ContextFilter,请在components.xml中声明它

<component name="org.jboss.seam.web.contextFilter">
    <property name="disabled">false</property>
</component>
<web:context-filter regex-url-pattern="/config/*"/>

假的
因为没有空闲时间,我不知道如何使用这种函数性。看看ContextFilter源代码。它可以给你一个很好的洞察力。

对于记录:

除了亚瑟·罗纳德·f·d·加西亚给出的重要提示

组件的注入仍然不起作用,至少我可以手动查找组件,因此需要一个上下文
ContextualHttpServletRequest

components.xml

<component name="org.jboss.seam.web.contextFilter">
    <property name="disabled">false</property>
</component>
<web:context-filter regex-url-pattern="/config/*"/>
在包装好的servlet代码中

entityManager = (EntityManager) Component.getInstance( "entityManager" );
链接:


+谢谢,几天前刚买了这本书,你给了我指针谢谢。干得好(+1)。我假装与其他web框架一起使用ContextFilter。