1. 程式人生 > >spring mvc工作原理解析

spring mvc工作原理解析

springMVC各個元件間工作路線圖:

各個元件解析:

1.前端控制器(DispacterServlet):由spring提供,不需要程式設計師編寫,配置在web.xml檔案中,主要用於接受前臺的請求、請求查詢controller以及向前臺作出響應,它是前臺請求進入後臺和後臺響應前臺的唯一通道。在web.xml中的配置案例如下:

<servlet>
  	<servlet-name>springMvc</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>
</servlet>
  <servlet-mapping>
  	<servlet-name>springMvc</servlet-name>
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>

2.處理器對映器(HandelMapping):它是配置在springMVC-Servlet.xml中的,主要用於接受前端控制器的請求,並通過前端控制器發來的URL進行controller的適配,它的實現有兩種,一種是通過xml配置的方式(xml配置方式又分不同種對映器,其對映風格有所不同),另一種是註解的方式,例如:

①xml配置方式:

<bean id="ItemsController1" name="/query.action" class="mfx.ssm.controller.ItemsController1"/>
 <bean  id="ItemsController2" class="mfx.ssm.controller.ItemsController2"/>
 <bean id="loginController" name="/login.action" class="mfx.ssm.controller.loginController"/>
 <!--處理器對映器 1 -->
 <!--非註解的處理器對映器  -->
 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
 <!--處理器對映器 2 -->
 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="mappings">
	   <props>
	     <prop key="/query1.action">ItemsController1</prop>
	     <prop key="/query2.action">ItemsController1</prop>
	     <prop key="/query3.action">ItemsController2</prop>
	    </props>
   </property>
 
 </bean>

②註解方式

@RequestMapping("/delete")
    public String delete(Model model,HttpServletRequest request){
    	int id=Integer.parseInt(request.getParameter("id"));
    	DateFormat mediumDateFormat = DateFormat.getDateTimeInstance
	       		(DateFormat.MEDIUM,DateFormat.MEDIUM); 
		Date date=new Date();
    	GiveBooks giveBooks =new GiveBooks();
    	Books book=new Books();
    	book=bookService.selectById(id);
    	giveBooks.setName(book.getName());
    	giveBooks.setPhoneNum(book.getPhoneNum());
    	giveBooks.setMoney(book.getMoney());
    	giveBooks.setGiveTime(mediumDateFormat.format(date));
    	giveBooks.setType(book.getType());
    	bookService.insertIntoGive(giveBooks);
    	bookService.delete(id);
    	return check(model);
    }

3.處理器介面卡(HandlerAdapter):配置在springMVC-Servlet.xml中,用於執行controller,處理器介面卡大體分為兩種,xml配置型(又可以分為多種型別)和註解型,通常不同的處理器介面卡所要求的controller的實現方法是不同的,比如下邊的處理器介面卡要求相應的controller實現Controller介面,只有滿足要求它才能正確執行,例如:

①xml配置型

<!-- 處理器介面卡1 
 所有處理器介面卡都實現Controller介面
 -->
 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

controller:

public class loginController implements Controller{
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String name=request.getParameter("name");
		String password=request.getParameter("password");
		AbstractApplicationContext context =new ClassPathXmlApplicationContext("application-servicel.xml");
		loginService ps1=(loginService) context.getBean("loginService");
		person pBeans=new person();
		pBeans=ps1.loginPersons(name,password);
		ModelAndView modelAndView =new ModelAndView();
		//相當於setAttribute方法,在jsp中通過itemList進行獲取
		modelAndView .setViewName("/WEB-INF/jsp/welcom.jsp");
		return modelAndView;
	}
	
	
}

這個型別的介面卡需要controller類實現Controller介面

②註解型:

@Controller
@RequestMapping("/books")
public class BooksController {
    
