赞
踩
Controller(控制器)
控制器,通常通过接口定义或注解定义快两种方式实现。
在SpringMVC中一个控制器类可以包含多种方法。
第一种方式(实现Controller接口):
在此种方式中Control
ler是一个接口,在org.springframework.web.servlet.mvc.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 HelloController implements Controller {
- public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
- //ModelAndView模型视图
- ModelAndView mv = new ModelAndView();
- //封装对象到ModelAndView中,model
- mv.addObject("msg","helloControllerTest");
- //封装要跳转的视图,放在ModelAndView中
- mv.setViewName("Test");//要跳转的页面路径,由视图解析器解析后:/WEB-INF/jsp/hello.jsp
-
- return mv;
- }
- }
注意:HelloController实现了Controller接口,那么它就是一个控制器了。
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"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-
- <!--添加映射器-->
- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
- <!--添加处理器适配器-->
- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
- <!--添加试图解析器:DispatcherServlet给他的ModeLAndView
- 1.获取了ModeLAndView的数据
- 2.解析了ModeLAndView的视图名字
- 3.拼接视图名字,找到对应的视图/WEB-INF/jsp/Hello.jsp
- 4.将数据渲染到视图上
- -->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
- <!--前缀-->
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <!--后缀-->
- <property name="suffix" value=".jsp"/>
- </bean>
-
- <bean id="/Hello" class="com.gao.controller.HelloController"/>
- </beans>
web.xml配置文件
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
- version="4.0">
- <!--注册DispatcherServlet-->
- <servlet>
- <servlet-name>springmvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <!--关联一个springmvc的配置文件-->
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:springmvc.xml</param-value>
- </init-param>
- <!--启动级别-1 级别越小,启动越早-->
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <!--匹配所有的请求:(不包括jsp)-->
-
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- </web-app>
要跳转的页面Test.xml
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Title</title>
- </head>
- <body>
- ${msg}
- </body>
- </html>
说明:
实现Controller接口定义控制器时比较老的方法,还是更推荐使用注解定义的放法,相比之下通过注解定义代码量较少,更加便捷。
缺点:一个控制器只写一个方法,如果需要多个方法则需要定义多个控制器,定义的方式比较麻烦。
第二种方式(通过注解定义):
@Controller注解类型用于声明Spring类的实例是一个控制器。
Spring利用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在控制器中声明组件扫描
在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"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- 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 http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
-
- <!--自动扫描包,让指定包下的注解生效,有IOC容器统一管理-->
- <context:component-scan base-package="com.gao.controller"/>
- <mvc:default-servlet-handler/>
- <mvc:annotation-driven/>
-
- <!--
- 支持mvc注解驱动
- 在spring中一般采用@RequestMapping注解来完成映射关系
- 要想使@RequestMapping生效
- 必须在上下文中注册DefaultAnnotationHandlerMapping
- 和一个AnnotationMethodHandlerMapping实例
- 这两个实例分别在类级别和方法级别处理。
- 而annotation-driven配置帮助我们自动完成上述两个实例的注入。
- -->
-
- <!--视图解析器-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
- <!--前缀-->
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <!--后缀-->
- <property name="suffix" value=".jsp"/>
- </bean>
-
- </beans>
HelloController类
- package com.gao.controller;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- @Controller()
- @RequestMapping("/hello")
- public class HelloController {
- //http://localhost:8080/hello/h1
- @RequestMapping("/h1")
- public String hello(Model model){
- //封装数据
- model.addAttribute("msg","Hello,SpringMVCAnnotation!");
- return "Hello";//会被视图处理器处理
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。