欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

框架:Spring MVC

程序员文章站 2022-05-30 23:13:20
...

框架是围绕DispatcherServlet设计的,它处理所有的HTTP请求和响应。 请求处理工作流如下图所示:

框架:Spring MVC

  1. 在接收到HTTP请求后,DispatcherServlet会查询HandlerMapping以调用相应的Controller
  2. Controller接受请求并根据使用的GET或POST方法调用相应的服务方法。 服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet。
  3. DispatcherServlet将从ViewResolver获取请求的定义视图。
  4. 当视图完成,DispatcherServlet将模型数据传递到最终的视图,并在浏览器上呈现。

HandlerMapping对象:客户请求到Controller之间的映射。借助于Spring提供的HandlerMapping定位到具体的Controller。 Spring默认使用BeanNameUrlHandlerMapping。还有SimpleUrlHandlerMapping、CommonsPathMapHandlerMapping

 

配置

 

1) web.xml:

初始化时,框架将尝试从位于应用程序的WebContent/WEB-INF目录中的名为[servlet-name]-servlet.xml的文件加载应用程序上下文。

需要通过使用web.xml文件中的URL映射来映射希望DispatcherServlet处理的请求。

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>  <!--拦截所有的请求,注1-->
    </servlet-mapping>

注1:*.do 只针对以'.do'结尾的请求进行处理,不再维护静态资源

 

2)[servlet-name]-servlet.xml映射配置:

用于创建定义的bean,它会覆盖在全局范围中使用相同名称定义的任何bean的定义

表示访问路径/index会交给id=indexController的bean处理;  id=indexController的bean配置为类:controller.Controller

<beans······>
   <context:component-scan base-package="文件" /> 
<!--标签用于**Spring MVC注释扫描功能,扫描文件下@Controller和@RequestMapping等注释,把这些类注册为bean-->

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--定义用于解析视图名称的规则,前缀+后缀-->
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>
</beans>

 

3)控制类Controller

DispatcherServlet将请求委派给控制器以执行特定于其的功能。 提供方法handleRequest处理请求。  通过 ModelAndView 对象把模型和视图结合在一起

@Controller注释 将类定义为Spring MVC控制器

@RequestMapping注释用于将URL映射到整个类或特定处理程序方法。

 

@Controller
@RequestMapping("/hello") //aaa@qq.com如果写在此处表示此控制器上的所有处理方法都与/hello路径相关
public class HelloController{

   @RequestMapping(value = "/hello", method = RequestMethod.GET) //1.2一般写在此处表示/hello路径GET时触发
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC"); //模型数据是message,内容是“Hello Spring MVC”
      return "index";  //返回给视图
   }

    //Model,ModelMap,ModelAndView三者区别
    ModelAndView mav = new ModelAndView("index.jsp"); //表示视图是index.jsp
    mav.addObject("message", "Hello Spring MVC");  
    return mav;
    }
}

在类前面加上@Controller 表示该类是一个控制器,不再实现Controller接口
在方法handleRequest 前面加上 @RequestMapping("/hello") 表示路径/hello会映射到该方法上
 

4)index.jsp

EL表达式显示message的内容:${message}

 

 

 

流程

1.   HTTP请求访问 /hello,进入Spring MVC入口

2.   web.xml中配置 DispatcherSevlet【Spring MVC的入口,负责将请求分发】;

3.   springmvc-servlet.xml配置映射到IndexController类

4.   IndexController类:处理来自/index的请求,返回ModelAndView对象给DispatcherServlet;

        ModelAndView对象:包含了模型(Model)和视图(View)

5.   DispatcherServlet将View对象渲染出的结果返回给index.jsp;

        ViewResoler视图解析器:视图定位。在Web应用中查找View对象,从而将响应结果渲染给客户

6.   index.jsp:通过EL表达式显示message的内容;