    @Resource
   BookService bookService;//沒有用new建立物件,是因為是由spring容器管理的
    /*@Autowired是預設按照型別裝配的 @Resource預設是按照名稱裝配的*/
    /*
     * 產品列表與分頁Action
     */
    @RequestMapping("/insert")
    public String list(Model model,@ModelAttribute("entity") @Valid Books entity,BindingResult bindingResult) throws IOException{
    	/*1.Valid註解用於校驗
    	 *[email protected]運用在引數上,會將客戶端傳遞過來的引數按名稱注入到指定物件中,並且會將這個物件自動加入ModelMap中,便於View層使用*/
    	//System.out.println("++++++"+entity.getWeight());
    	if(entity.getWeight()==null||entity.getWeight().equals("")){
    		entity.setWeight("未填");
    	}
    	System.out.println("+++========");
    	DateFormat mediumDateFormat = DateFormat.getDateTimeInstance
	       		(DateFormat.MEDIUM,DateFormat.MEDIUM); 
		Date date=new Date();
		entity.setDate(mediumDateFormat.format(date));
    	bookService.insert(entity);
    	//response .getWriter().print("<script language='javascript'>記賬成功</script>");
        return check(model);//必須寫成這樣,不然訪問不到 
    }

4.處理器(Controller):由程式設計師編寫,用於請求的處理,處理器通常會呼叫Service層進行資料處理與獲取。

5.檢視解析器:由spring提供,配置在springMVC-Servlet.xml 中,用於檢視解析,通常的作用是給URL拼接字首和字尾,如:

<bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        id="internalResourceViewResolver">
        <!--指定檢視渲染類 -->
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <!--自動新增到路徑中的字首 -->
        <property name="prefix" value="/WEB-INF/views/jstl/" />
        <!--自動新增到路徑中的字尾 -->
        <property name="suffix" value=".jsp" />
        <!--設定所有檢視的內容型別,如果檢視本身設定內容型別檢視類可以忽略 -->
        <property name="contentType" value="text/html;charset=UTF-8" />
        <!-- 優先順序,越小越前 -->
        <property name="order" value="2" />
    </bean>

相關推薦

spring mvc工作原理解析

springMVC各個元件間工作路線圖: 各個元件解析: 1.前端控制器(DispacterServlet):由spring提供,不需要程式設計師編寫,配置在web.xml檔案中,主要用於接受前臺的請求、請求查詢controller以及向前臺作出響應,它是前臺請求進入

spring mvc 工作原理

bubuko src mage 工作原理 img pri 圖片 技術分享 ring spring mvc 工作原理

詳細簡述Spring MVC 工作原理

Spring MVC 工作原理: 簡單理解:客戶端傳送請求----前端控制器接受客戶端請求DispatcherServlet----找到處理器對映HandlerMapping----找到處理器Handler----處理器返回一個模型檢視ModelAndView----檢視解

Spring MVC工作原理 及註解說明

SpringMVC框架介紹     1) Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面。 Spring 框架提供了構建 Web 應用程式的全功能 MVC 模組。使用 Spring 可插入的 MVC 架構,

angularjs工作原理解析

body oot 分隔 復制 抖動 修改 重新 接收 裏的 個人覺得,要很好的理解AngularJS的運行機制,才能盡可能避免掉到坑裏面去。在這篇文章中,我將根據網上的資料和自己的理解對AngularJS的在啟動後,每一步都做了些什麽,做一個比較清楚詳細的解析。 首

USB Type-C工作原理解析

