Spring MVC 使用 JNDI 配置的DataSource

稍微看了下,Spring 中JNDI 的使用,弄了個小例子。有不少不完備的地方,之後慢慢看,再改吧。html

<一> 技術使用

  • Spring MVC前端

  • JDBC Templatejava

  • Maven
    mysql

  • JNDIweb


<二> 一些配置

  1. Maven POM 配置spring

    1. spring-context、spring-webmvc、spring-orm、spring-jdbc、mysql-connector-java等
      sql

  2. 建立數據庫數據庫

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 數據源
tomcat

也能夠在其它地方配置,好比web.xml 中配置。這個配置,是爲了JNDI 可以查找到該數據源。mvc

<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。


<三>Java 開發

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>


<四> 效果以下

一個簡陋的頁面以下:

相關文章
相關標籤/搜索