搭建SpringMVC框架示例详解

这里有一个简单的SpringMVC框架的示例,所需要环境:Eclipse已配置好Spring框架,以及准备好SpringMVC框架所需jar包

一、新建一个Web项目

  1. 新建一个Dynamic Web Project,版本选择2.5(注:创建项目时,默认选择的是3.0,而3.0版本的Web项目没有web.xml文件可供配置,而是将web.xml的功能整合到了注释中,对初学者比较麻烦)
  2. 在Java Resources文件夹中删除src文件夹,新建下图所示四个资源文件夹:
    搭建SpringMVC框架示例详解
  3. 拷入如图所示的jar包:
    搭建SpringMVC框架示例详解
    新建Web项目的工作已经完成。

二、配置文件

  1. 打开web.xml文件,删去无用代码,创建Spring容器并向其中添加对象。
    搭建SpringMVC框架示例详解
  2. 在src/main/resource中创建一个名字为application.xml的Spring Bean Configuration File文件
    搭建SpringMVC框架示例详解
  3. 在application.xml的页面下方点击namespace进行如下勾选:
    搭建SpringMVC框架示例详解
  4. 在application.xml中配置扫描器和调用默认servlet的代码:
    搭建SpringMVC框架示例详解
    对以上操作的解释:
    1. src/test/java、src/test/resource、src/main/java、src/main/resource这四个文件夹的作用:
      src/test/java:存放测试代码
      src/test/resource:存放测试资源文件
      src/main/java:存放源程序核心代码
      src/main/resource:存放源程序资源文件

    2. web.xml文件配置的说明:

      1. DispatcherServlet路径名
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        的由来:
        右击如下所示的DispatcherServlet文件,选择Copy Qualified Name,即可将其全名放入剪切板中。
        搭建SpringMVC框架示例详解
      2. 这段代码写在DispatcherServlet中,它意味着Tomcat启动时此Servlet调用init()方法,加载application.xml,产生一个Spring容器,并且开始扫描,将对象放入容器中。
        搭建SpringMVC框架示例详解
      3. 这段代码代表在服务器启动时创建Servlet对象。
        搭建SpringMVC框架示例详解
      4. 加上"/"代表此Servlet拦截所有请求。
        搭建SpringMVC框架示例详解
    3. application.xml文件配置

      1. 这段代码指定base-package开始的包自动实例化,注意:包内类必须添加有 Controller、Service、Component类注解。
        搭建SpringMVC框架示例详解
      2. 这段代码意味着如果请求没有任何一个Controller中的某一个方法处理,则交给Web服务器默认Servlet处理。
        搭建SpringMVC框架示例详解
    4. 整个项目的逻辑

      1. load-on-startup:服务器启动时创建Servlet对象。
      2. 请求被DispacherServlet拦截,并调用init()方法,获取contextConfigLocation变量的值:classpath:application.xml,经过处理调用application.xml文件,创建Spring容器+实例化类。
      3. 若该类中含有@controller注解,则将该类中方法上@RequestMapping中的value值添加到Map集合中
      4. 任何一个请求过来,就与Map集合中的已有的Servlet匹配
      5. 如果在Map集合中没找到,不用等待,就用默认Servlet处理。

三、创建模块

  1. 在src/main/java中添加一个package,名字叫做com.jd.userinfo,在其中添加一个UserInfoCotroller类,代码如图所示:
    搭建SpringMVC框架示例详解
    由于from表单默认调用GET方法,传到后端的数据会以明文形式出现在网址栏中,例:
    搭建SpringMVC框架示例详解
    Post方法可以避免这一情况,所以需要在注解中加上“method=RequestMethod.Post”准备接受Post方法。
  2. 在Web Content/WEB-INF文件夹下新建文件夹view,并新建两个jsp文件:login.jsp和success.jsp
    (因为WEB-INF中存放的数据最安全,只能用请求转发方式访问)
    搭建SpringMVC框架示例详解
    如果报错了可能是因为缺少servlet包,导入jar包即可
  3. 在application.xml文件中写入如下代码:
    搭建SpringMVC框架示例详解
  4. 在WebContent目录下创建一个index.jsp,再在com.jd.index包下创建一个IndexController类
    index.jsp中代码如下
    搭建SpringMVC框架示例详解
    IndexController中代码如下
    搭建SpringMVC框架示例详解
  5. 修改login.jsp中的代码如下:
    搭建SpringMVC框架示例详解
    正如在写UserInfoControl类时说的那样,from表单默认使用的是GET方法,为了不让数据以明文方式传回,特别指明让from表单使用Post方法。
  6. 修改success.jsp使其显示OK

四、搭建框架

  1. 如图所示,创建工具类与数据库连接
  2. 创建userinfo中的Dao层和Service层,实现登陆
  3. 在UserInfoController.java中进行处理
  4. 创建fail.jsp文件,当登录失败时返回的页面
    搭建SpringMVC框架示例详解
  • IUserInfoService 中的代码
package com.jd.userinfo;

public interface IUserinfoService {

	boolean login(String userName, String password);
}

  • UserInfoService 中的代码
package com.jd.userinfo.imp;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jd.userinfo.IUserinfoDao;
import com.jd.userinfo.IUserinfoService;

@Service
public class UserinfoService implements IUserinfoService{

	@Autowired
	private IUserinfoDao userinfoDao;
	
	public boolean login(String userName, String password) {
		return userinfoDao.login(userName, password);
	}

}

  • IUserInfoDao 中的代码
package com.jd.userinfo;

public interface IUserinfoDao {

	boolean login(String userName, String password);
}

  • UserInfoDao 中的代码
package com.jd.userinfo.imp;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.stereotype.Component;

import com.jd.tool.DBTool;
import com.jd.tool.IRowMapper;
import com.jd.userinfo.IUserinfoDao;



@Component
public class UserinfoDao implements IUserinfoDao{

	public boolean login(String userName, String password) {
		String sql = "select * from userinfo where user_name=? and password=?";
		class RowMapper implements IRowMapper{

			boolean state;
			public void rowMapper(ResultSet rs) {
				try {
					if(rs.next()) {
						state = true;
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		RowMapper rowMapper = new RowMapper();
		DBTool.select(sql, rowMapper, userName, password);
		return rowMapper.state;
	}
}

  • UserInfoController中的代码
package com.jd.userinfo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class UserInfoController {
	
	@Autowired
	private IUserinfoService userinfoService;

	@RequestMapping(value="userinfo/login.do", method=RequestMethod.POST)
	public String login(String userName, String password) {
		
		boolean state = userinfoService.login(userName, password);
		if(state) {
			return("success");
		}else {
			return("fail");
		}
		
	}
}