一、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;
}