三层结构
使用java开发web项目常采用三层结构,即控制层(controller)、业务层(service)和数据访问层(dao)三层,spring框架对于这三层结构的每一层都有相应解决方案,即下图
相对应控制层的SpringMVC,个人理解:MVC即model、view和controller,model是指实体类,view指前端页面(常用jsp),controller便是处理前端请求并执行相应操作的类,而springMVC便是交由spring统一管理的MVC。
业务层用于整合具体实现功能的dao层方法及其他业务。
数据访问层的功能通过jdbcTemplate和Mybatis来实现对数据库的增删改查等操作,该层实现的都是用于操作数据库的最基础的方法,实现这些基础方法后往上向业务层提供方法。
配置文件
配置文件通常有三个,分别是web.xml、applicationContext.xml和springmvc-config.xml。
web.xml:用于配置以下两个配置文件及其他全局设置。有客户端请求时第一个访问的就是该文件。
applicationContext.xml:用于业务逻辑组件、数据访问组件的IOC配置。除此之外呢,还包括数据源dataSource、session工厂sqlSessionFactory、事务管理trasactionManager等的配置。
springmvc-config.xml:该文件同样可用于配置控制器Controller扫描器,除此之外还包括视图解析器、文件上传等配置内容。
访问过程
当客户端对发出末尾为*.do的请求时(此处以toLogin.do为例),首先访问web.xml
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
<!-- /拦截所有的请求,*.do拦截访问请求地址后缀是.do的 -->
</servlet-mapping>
Web.xml发现请求以do结尾,于是进行拦截并找到合适的controller,此处找到了UserController
@RequestMapping("/user")
@Controller
public class UserController {
@RequestMapping("/toLogin.do")
public String toLogin(){
return "login";
}
}
UserController类对于该请求做出了调用toLogin方法的处理,返回了字符串“login”,又因在springmvc-config.xml配置了视图解析器
<!-- 配置视图解释器ViewResolver -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
于是“login”加上了前缀/WEB-INF/jsp/和后缀.jsp,“增胖后”的login变成了“/WEB-INF/jsp/login.jsp”,于是spring按照该路径找到了该jsp页面并返回给了客户端。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
66666
</body>
</html>
于是出现了下图
注:本人是编程初学者,文章或有错误,欢迎指正。