SpringMVC架构流程(01)
一、javaEE应用架构:表现层——>控制层——>业务层——>持久层——>领域对象层(Domain Object)——>数据库。
1.表现层(view):jsp、Velocity、FreeMarker、移动端.
2.控制层(controller):Controller.
3.业务层(service):一般的复杂业务逻辑在这层编写.
4.持久层(mapper):(也称为:DAO数据访问层):对数据库的CRUD等原子操作.
5.领域对象层(pojo):一般的POJO.
6.数据库:mysql、oracle等.
二、SpringMVC架构图:
步骤:1、首先在web.xml中配置SpringMVC的前端控制器DispatcherServlet如下:
<!-- 配置Springmvc的前端控制器 :只要配置了请求拦截和指定Springmvc的核心配置文件的位置-->
<servlet>
<servlet-name>springmvc-01</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定了Springmvc的核心配置文件的位置 -->
<!-- 如果没有指定springMvc核心配置文件那么默认会去找/WEB-INF/+<servlet-name>中的内容 + -servlet.xml配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMvc.xml</param-value>
</init-param>
<!-- tomcat启动的时候就去加载这个servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc-01</servlet-name>
<!-- 配置请求拦截的方式 -->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
2、编写SpringMVC核心配置文件:web.xml中SpringMVC的前端控制器中指定了SpringMVC的核心配置文件的位置,
核心配置文件中包括三块内容:(1)、配置注解扫描:扫描带有@Controller、@Service、@repository、@Component的类
(2)、配置注解驱动:替我们自动配置最新版的注解的处理器映射器和处理器适配器。
(3)、配置视图解析器:目的是为了在Controller中指定页面路径的时候就可以不用写页面的完整路径名称了,可以直接写页面去掉扩展名的名称。
<!-- springmvc的核心配置文件 -->
<!-- 配置注解扫描:目的是为了找到类上面带有@Controller的类 -->
<context:component-scan base-package="com.gxyj.controller"></context:component-scan>
<!-- 如果没有显示的配置处理器映射器和处理器适配那么springMvc会去默认的dispatcherServlet.properties中查找
对应的处理器映射器和处理器适配器去使用,这样每个请求都要扫描一次他的默认配置文件,效率非常低,会降低访问速度,所以要显示的配置处理器映射器和
处理器适配器 -->
<!-- 注解形式的处理器映射器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean> -->
<!-- 注解形式的处理器适配器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean> -->
<!-- 配置最新版的注解的处理器映射器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> -->
<!-- 配置最新版的注解的处理器适配器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> -->
<!-- 配置注解驱动:目的是为了替我们自动配置最新版的注解的处理器映射器和处理器适配器 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置视图解析器 :目的是为了在Controller中指定页面路径的时候就可以不用写页面的完整路径名称了,可以直接写页面去掉扩展名的名称-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 真正的页面路径:前缀+去掉页面扩展名的名称+后缀 -->
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!-- 后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
3、定义用户请求的handler类,使用@Controller注解。定义具体的方法。
/*** 如果不加@Controller就是一个普通的bean,加上了才是一个Controller
* @author Administrator
*
*/
@Controller
public class ItemsController {
/**
* 指定url到请求方法的映射
* 在浏览器中输入例如:http://localhost:8080/springmvc-01/list.action
* @return
* @throws Exception
*/
@RequestMapping(value="/list")
public ModelAndView itemsList() throws Exception{
List<Items> itemList = new ArrayList<Items>();
//静态数据
//商品列表
Items items_1 = new Items();
items_1.setName("联想笔记本_3");
items_1.setPrice(6000f);
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemList.add(items_1);
itemList.add(items_2);
/**
* 模型和视图
* model模型:模型对象中存放了返回给页面的数据
* view视图:视图对象中存放了返回页面的位置
*/
ModelAndView modelAndView = new ModelAndView();
//将返回给页面的数据存放入模型和视图对象中
modelAndView.addObject("itemList", itemList);
//将返回给页面的位置存放入模型和视图对象中
modelAndView.setViewName("itemList");
return modelAndView;
}