稍微看了下,Spring 中JNDI 的使用,弄了个小例子。有很多不完备的地方,以后慢慢看,再改吧。
Spring MVC
JDBC Template
Maven
JNDI
Maven POM 配置
spring-context、spring-webmvc、spring-orm、spring-jdbc、mysql-connector-java等
创建数据库
create database usersdb; CREATE TABLE `users` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(45) NOT NULL, `password` varchar(45) NOT NULL, `email` varchar(45) NOT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1
3.在Tomcat 中配置JNDI 数据源
也可以在其它地方配置,比如web.xml 中配置。这个配置,是为了JNDI 能够查找到该数据源。
<Resource name="jdbc/UsersDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/usersDB" username="XXX" password="YYY" />
说明:Resource 的name 属性 "jdbc/UserDB" 将会在Spring-MVC 中使用到。
说明:所谓的在tomcat 中配置,可以是在tomcat 的 context.xml 中,添加该Resource entry。
1.Mode, user.java
public class User { private int id; private String username; private String password; private String email; // getter setter }
2.DAO 类
public interface UserDAO { public List<User> list(); }
可以用JDBC Template 实现该数据操作,并作操作扩展。
3. 在Spring MVC 中引入JNDI 数据源
由于我使用的是Spring 4, 我倾向于Java Config 的模式,所以引入JNDI 的方法如下:
@Bean public UserDAO getUserDao() throws NamingException { JndiTemplate jndiTemplate = new JndiTemplate(); DataSource dataSource =(DataSource) jndiTemplate.lookup("java:comp/env/jdbc/UsersDB"); return new UserDAOImpl(dataSource); }
说明 comp/env 这个前缀是有必要的。
4.Controller 类
@Controller public class HomeController { @Autowired private UserDAO userDao; @RequestMapping(value="/") public ModelAndView home() throws IOException{ List<User> listUsers = userDao.list(); ModelAndView model = new ModelAndView("home"); model.addObject("userList", listUsers); return model; } }
5.前端展示部分如下:
<div align="center"> <h1>Contact List</h1> <table border="1"> <th>No</th> <th>Username</th> <th>Email</th> <c:forEach var="user" items="${userList}" varStatus="status"> <tr> <td>${status.index + 1}</td> <td>${user.username}</td> <td>${user.email}</td> </tr> </c:forEach> </table> </div>
一个简陋的页面如下: