以下示例基于Spring:
1、在Mysql中建立Spring数据库,数据库中建立user表
2、在tomcat目录下conf\context.xml中的<Context>标签中加入
<Resource name="jndi"
auth="Container"
type="javax.sql.DataSource"
password="mysql5"
username="root"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/spring"
maxActive="5"
maxIdle="2"
maxWait="3000"
/>
3、修改项目的web.xml文件,加入
<resource-ref>
<res-ref-name>jndi</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4、在spring配置文件中配置Datasource
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jndi"/>
</bean>
我们也可以采用下面的方式,但是要加入以下命名空间 :
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
<!-- Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。 -->
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jndi"/>
User.java
package cn.nevo.model;
import org.springframework.stereotype.Component;
/**
* Entity
* @author Administrator
*
*/
@Component("user")
public class User {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
UserDao.java
package cn.nevo.dao;
import cn.nevo.model.User;
public interface UserDao {
public void save(User user);
}
UserDaoImpl.java
package cn.nevo.dao.impl;
import java.sql.Connection;
import java.sql.SQLException;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.stereotype.Component;
import cn.nevo.dao.UserDao;
import cn.nevo.model.User;
@Component("userDao")
public class UserDaoImpl implements UserDao {
private DataSource dataSource;
public DataSource getDataSource() {
return dataSource;
}
//默认是by name注入
@Resource
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
System.out.println(dataSource);
}
public void save(User user) {
Connection conn = null;
try {
conn = dataSource.getConnection();
conn.createStatement().executeUpdate("insert into user values (null, '" +user.getUsername()+"')");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.println("user saved!");
}
}
UserService.java
package cn.nevo.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import cn.nevo.dao.UserDao;
import cn.nevo.model.User;
@Component("userService")
public class UserService {
private UserDao userDao;
public UserDao getUserDAO() {
return userDao;
}
@Resource(name = "userDao")
public void setUserDAO(UserDao userDao) {
this.userDao = userDao;
}
public void add(User user) {
userDao.save(user);
}
}
LoginServlet.java
package cn.nevo.servlet;
import java.io.IOException;
import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.nevo.model.User;
import cn.nevo.service.UserService;
@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet {
private User user;
public User getUser() {
return user;
}
@Resource
public void setUser(User user) {
this.user = user;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
user.setUsername(request.getParameter("username"));
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
UserService userService = (UserService)ctx.getBean("userService");
userService.add(user);
}
}
bean.xml
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
<!--
隐式注册 post-processors 包括了
AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,
也包括了前面提到的 RequiredAnnotationBeanPostProcessor。处理我们配置的annotation
-->
<context:annotation-config />
<!--
要检测这些类并注册相应的bean,需要在XML中包含以下元素,其中'basePackage'是类的公共父包
(或者可以用逗号分隔的列表来分别指定包含各个类的包)。
-->
<context:component-scan base-package="cn.nevo" />
<!-- 从Tomcat配置的JNDI服务获取数据源-->
<!--
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jndi"/>
</bean>
-->
<!-- Spring 2.0为获取J2EE资源提供了一个jee命名空间,通过jee命名空间,可以有效地简化J2EE资源的引用。 -->
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jndi"/>
</beans>
index.jsp
<body>
<form action="loginServlet" method="post">
UserName:<input type="text" name="username">
<input type="submit" value="Login">
</form>
</body>