Java 自动接线不工作
请帮我纠正这个错误,我是春天的新手 这是堆栈跟踪:Java 自动接线不工作,java,spring,spring-mvc,Java,Spring,Spring Mvc,请帮我纠正这个错误,我是春天的新手 这是堆栈跟踪: 12:23:16,350 ERROR [STDERR] java.lang.NullPointerException 12:23:16,351 ERROR [STDERR] at igate.service.ProgramsOfferedServiceImpl.retrievePrograms(ProgramsOfferedServiceImpl.java:39) 12:23:16,351 ERROR [STDERR]
12:23:16,350 ERROR [STDERR] java.lang.NullPointerException
12:23:16,351 ERROR [STDERR] at igate.service.ProgramsOfferedServiceImpl.retrievePrograms(ProgramsOfferedServiceImpl.java:39)
12:23:16,351 ERROR [STDERR] at org.apache.jsp.programs_jsp._jspService(programs_jsp.java:118)
12:23:16,351 ERROR [STDERR] at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
12:23:16,351 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
12:23:16,351 ERROR [STDERR] at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:387)
12:23:16,351 ERROR [STDERR] at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
12:23:16,351 ERROR [STDERR] at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
12:23:16,351 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:687)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
12:23:16,351 ERROR [STDERR] at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
12:23:16,351 ERROR [STDERR] at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
12:23:16,351 ERROR [STDERR] at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
12:23:16,351 ERROR [STDERR] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
12:23:16,351 ERROR [STDERR] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
12:23:16,351 ERROR [STDERR] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
12:23:16,351 ERROR [STDERR] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
12:23:16,351 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
12:23:16,351 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
12:23:16,351 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
12:23:16,351 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
12:23:16,351 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
12:23:16,351 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
12:23:16,352 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
12:23:16,352 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
12:23:16,352 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
12:23:16,352 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
12:23:16,352 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
12:23:16,352 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
12:23:16,352 ERROR [STDERR] at java.lang.Thread.run(Unknown Source)
这是数据访问的代码:
package igate.dao;
import java.sql.*;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
import igate.dto.ProgramsOffered;
@Component
public class ProgramsOfferedDataAccessImpl implements ProgramsOfferedDataAccess
{
@Autowired
JdbcTemplate template;
public ProgramsOfferedDataAccessImpl() {
// TODO Auto-generated constructor stub
System.out.println("inside programs offered");
}
@Override
public boolean DeleteProgramsOffered(String name)throws SQLException
{
boolean rowsAffected = false;
String delete = "DELETE FROM programs_offered WHERE program_name='"+name+"'";
int r = template.update(delete);
if(r>0)
rowsAffected=true;
return rowsAffected;
}
@Override
public ArrayList<ProgramsOffered> retrievePrograms()
{
RowMapper<ProgramsOffered> row = new RowMapper<ProgramsOffered>()
{
@Override
public ProgramsOffered mapRow(ResultSet rs, int arg1) throws SQLException
{
ProgramsOffered po = new ProgramsOffered();
po.setProgramName(rs.getString(1));
po.setDescription(rs.getString(2));
po.setApplicantEligibility(rs.getString(3));
po.setDuration(rs.getInt(4));
po.setDegreeCertificateOffered(rs.getString(5));
return po;
}
};
String sql = "select * from programs_offered";
System.out.println(template);
return (ArrayList<ProgramsOffered>)template.query(sql, row);
}
@Override
public boolean insertProgram(ProgramsOffered po)
{
boolean rowsAffected = false;
String insert = "insert into programs_offered values(?,?,?,?,?)";
int r = template.update(insert);
if(r>0)
rowsAffected=true;
return rowsAffected;
}
@Override
public boolean updateProgram(String progName, String colName, String newValue)
{
return false;
}
@Override
public boolean updateProgram(String progName, String colName, int newValue)
{
return false;
}
public JdbcTemplate getTemplate()
{
return template;
}
public void setTemplate(JdbcTemplate template)
{
this.template = template;
}
}
我在这一行收到一个空指针异常:
ArrayList al=poda.retrievePrograms()代码>
您没有poda的setter和getter。如果没有setters和getter,Spring就无法自动连线您的applicationContext.xml(或dispatcher servlet.xml)是否包含以下行:
<!-- Use annotation based configuration (e.g. @Service, @Component etc.) -->
<context:annotation-config/>
<!-- Autowire beans -->
<context:component-scan base-package="igate.service"/>
添加的setter和getter在ArrayList al=poda.retrievePrograms()处仍出现错误;我已经添加了我的context.xml,您从何处调用此方法?从stacktrace判断,您正试图从JSP调用您的服务。根据这一点判断,您正在JSP中自己构造一个实例,并且希望Spring自动连接该实例,您应该使用applicationcontext中的实例。或者最好不要在视图层中执行类似的操作,这应该留给(@)控制器。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<mvc:annotation-driven />
<context:annotation-config/>
<context:component-scan base-package="igate.dto" />
<context:component-scan base-package="igate.dao" />
<context:component-scan base-package="igate.service" />
<context:component-scan base-package="igate.controller" />
<context:component-scan base-package="igate.logs" />
<context:component-scan base-package="igate.testcases" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp" />
</bean>
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@172.21.17.5:1521:oraten" />
<property name="username" value="lab01trg21" />
<property name="password" value="lab01oracle" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"/>
</bean>
</beans>
<!-- Use annotation based configuration (e.g. @Service, @Component etc.) -->
<context:annotation-config/>
<!-- Autowire beans -->
<context:component-scan base-package="igate.service"/>