まず、MVCデザインパターンであるかを理解
- Cotroller:要求を受信し、処理するための責任、応答クライアント
- モデル:モデルデータ、ビジネスロジック
- 表示:レンダリングモデル、ユーザとの対話
MVCの実装プロセス:
ユーザは、制御層は、要求の方法に応じて異なるモデルを層に呼制御レイヤを受信し、要求を開始します。別のビジネス方法は、最終的なモデルデータを生成するために、永続的なデータベースのCRUD操作を持っています。次いで、カプセル化されたデータモデルは、ビュー・レイヤーに渡されます。データを取得するための表示層がレンダリングされ、クライアントへの応答の最終結果は、ユーザーが最終的な結果を見ることができます。次に、ユーザが次の操作を行い、新たな要求がなされ、その後、前処理を繰り返します。これはMVCプロセスです。
Spring MVCのそれとは何ですか?
- MVCデザインパターンの実現のための最高のフレームワーク。開発者がアプリケーションの開発を行うことがより便利で効率的にできるように、MVCデザインパターンは、基礎となるコードの多くをシールドされ、全体のパッケージを持っています。
- SpringMVCは、Springフレームワークの後継です。
- 両方のウェル組み合わせて使用されるスプリングモジュールのサブフレームに対応し、その構成を簡素化し、容器のばね特性を使用して、それが統合を必要としません。
SpringMVCのコアコンポーネント
- DispatcherServlet:フロントコントローラ
フロー制御のコアは、他の成分、統一されたスケジューリングの実行を制御するための様々な構成要素間の結合を減少させる
コマンダに対応する位置
- ハンドラ:特定のビジネス・ロジックを実現するプロセッサ
要求を受信した場合のDispatcherServletは、要求が異なると異なるハンドラの間で分散する必要が
- HandlerMapping:ハンドラへのマッピング要求
- HandlerInterceptor:プロセッサのインターセプター
HandlerInterceptorはインターフェースであり、必要なインターセプト処理機能を完成します
- HandlerExceptionChain:チェーンを実行するためのプロセッサ
- HandlerAdapter:プロセッサアダプタ
ビジネスメソッドを実行する前に、ハンドラは、フォームデータの検証を含む一連の動作を、必要とする、一連の動作のうち、フォームのJavaビーン内にカプセル化形式データ型変換とデータはHandlerAdapterによって完成されます
- MoudelAndView:パッケージモデルとビューの情報データ
処理結果ハンドラのDispatcherServletに戻るようにビュー情報は、の論理ビューを指し
- ViewResolver:ビューリゾルバ
DispatcherServlet後MoudelAndViewを取得し、物理ビューの論理ビューを解決するViewResolver、解決する必要があり、最終的な結果がクライアントにレンダリングされます
SpringMVCの実装プロセス:
図1に示すように、クライアントの要求がのDispatcherServletが受信される
のDispatcherServletがハンドラに要求をマッピングし、2
、3。からハンドラとHandlerInterceptorを生成する
。4、HandlerExceptionChain(からハンドラ+ HandlerInterceptor)を返す
。5、のDispatcherServletはHandlerAdapterによりハンドラを行う
。6、MoudelAndView(論理的データのモデルビュー)を返しますDispatcherServletに
。7、DispatcherServletのViewResolver MoudelAndView上の物理的な視野に分解論理ビュー解析することによって
8は、レンダリングのためにクライアントへの応答で満たされたビューモデルデータを返されました。
SpringMVCの使用:
図1に示すように、フレームワークによって提供される構成要素のほとんどは、開発者が構成のみによって関連する必要が
2、開発者が手動でのみハンドラ、ビューを書き込む必要
使用注釈モード(推奨)に基づいて、
1、SpringMVC基础配置
2、Controller,HandlerMapping通过注解进行映射
3、XML配置ViewResolver组件映射
创建AnnotationHandler
package com.lzy.handler;
import com.lzy.entity.Goods;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Map;
@Controller
public class AnnotationHandler {
/**
* 业务方法:ModelAndView完成数据的传递,视图的解析
*/
@RequestMapping("/modelAndViewTest")
public ModelAndView modelAndViewTest(){
//创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
//填充模型数据
modelAndView.addObject("name","Tom");
//设计逻辑视图
modelAndView.setViewName("show");
return modelAndView;
}
/**
* 业务方法:Model传值,String进行视图渲染解析
*/
@RequestMapping("/ModelTest")
public String ModelTest(Model model){
//填充模型数据
model.addAttribute("name","Jerry");
//设置逻辑视图
return "show";
}
/**
* 业务方法:Map传值,String进行视图解析
*/
@RequestMapping("MapTest")
public String MapTest(Map<String,String>map){
//填充模型数据
map.put("name","Cat");
//设计逻辑视图
return "show";
}
}
配置springmvc.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--将AnnotationHandler自动扫描到IOC容器中-->
<context:component-scan base-package="com.lzy.handler"></context:component-scan>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀-->
<property name="prefix" value="/"></property>
<!--配置后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
show.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${name}
</body>
</html>
基于XML配置的使用
1、SpringMVC基础配置
2、XML配置Controller,HandlerMapping组件映射
3、XML配置ViewResolver组件映射
创建MyHandler
package com.lzy.handler;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class MyHandler implements Controller {
@Override
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
//装载模型数据和逻辑视图
ModelAndView modelAndView = new ModelAndView();
//添加模型数据
modelAndView.addObject("name","Tom");
//添加逻辑视图
modelAndView.setViewName("show");
// /show.jsp
return modelAndView;
}
}
配置springmvc.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--配置HandlerMapping,将url请求映射到Handler-->
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!--配置mapping-->
<property name="mappings">
<props>
<!--配置test请求对应的handler-->
<prop key="/test">testHandler</prop>
</props>
</property>
</bean>
<!--配置Handler-->
<bean id="testHandler" class="com.lzy.handler.MyHandler"></bean>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀-->
<property name="prefix" value="/"></property>
<!--配置后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
show.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${name}
</body>
</html>