SpringMVC
1、前言-關於SpringMVC
MVC是一種軟件設計的架構,將軟件分爲三層
M(Model):模型層,用於封裝數據
V(View):視圖層(表現層),是一般的HTML或jsp頁面
C(Controller):控制層,用作處理數據,返回結果.相當於servlet
SpringMVC是基於Spring框架實現了web mvc設計模式的輕量級web框架。藉助於註解,Spring MVC提供了幾乎是POJO的開發模式,使得控制器的開發和測試更加簡單。
2、SpringMVC的核心組件
1、DispatcherServlet
前端控制器,核心,用作連接其他的組件,完成任務的分發與分配。
2、HandlerMapping
url處理映射,接收url ,根據不同的配置方式交給不同的Controller來處理。它有三種配置:
1 BeanNameUrlHandlerMapping
功能:尋找Controller
根據url請求去匹配bean的name屬性,從而獲取Controller
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean name="/user.do" class="com.ldy.backOffice.web.controller.UserController"/>
2 SimpleUrlHandlerMapping
功能:尋找Controller
根據瀏覽器url匹配簡單url的key,key就是Controller的id找到Controller
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/user1.do">userC</prop>
</props>
</property>
</bean>
<bean id="userC" class="com.ldy.backOffice.web.controller.UserController"/>
3 ControllerClassNameHandlerMapping
功能:尋找Controller
根據類名(MyController)類名.do來訪問,類名首字母小寫
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean class="com.ldy.backOffice.web.controller.UserController"/>
3、HandlerAdapter
控制器處理適配器,配置Controller的執行方式,它有兩種配置:
1 SimpleControllerHandlerAdapter
功能:執行controller(控制器)
調用實現controller接口的控制器中的public ModelAndView handleRequest(...)方法,返回modelAndView
2 HttpRequestHandlerAdapter
功能: 執行controller
調用實現HttpRequestHandler接口的控制器中的public void handleRequest(...)方法,無返回值.
注意: 該兩種配置可以共存
4、Controller
控制器 相當於配置了Controller的訪問路徑,有三個屬性
id :配合SimpleUrlHandlerMapping url處理映射來找到真正的Controller類
name :配合BeanNameUrlHandlerMapping url處理映射來找到真正的Controller類
class :引用Controller全類名
5、InternalResourceViewResolver
前端資源視圖解析器
進行視圖解析,根據邏輯視圖名解析成真正的視圖View
ViewResolver會根據配置將處理結果生成View視圖(HTML,jsp頁面等),展示給用戶。其中ViewResover有幾個屬性
prefix:前綴
suffix:後綴
SpringMVC的執行流程大致如下:
3、HelloSpringMVC-入門案例
XML配置
1、創建項目,導入jar包
如下的jar包有些可以不需要,可以根據項目酌情導入
2、在web.xml配置DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>spring_mvc_annotation</display-name>
<servlet>
<servlet-name>spring_mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring_mvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>\此處注意\/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
</web-app>
3、在WEB-INF目錄下創建xxx-servlet.xml
根據web.xml配置的名稱來創建xxx.servlet.xml文件
引入頭文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
</beans>
4、配置xxx-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--1 配置url處理映射-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--2 配置控制器處理適配器-->
<bean class="org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter"/>
<!--3 配置控制器 相當於配置了訪問路徑-->
<bean name="/user.do" class="com.ldy.backOffice.web.controller.UserController"/>
<!--4 配置資源視圖的解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前綴-->
<property name="prefix" value="/WEB-INF/view/"/>
<!--後綴-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
5、創建Controller控制器
package com.ldy.backOffice.web.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserAddController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mav = new ModelAndView("user/useradd");
return mav;
}
}
注意導入JavaEE的包
6、創建一個hello.jsp頁面
注意根據配置的文件來創建目錄
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>${name}</h2>
</body>
</html>
7、運行項目,訪問路徑
Annotation方式
創建項目,
導入jar包,
編寫web.xml文件與xml方式無異
1、配置xxx-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mvc:annotation-driven/>
<!-- 1.配置掃描包-->
<context:component-scan base-package="com.ldy.backOffice.web.controller"/>
<!-- 2.配置註解處理映射-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 3.配置適配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</property>
</bean>
<!-- 4.配置資源視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
2、編寫Controller
註解詳解
@Controller: 相當於在spring中配置了<bean class="控制器的路徑"/>
@RequestMapping: 指定請求的實際url
@Pathariable: {}裏面參數注入後面參數裏面
@RequestParam: 參數描述