springMVC

1.Spring MVC概述
Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过[Spring的依赖注入功能,这些bean被注入到控制器中。
Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:

Spring MVC主要由DispatcherServlet处理器映射处理器(控制器)视图解析器视图组成。他的两个核心是:

处理器映射:选择使用哪个控制器来处理请求
视图解析器:选择结果应该如何渲染

通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。


2.SpringMVC运行原理

springMVC运行过程

(1) Http请求:客户端请求提交到DispatcherServlet。
(2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。
(3) 调用处理器:DispatcherServlet将请求提交到Controller。
(4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。
(6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
(8) Http响应:视图负责将结果显示到客户端。


3.SpringMVC接口解释

(1)DispatcherServlet接口
Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller

(2)HandlerMapping接口
能够完成客户请求到Controller映射。

(3)Controller接口
需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。
Controller将处理用户请求,这和Struts Action扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。
从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。

(4)ViewResolver接口
Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。


4.DispatcherServlet

是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:
(1)截获符合特定格式的URL请求。

(2)初始化DispatcherServlet上下文对应WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。

(3)初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。


  1. SpringMVC配置

项目整体结构如下:


项目整体结构

(1)在web.xml文件中进行配置,在配置中设置springmvc-context.xml的路径,代码如下:

<servlet>
    <servlet-name>testServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:com/hb/test/resources/spring/springmvc-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>testServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

(2)配置springmvc-context.xml文件,这一部分主要是开启注解功能、配置试图解析器,代码如下:

<beans xmlns="http://www.springframework.org/schema/beans"       
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"       
        xmlns:context="http://www.springframework.org/schema/context"       
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd     
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd     
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
      
      <context:annotation-config/>
      <!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
      <context:component-scan base-package="com.hb.test.controller"/>
      
      <!-- 这两个类用来启动基于Spring MVC的注解功能,将控制器与方法映射加入到容器中 -->
      <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
      <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
      <!-- 这个类用于Spring MVC视图解析 -->
      <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/"/>
        <property name="suffix" value=".jsp"/>
      </bean>
       
</beans>  

(3)配置文件完成了,下面开始写代码
两个jsp

//create.jsp
<body>
    <form action="save" method="post">
        <fieldset>
            <legend>创建用户</legend>
            <p>
                <label>姓名:</label> <input type="text" name="name">
                
            </p>
            <p>
                <label>密码:</label> <input type="text" name="password">
                
            </p>
            <p>
                <label>年龄:</label> <input type="text" name="age">
                
            </p>
            <p>
            <input type="reset" value="取消">
            <input type="submit" value="创建">
            </p>
        </fieldset>

    </form>
</body>
//detail.jsp
<body>
    <div id="gloobal">
        <h4>创建成功</h4>
       <p>
        <h5>详情:</h5>
        姓名:${user.name}<br /> 年龄:${user.age}<br /> 密码:${user.password} <br />
        </p>
    </div>
</body>
//user实体类
public class User implements Serializable{
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private String password;
    private Integer age;
//省略get/set方法
@Controller
public class UserController {
    
    @RequestMapping("")
    public String create(Model model){
        return "create";
    }
    
    @RequestMapping("/save")
    public String Save(@ModelAttribute("form") User user, Model model){
        model.addAttribute("user", user);
        return "detail";
    }
}

运行结果

![ ![](http://upload-images.jianshu.io/upload_images/2352668-7f6c83a8aa75a4bc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](http://upload-images.jianshu.io/upload_images/2352668-fd9f56057238282c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容