源码下载:http://download.csdn.NET/detail/u010469432/6786687
https://blog.csdn.net/u010469432/article/details/17587699
先说一下Spring3 MVC的优点:
spring MVC 属于轻量级框架
1、Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。
2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
3、Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。
对于SpringMVC的一些文档型理论知识我不再多加赘述,今天主要是一步一步的开始搭建框架,当然这是我工作中的成果。
不多说,上代码:
1.创建Web project,我使用的是myeclipse。起名为Springmvc(名字自定)
2.引用SpringMVC 需要的核心jar包:
3.配置web.xml文件
[html] view plain copy
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:config/spring-*.xml
login.jsp
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath*:config/springmvc.xml
1
springmvc
/service/*
4.配置Spring.xml文件,此文件的名称必须与web.xml中的servlet-name名称一致。
[html] view plain copy
text/plain;charset=UTF-8
5.配置数据库读取文件jdbc.properties放在类文件夹src下我这里加载的是SqlServer数据库
[html] view plain copy
driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver //连接的数据库
url=jdbc:sqlserver://127.0.0.1:1433; DatabaseName=renji
username=sa
password=admin
6.配置数据库相关的文件
spring-application.xml(文件名称可以自定义,但是需要在web.xml文件中加载这里即对应web.xml中的)
[html] view plain copy
7.数据库操作类:DbUtilsTemplate.Java这是我封装好的工具类直接使用就可以了。
[html] view plain copy
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DbUtilsTemplate {
private DataSource dataSource;
private QueryRunner queryRunner;
private static final Log LOG = LogFactory.getLog(DbUtilsTemplate.class);
public void setDataSource(BasicDataSource dataSource) {
this.dataSource = dataSource;
}
/**
* 执行sql语句
* @param sql sql语句
* @return 受影响的行数
*/
public int update(String sql) {
return update(sql, null);
}
/**
* 执行sql语句
*
* executeUpdate("update user set username = 'kitty' where username = ?", "hello kitty");
*
* @param sql sql语句
* @param param 参数
* @return 受影响的行数
*/
public int update(String sql, Object param) {
return update(sql, new Object[] { param });
}
/**
* 执行sql语句
* @param sql sql语句
* @param params 参数数组
* @return 受影响的行数
*/
public int update(String sql, Object[] params) {
queryRunner = new QueryRunner(dataSource,true);
int affectedRows = 0;
try {
if (params == null) {
affectedRows = queryRunner.update(sql);
} else {
affectedRows = queryRunner.update(sql, params);
}
} catch (SQLException e) {
LOG.error("Error occured while attempting to update data", e);
}
return affectedRows;
}
/**
* 执行批量sql语句
* @param sql sql语句
* @param params 二维参数数组
* @return 受影响的行数的数组
*/
public int[] batchUpdate(String sql, Object[][] params) {
queryRunner = new QueryRunner(dataSource,true);
int[] affectedRows = new int[0];
try {
affectedRows = queryRunner.batch(sql, params);
} catch (SQLException e) {
LOG.error("Error occured while attempting to batch update data", e);
}
return affectedRows;
}
/**
* 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中
* @param sql sql语句
* @return 查询结果
*/
public List
8。到此为止,框架已经搭建成功了,可以启动一下项目,
启动成功!
下面我写个测试例子大家看一下:
我的项目是写成了三层分开的架构,控制层(Controller),服务层接口(Service),服务层实现类(ServiceImpl),数据库操作接口(Dao),数据库操作实现类(DaoImpl).
1.login页面:
[html] view plain copy
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
">
2.Controller(控制)层的代码:AdminController.java
[html] view plain copy
package com.yfapp.platform.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.yfapp.platform.entity.Admin;
import com.yfapp.platform.service.AdminService;
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminService adminService;
/**
* 管理员登陆
* @param admin 登陆传入的用户对象
* @return String 要跳转到的页面
*/
@RequestMapping(value = "/login")
public String login(HttpServletRequest request, HttpServletResponse response, Admin admin) throws Throwable {
Admin ad =new Admin();
if(null!=admin.getAdminPwd()||null!=admin.getAdminCode()){
ad = adminService.login(admin);
}else{
ad=null;
}
if (null != ad) {
request.getSession().setAttribute("admin", ad);
return "/indexhome";
} else {
request.setAttribute("imgs", "请重新登录!");
return "/login";
}
}
}
3.服务层接口:AdminService.java 以及 服务层实现类AdminServiceImpl.java
[html] view plain copy
package com.yfapp.platform.service;
import com.yfapp.platform.entity.Admin;
public interface AdminService{
//登陆
Admin login(Admin admin);
}
[html] view plain copy
package com.yfapp.platform.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yfapp.platform.dao.AdminDao;
import com.yfapp.platform.entity.Admin;
import com.yfapp.platform.service.AdminService;
@Service("adminService")
public class AdminServiceImpl implements AdminService{
@Autowired
private AdminDao adminDao;
/**
* 登陆
*/
public Admin login(Admin admin){
return adminDao.login(admin);
}
}
4.数据库操作接口类 BaseDao.java 和 AdminDao.java
BaseDao.java是基础的操作类,这里面可以将写一些基本的数据库操作方法比如增删改查,我这里就不写了,写这个主要是映射数据库连接,创建连接池。
AdminDao.java是功能模块的接口类,如果你要写别的模块的时候只需要想AdminDao一样继承BaseDao就行,当然如果不需要BaseDao 也可以不写BaseDao,这样写只是应用了java的思想。使用了泛型。
[html] view plain copy
package com.yfapp.platform.dao;
import java.io.Serializable;
public interface BaseDao {
}
[html] view plain copy
package com.yfapp.platform.dao;
import com.yfapp.platform.entity.Admin;
public interface AdminDao extends BaseDao{
// 登陆
Admin login(Admin admin);
}
5.数据库操作接口实现类 BaseDaoImpl.java 和 AdminDaoImpl.java
[html] view plain copy
package com.yfapp.platform.dao.impl;
import java.io.Serializable;
import org.springframework.beans.factory.annotation.Autowired;
import com.yfapp.platform.dao.BaseDao;
import com.yfapp.platform.dao.template.DbUtilsTemplate;
public class BaseDaoImpl implements BaseDao
{ //这个是之前说的数据库操作帮助类,使用注解的方式,此变量在spring-application.xml中注入值。
@Autowired
protected DbUtilsTemplate dbUtilsTemplate;
}
[html] view plain copy
package com.yfapp.platform.dao.impl;
import org.springframework.stereotype.Repository;
import com.yfapp.platform.dao.AdminDao;
import com.yfapp.platform.entity.Admin;
@Repository
public class AdminDaoImpl extends BaseDaoImpl implements AdminDao {
/**
* 管理员登陆
*/
public Admin login(Admin admin) {
String sql="select adminCode,adminPwd,loginTime from yf_admin where adminCode=? and adminPwd=?";
Object[] params = { admin.getAdminCode(),admin.getAdminPwd() };
Admin ad = dbUtilsTemplate.queryFirst(Admin.class, sql, params);
return ad;
}
}
6。我的测试数据库表结构,使用的是SqlServer:
7.登陆成功要跳转的页面:indexhome.jsp
[html] view plain copy
<%@page import="com.yfapp.platform.entity.Admin"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
Admin admin = (Admin) request.getSession().getAttribute("admin");
%>
">
欢迎您:<%=admin.getAdminCode()%>|上次登录时间:<%=admin.getLoginTime()%>
|今天是:
8.重新运行项目:
测试结果:
在浏览器中访问 http://localhost:8080/Springmvc/
点击登陆:
完了!
源码下载:http://download.csdn.net/detail/u010469432/6786687
xml配置文件中配置如下:
classpath:conf/jdbc.properties
jdbc.properties配置文件中连接数据库配置:
#sqlserver数据源配置
jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://192.168.1.60:1408;DatabaseName=test
jdbc.username=sa
jdbc.password=1
#mysql数据源配置
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.60:3306/test
jdbc.username=root
jdbc.password=root
#Oracle数据源配置
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@10.60.17.9:1521:orcl
jdbc.username=admin
jdbc.password=admin