您的位置:首页 > 编程语言 > Java开发

springMVC 注入对象失败

2017-10-17 14:45 483 查看
最近有空想学着自己搭建一个SpringMVC的项目,因为之前都没咋学习相关的知识,所以在搭建过程中遇到了很多问题,其中第一问题就折腾了我好长时间,现在把它记录下来。
我是跟着这个博客开始进行搭建的,http://jinnianshilongnian.iteye.com/blog/1594806
1、下载所需的包
spring相关的jar包,可以从这个网址进行下载 :http://repo.spring.io/release/org/springframework/spring/
需要添加Apache commons logging日志,下载网址:http://commons.apache.org/proper/commons-logging/download_logging.cgi
需要添加jstl标签库支持,下载网址(这个下载的时候需要看清楚,容易下错):http://www.downcc.com/soft/35705.html

2、就开始跟着博客配置环境,具体怎么配置,那个博客里边写的很清楚,我就只截一下我配置好了之后的图。
web.xml


servlet.xml的配置



controller



hello.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
${message}
</body>
</html>

我的页面上也显示出了"hello world"的信息,表明我配置成功了。
但是 这只是个简单的页面跳转,我希望能够将数据库连接起来,最简单的就是使用 spring的jdbcTempate,又是一通百度,开始进行配置。

我使用的是mySQL数据库




连接数据库的jar包:

mysql-connector-java-5.1.30-bin.jar
实体类:
public class Student extends JdbcDaoSupport {

private String sno;

private String sname;

private String ssex;

private String sbirthday;

private String sclass;

public String getSno() {
return sno;
}

public void setSno(String sno) {
this.sno = sno;
}

public String getSname() {
return sname;
}

public void setSname(String sname) {
this.sname = sname;
}

public String getSsex() {
return ssex;
}

public void setSsex(String ssex) {
this.ssex = ssex;
}

public String getSbirthday() {
return sbirthday;
}

public void setSbirthday(String sbirthday) {
this.sbirthday = sbirthday;
}

public String getSclass() {
return sclass;
}

public void setSclass(String sclass) {
this.sclass = sclass;
}
}

Dao
public class StudentDao{

private JdbcTemplate jdbcTemplate;

public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

public Collection<Student> doquery() {
String sql = "SELECT SNO,SNAME,SSEX,SBIRTHDAY,CLASS FROM student";
return jdbcTemplate.query(sql, new RowMapper() {

public Object mapRow(ResultSet rs, int num) throws SQLException {
Student stu = new Student();
stu.setSno(rs.getString("SNO"));
stu.setSname(rs.getString("SNAME"));
stu.setSsex(rs.getString("SSEX"));
stu.setSbirthday(rs.getString("SBIRTHDAY"));
stu.setSclass(rs.getString("CLASS"));
return stu;
}
});
}
}

controller
public class HelloWorldController implements Controller {

private StudentDao studentDao;

public StudentDao getStudentDao() {
return studentDao;
}

public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}

@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
ModelAndView mv = new ModelAndView();
Collection<Student>  stuList =  studentDao.doquery();
mv.addObject("stuList", stuList);
mv.setViewName("hello");
return mv;
}
}

需要在servlet.xml中添加配置
<!-- 获取数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>

<!-- jdbc注入 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>

<!-- dao注入 -->
<bean id="studentDao" class="cn.javass.chapter2.dao.StudentDao">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate"></ref>
</property>
</bean>
<!--定义控制器-->
<bean id="helloController" class="cn.javass.chapter2.controller.HelloWorldController">
<property name="studentDao">
<ref bean="studentDao"/>
</property>
</bean>

配完之后 运行,结果报空指针,debug一看,发现是我的Controller里面的studentDao没有注入成功,一直为空,我是左看右看啊,感觉都配对了,但是就是没有注入进去。然后我就用ClassPathXmlApplicationContext 的方式,加载 了一下我的配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-mvc.xml");
context.start();
HelloWorldController hController =  (HelloWorldController) context.getBean("helloController");

发现这个Controller里面的studentDao成功注入了,这证明我写是没有写错,是哪里配置错了。后来发现是因为



解决方式,上面那个就不用了,直接删掉,下面那配置上studentDao.



运行结果:



一路百度,不容易啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring