共同點: 它們都是表現層框架,都是基於MVC模型編寫的。 它們的底層都離不開原始ServletAPI。 它們處理請求的機制都是一個核心控制器。 區別: SpringMVC的入口是Servlet,而struts2是Filter SpringMVC是基於方法設計的,而Struts2是基於類的,Struts2每次執行都會建立一個動做類。因此SpringMVC比Struts2稍微快些。 SpringMVC使用更加簡潔,同時還支持JSR303,處理ajax請求更加方便。 Struts2的OGNL表達式使頁面的開發效率比springMVc更高些,但執行效率並無比JSTL提高,尤爲是Struts2的表單標籤,遠沒有html執行效率高。
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置核心控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加載配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--web應用程序啓動的時候就加載這個servlet,(實例化並調用其init()方法)-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" 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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--開啓註解掃描-->
<context:component-scan base-package="com.llb"/>
<!--視圖解析器:跳轉到指定頁面-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--開啓springmvc框架的註解支持-->
<mvc:annotation-driven conversion-service="conversionService"/>
</beans>
package com.llb.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * 控制器類 * Ceate By llb on 2019/8/12 */ @Controller @RequestMapping("/user") public class HelloController { @RequestMapping("/hello") public String sayHello(){ System.out.println("Hello World!"); return "success"; } }
1.服務器啓動,應用被加載。讀取到web.xml中的配置建立spring容器而且初始化容器中的對象。
2.瀏覽器發送請求,被DispatherServlet捕獲,該servlet並不處理請求,而是把請求轉發出去。轉發的路徑是根據請求URL,匹配@RequestMappering中的內容。
3.匹配到了後,執行對應的方法。該方法有個返回值。
4.根據方法的返回值,藉助InternalResourceViewResolver找到對應的結果視圖。
5.渲染結果視圖,響應瀏覽器
用戶請求到達前端控制器,它就至關於 mvc 模式中的 c,dispatcherServlet 是整個流程控制的中心,由它調用其它組件處理用戶的請求,dispatcherServlet 的存在下降了組件之間的耦合性。
HanderMapping負責根據用戶請求找到Handler,即處理器,SpringMVC提供了不一樣的映射器實現不一樣的映射方式。例如:配置文件方式,實現接口方式,註解方式等。
它就是開發中要編寫的具體業務控制器。由DispatcherServlet把用戶請求轉發到Handler。由Handler對具體的用戶請求進行處理。
經過 HandlerAdapter 對處理器進行執行,這是適配器模式的應用,經過擴展適配器能夠對更多類型的處理器進行執行。
View Resolver 負責將處理結果生成 View 視圖,View Resolver 首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成 View 視圖對象,最後對 View 進行渲染將處理結果經過頁面展現給用戶。
SpringMVC 框架提供了不少的 View 視圖類型的支持,包括:jstlView、freemarkerView、pdfView等。咱們最經常使用的視圖就是 jsp。通常狀況下須要經過頁面標籤或頁面模版技術將模型數據經過頁面展現給用戶,須要由程序員根據業務需求開發具體的頁面。
github:https://github.com/PopsiCola/SSM-SpringMVC/tree/SpringMVC_Starthtml
CSDN:https://blog.csdn.net/weixin_44982675/article/details/99537041前端