我是Spring的新手,想将spring ioc连接到我的小型(测试)网络应用程序中。
我有这样的Servlet ProductServlet
:
public class ProductServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
private RequestHelper requestHelper;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request);
}
private void processRequest(HttpServletRequest request){
requestHelper.process(request);
}
public RequestHelper getRequestHelper() {
return requestHelper;
}
public void setRequestHelper(RequestHelper requestHelper) {
this.requestHelper = requestHelper;
}
}
和我的web.xml:
<servlet>
<servlet-name>ProductServlet</servlet-name>
<servlet-class>com.epam.productshop.controller.ProductShop</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProductServlet</servlet-name>
<url-pattern>/ProductServlet</url-pattern>
</servlet-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-config.xml
</param-value>
</context-param>
而且我也有这样的Spring配置XML:
<bean id="factory" class="com.epam.productshop.readerfactory.ReaderFactory">
<property name="file" value="/xml/products.xml" />
</bean>
<bean id="requestHelper" class="com.epam.productshop.requesthelper.RequestHelper" scope="singleton">
<property name="factory" ref="factory" />
</bean>
<bean name="ProductServlet" class="com.epam.productshop.controller.ProductServlet" scope="singleton">
<property name="requestHelper" ref="requestHelper"/>
</bean>
我有这样的问题:
我希望在servlet init()期间将requestHelper对象设置为我的servlet。但除了这个,它还给了我nullpointer。
我正在尝试从实现servlet
HttpRequestHandler
,将其写入SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, getServletContext());
init()方法以及我在互联网上看到的其他东西,但所有这些都不能解决我的问题。
请帮我
在您的问题中
<bean name="ProductServlet" class="com.epam.productshop.controller.ProductServlet" scope="singleton">
<property name="requestHelper" ref="requestHelper"/>
</bean>
您不能使用Spring容器实例化servlet,它们是由servlet容器实例化的。您只是在声明ProductServlet的另一个实例。
因此,当init()
调用Servlet 方法时,您应该调用
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, getServletContext());`
要注入requestHelper @Autowired
,请在Servlet中声明带注释的字段或属性:
private RequestHelper requestHelper;
@Autowired
public void setRequestHelper(RequestHelper requestHelper){
this.requestHelper = requestHelper;
}
来自 processInjectionBasedOnServletContext javadoc:
处理 @Autowired 注射给定目标对象,根据与存储在ServletContext当前根web应用上下文。
问题内容: 我想配置为能够在视图中使用hibernate延迟初始化,因此我在web.xml中添加了过滤器定义,但是它不起作用,我仍然遇到相同的延迟初始化异常,这是我所做的: applicationContext: 请告知为什么我 仍然会收到延迟初始化异常 ,谢谢。 问题答案: 似乎构造过滤器链的顺序取决于过滤器映射元素出现的顺序。 换句话说,请尝试将OpenSessionInViewFilter的
问题内容: 我想使用Spring Boot在不同端口上加载具有嵌入式tomcat配置的两个servlet容器。 有谁知道如何实现这一目标? 问题答案: 它应该很简单:只需根据需要创建尽可能多的类型,并为每个类型提供同的端口。在这里的示例中,两个上下文分别是父级和子级,但这不是设置的必要部分。
我试图根据文档(以及相关的SO问题)设置LOG4J,但它不会创建假定的文件,但WildFly中有这样的日志: web.xml app.war/WEB-INF/类/log4j2.xml app.war/WEB-INF/lib 你能告诉我怎么了吗?我尝试在web.xml中注释掉上下文参数,并依赖自动配置,但是没有变化。 编辑 当我添加以下代码时 失败的方式不同(我现在没有时间调查)
引入 Maven 依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core</artifactId> <version>${shardingsphere.version}</version> </dependency> <!-- 使用
引入 Maven 依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core</artifactId> <version>${shardingsphere.version}</version> </dependency> 规则配置 Sha
我目前正在寻找一种动态组装config-keys(回退处理)的方法,然后在我们的microprofile-config.properties文件中查找这些。这样的文件可能如下所示: 因此,当存在客户和子客户时,使用on 我得到这个问题的原因是我想使用注释,所以没有ConfigProvider.getConfig()。这意味着我必须在自定义的中组装动态配置键。 我知道ConfigSources是在服