做一个简单的IOC注入:但就是注不进去,dataSource,userManager都报空指针(applicationContext.xml读入内存没有问题),具体代码如下:
页面中用一个连接访问到servlet,如下:
其中已经配置了dataSource和userManager的set方法public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
dataSource.getConnection();
} catch (SQLException e) {}
userManager.addUser(null);
}applicationContext.xml<!-- 配置连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/assignment</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<!-- Servlet中配置UserManager -->
<bean id="userManager" class="com.dao.impl.UserManagerImpl" />
<bean name="/addUserServlet" class="com.servlet.addUserServlet">
<property name="dataSource" ref="dataSource"></property>
<property name="userManager" ref="userManager"></property>
</bean>web.xml中:<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
望高手们给看看。急~~~~~~~~~谢谢
页面中用一个连接访问到servlet,如下:
其中已经配置了dataSource和userManager的set方法public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
dataSource.getConnection();
} catch (SQLException e) {}
userManager.addUser(null);
}applicationContext.xml<!-- 配置连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/assignment</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<!-- Servlet中配置UserManager -->
<bean id="userManager" class="com.dao.impl.UserManagerImpl" />
<bean name="/addUserServlet" class="com.servlet.addUserServlet">
<property name="dataSource" ref="dataSource"></property>
<property name="userManager" ref="userManager"></property>
</bean>web.xml中:<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
望高手们给看看。急~~~~~~~~~谢谢
解决方案 »
- 关于JDBC连MSSQL的一个超奇怪的问题,高手看看
- 数据库方面的要学到怎样
- Struts2 自定义拦截器 拦截异常
- 请问谁有oreilly JSP设计(第二版)英文版啊 50分换哈 呵呵 谢谢了
- 高手进!!此题已困多时!!!帮忙啊!
- ,我是jsp新手,请教一问题
- 急急急!!在JSP中,如何弹出保存文件对话框,并把文件保存到任意指定目录?
- JSP连接MYSQL是否必须要装MYSQL才行?
- 各位高手请问:怎样使用复选框,删除选中的记录?急!!!!
- 请问高手我 这条语句咋不起作用if(subStry != "-1" && !subStry.equals("*"))
- servlet到jsp的路径问题
- 两个jsp页面传值到1个jsp页面
严重: Servlet.service() for servlet addUserServlet threw exception
java.lang.NullPointerException
at com.servlet.addUserServlet.doPost(addUserServlet.java:53)
at com.servlet.addUserServlet.doGet(addUserServlet.java:43)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
<bean id="userManager" class="com.dao.impl.UserManagerImpl" />
<bean name="/addUserServlet" class="com.servlet.addUserServlet">
<property name="dataSource" ref="dataSource"></property>
<property name="userManager" ref="userManager"></property>
</bean>
===============================================
addUserServlet是在web.xml配置的, 一个请求过来, 是由JSP容器初始化了这个servlet, 所以执行的servlet跟spring配置的那个servlet没点关系, 自然就空指针了呵呵。
那应该怎样修改呢?望指教!!谢谢
<servlet>
<servlet-name>addUserServlet</servlet-name>
<servlet-class>
com.servlet.addUserServlet
</servlet-class>
...
</servlet> <servlet-mapping>
...
</servlet-mapping>
这些信息吧。
我是刚学java的,根据7楼的回答理解的,不知道答的对不对,继续学习ing
<property name="dataSource" ref="dataSource"></property>
<property name="userManager" ref="userManager"></property>
</bean>
name="/addUserServlet"把这个换为userManagerNew,然后在Servet里面private UserManager userManagerNew生成set,get方法
dataSource.getConnection()和userManager.addUser()就报空指针异常。在servlet中输出一下System.out.println(userManagerImpl)值是null
我又研究了一下,不是没有注入进来,而是根本就没有调用这个bean
<bean name="/addUserServlet" class="com.servlet.addUserServlet">
<property name="dataSource" ref="dataSource"></property>
<property name="userManager" ref="userManager"></property>
</bean>
如下调用代码:
ApplicationContext ctx = new ClassPathXmlApplicationContex("applicationContext.xml");
.... ctx.getBean("XXX");
ApplicationContext ctx = new ClassPathXmlApplicationContex("applicationContext.xml"); IManager manager = (IManager) ctx.getBean("add");
<!-- 配置连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/assignment</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<!-- Servlet中配置UserManager -->
<bean id="userManager" class="com.dao.impl.UserManagerImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 楼主这样注入daSource才有效!!-->
<bean name="/addUserServlet" class="com.servlet.addUserServlet">
<property name="userManager" ref="userManager"></property>
</bean>
我已经在web.xml中将Spring的配置文件load到内存中了,当我访问/addUserServlet的时候应该会为我注入相关类啊。大伙再帮着想想,我都快疯了呀。。
你引用是引用web.xml的servlet的<url-pattern>。 你是将servlet注入到了spring,但是没用调用servlet的类,怎么行。只有struts中的action才能由spring托管,且不用调用
ApplicationContext ctx = new ClassPathXmlApplicationConte("applicationContext.xml");
.... ctx.getBean("XXX");
我是这个意思 不知道有没有办法能像struts那样由spring来生成代理 但是这个肯定不行