說明 是否 forms dfp 其他 耗時 def 左右 del 自從蘋果發布了新MacBook,USB Type-C接口就成為了熱議對象。我來從硬件角度解析下這個USB Type-C,以便大家更好的了解USB Type-C的工作原理。特色尺寸小,支持正反插,速度快(10G

第九章 Servllet工作原理解析

jet 原理解析 如何工作 servlet容器 應用 創建 strong 1.2 ner 9.1 從Servlet容器說起   Servlet容器:Jetty, Tomcat等。   這裏以Tomcat為例, 真正管理Servlet的容器是Context容器

Spring工作原理

屬性文件 價值 訪問 實現 討論 文件的 jdb 完成 面向對象 一、什麽是Spring (1)、Spring真正的精華是它的Ioc模式實現的BeanFactory和AOP,它自己在這個基礎上延伸的功能有些畫蛇添足。 (2)、 Spring它是一個開源的項目,而且目前非

Spring MVC-視圖解析器(View Resolverr)-內部資源查看解析器(Internal Resource View Resolver)示例(轉載實踐)

ast mes 技術 子文件夾 schema html cati href tree 以下內容翻譯自:https://www.tutorialspoint.com/springmvc/springmvc_internalresourceviewresolver.htm 說

Spring MVC-視圖解析器(View Resolverr)-多重解析器(Multiple Resolver)示例(轉載實踐)

quest springmvc tab type elm utf servle err path 以下內容翻譯自:https://www.tutorialspoint.com/springmvc/springmvc_multiple_resolver_mapping.htm

Vxlan工作原理解析

vxlan標題索引追朔原因知識總結網絡拓撲項目應用本文出自 “一步一印,有印為證” 博客,謝絕轉載!Vxlan工作原理解析

Java Web 深入分析(8) Servlet工作原理解析

銷毀 深入分析 -s 區別 即將 web listen java web 訪問 Servlet Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程序或服務連接器,用Java編寫的服務器端程序,主要功能在於交互式地瀏覽和修改數據,生成動

Spring MVC簡單原理

都在 是我 down 解答 AR block 前後端分離 代碼 SM Spring MVC簡單原理 針對有Java Web基礎、Spring基礎和Spring MVC使用經驗者,文章比較簡單,權當自己的一個總結和備忘吧。 前言 目前基於Java的web後端,Spring

mydumper工作原理解析

備份 mydumper1、簡介 邏輯備份小鋼炮--mydumper是針對MySQL的高性能多線程備份工具。該工具是由MySQL、Facebook、skysql公司的開發人員一起開發的。是由輕量級C語言開發;執行速度據說比mysqldump快10倍;支持事務和非事務表的一致性備份;還支持導出binlog;支持多

Spring MVC實現原理

第一步:發起請求到前端控制器(DispatherServlet) 第二步:前端控制器請求處理器對映器(HandlerMapping)查詢處理器(Handler) 可以根據xml配置,註解進行查詢 第三步:處理器對映器向前端控制器返回Handler

Servlet 工作原理解析(個人標記,重點,隨時複習)

參考連結:Servlet 工作原理解析 對原文的補充: 1.文中只說到loadOnStartup大於0時在web容器啟動時例項化該servlet,而其他情況並沒有說明。 如果沒有設定loadOnStartup,則第一次請求的時候例項化 設定loadOnStartup後

Oracle Redo log 狀態及工作原理解析

Oracle重做日誌(redo log)是用來記錄操作條目,用於資料庫資料恢復。為了提高效率,oracle通常建議設定三組redo log。本文將對重做日誌組的狀態以及多種狀態之間切換做解析,力求掌握該知識點。  概述 oracle重做日誌組通常有四種狀態,即unused,inactive,ac

五分鐘讀懂原始碼——Square開源網路請求庫OkHttp的工作原理解析

前言 說句廢話,作為一個工作幾年的程式設計師,在日常工作中,難免會用一些三方封裝庫,來方便我們的開發,但是不能僅僅會用就滿足,我們還了解它的工作原理。 正文 轉入正題,看到本文的朋友應該知道了OK給出的API的基本呼叫(本文不對基本使用做介紹,有需要自行看https://gi

Spring boot ConditionalOnClass原理解析

Spring boot如何自動載入 對於Springboot的ConditionalOnClass註解一直非常好奇,原因是我們的jar包裡面可能沒有對應的class,而使用ConditionalOnClass標註的Configuration類又import了這個類,那麼如果想載入Configuration類

Spring Boot 啟動原理解析

前言 前面幾章我們見識了SpringBoot為我們做的自動配置,確實方便快捷,但是對於新手來說,如果不大懂SpringBoot內部啟動原理,以後難免會吃虧。所以這次博主就跟你們一起一步步揭開SpringBoot的神祕面紗,讓它不在神祕。 正文 我們開發任何一個Spring Boot專