4.コントローラー
4.1、コントローラー
- コントローラコンプレックスは、アプリケーションプログラムにアクセスする動作を提供します。これは通常、インターフェイス定義またはアノテーション定義の2つの方法で実装されます。
- コントローラは、ユーザーの要求を解析し、それをモデルに変換する責任があります。
- コントローラクラスには、SpringMVCの複数のメソッドを含めることができます
- Spring MVCでは、コントローラーを構成する方法はたくさんあります
4.2、コントローラーインターフェースを実装する
Controllerはインターフェースであり、org.springframework.web.servlet.mvcパッケージの下では、インターフェースには1つのメソッドしかありません。
//实现该接口的类获得控制器功能
public interface Controller {
//处理请求且返回一个模型与视图对象
ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
}
テスト
-
新しいMoudle、springmvc-04-controllerを作成します。今すぐ03をコピーして、先に進みます!
- HelloControllerを削除します
- mvc構成ファイルは、ビューパーサーのみを残します。
<!--视图解析器:模板引擎 Thymeleaf Freemarker--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/"/> <!--后缀--> <property name="suffix" value=".jsp"/> </bean>
-
ControllerクラスControllerTestを記述します
public class ControllerTest implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView mv = new ModelAndView(); mv.addObject("msg","Controller测试"); /*跳转页面的名字,在ViewResolver中拼接成字符串视图页面名称*/ mv.setViewName("controller1"); return mv; } }
-
書き込み後、Spring構成ファイルに移動して、要求されたBeanを登録します。名前は要求パスに対応し、クラスは要求処理クラスに対応します。
<!--BeanNameUrlHandlerMapping将实现类注册成bean,bean的id就是url-pattern--> <bean id="/c1" class="com.kuber.controller.ControllerTest"/>
-
フロントエンドcontroller1.jspを記述し、ビューパーサーに対応するWEB-INF / jspディレクトリへの書き込みに注意してください。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>controller1</title> </head> <body> ${msg} </body> </html>
-
テストを実行するようにTomcatを構成します。プロジェクトのリリース名がなく、/を構成しているため、リクエストでプロジェクト名を追加する必要はありません。OK!
説明:
- コントローラを定義するためのインターフェイスコントローラの実装は古い方法です
- 欠点は次のとおりです。コントローラーにはメソッドが1つしかないため、複数のメソッドが必要な場合は、複数のコントローラーを定義する必要があります。定義メソッドはより面倒です。
4.3、アノテーション@Controllerを使用
-
@Controllerアノテーションタイプは、Springクラスのインスタンスがコントローラーであることを宣言するために使用されます(他の3つのアノテーションはIOCについて説明するときに言及されます)。
-
Springはスキャンメカニズムを使用して、アプリケーション内のすべてのアノテーションベースのコントローラークラスを検索できます。Springがコントローラーを確実に検出できるようにするには、構成ファイルでコンポーネントスキャンを宣言する必要があります。現時点ではBeanタグを登録する必要はありません
<context:component-scan base-package="com.kuber.controller"/> <mvc:default-servlet-handler/> <mvc:annotation-driven/> <!--视图解析器:模板引擎 Thymeleaf Freemarker--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/"/> <!--后缀--> <property name="suffix" value=".jsp"/> </bean>
-
ControllerTest2クラスを追加し、アノテーションを付けて実装します。
@Controller/*代表这个类会被spring接管, 标有这个注解的类的所有方法如果其返回值为string, 并且返回值为相应的跳转界面的名称,那么就会被视图解析器解析*/ public class ControllerTest2 { @RequestMapping("c2") public String test1(Model model){ //Spring MVC会自动实例化一个Model对象用于向视图中传值 model.addAttribute("msg","Controller测试2"); //返回视图位置 return "controller1"; } }
-
Tomcatテストを実行します
どちらのリクエストもビューを指すことができますが、ページの結果の結果は異なります。これから、ビューが再利用され、コントローラーとビューの間に弱い結合関係があることがわかります。
注釈法は最も一般的に使用される方法です!
4.4、RequestMapping
@RequestMapping
-
@RequestMappingアノテーションは、URLをコントローラークラスまたは特定のハンドラーメソッドにマップするために使用されます。クラスまたはメソッドで使用できます。クラスで使用されるということは、要求に応答するクラス内のすべてのメソッドがこのアドレスを親パスとして使用することを意味します。
-
結論をより正確にテストするために、mywebをテストするためのプロジェクト名を追加できます
-
メソッドのみに注釈を付ける
@Controller public class TestController { @RequestMapping("/h1") public String test(){ return "test"; } }
アクセスパス:http:// localhost:8080 /プロジェクト名/ h1
-
クラスとメソッドに同時に注釈を付ける
@Controller @RequestMapping("/admin") public class TestController { @RequestMapping("/h1") public String test(){ return "test"; } }
アクセスパス:http:// localhost:8080 /プロジェクト名/ admin / h1、クラスのパスを指定してから、メソッドのパスを指定する必要があります。