• SpringMVC原理及非注解配置详解


    如需转发请标明出处:http://www.cnblogs.com/gudu1/p/7222556.html

    1. Spring介绍

      Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。

    这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

    2. Spring的运行原理

      

       1.用户发出HTTP请求 

      2-3.DispatchServlet通过请求URL到HandlerMapping中去寻找相对应的Handler并返回给DispatchServlet。

      4.找到Handler之后,通过Handler获得Controller类对象并调用。

      5.Controller 去调用业务处理的xxxService并返回ModelAndView。

      6.DispatchServlet把获得的ModelAndView交给ViewResovler进行处理,然后将处理的结果封装成View返回给DispatchServlet。

      7.将View视图解析

      8.发送给浏览器进行显示。

     3. SpringMVC配置

      3.1 当然了,在配置之前还是要先把SpringMVC相关jar包给导进来,如下:

      

       核心包是最后一个:spring-webmvc-3.2.0.RELEASE.jar,我们发现其中有jstl的jar包,因为SpringMVC默认使用的标签就是jstl标签。

      

      3.2 在web.xml中进行配置,如下:

    <!-- 
            其实配置的就是一个Servlet,SpringMVC的核心就是DispatchServlet类,
            请求到了DispatchServlet后,然后由它进行统一分发,最后将结果返回
         -->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 
                这里配置的是SpringMVC的配置文件位置,默认为WEB-INF目录下,
                名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml
             -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <!-- 以.action结尾的请求都会被MVC拦截,由DispatchServlet进行处理 -->
            <url-pattern>*.action</url-pattern>
        </servlet-mapping>

       

      3.3 在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"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd   
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd" >
    
    <!-- 配置handler -->
         <bean name="/queryItems.action" class="com.smy.controller.ItemsController"></bean> 
    <!-- 处理器映射器 -->
         <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> 
    <!-- 处理器适配器 -->
         <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> 
    <!-- 视图解析器 默认使用jstl标签-->
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean> 
        
    </beans>    

      所有的映射器都实现HandlerMapping接口,所有的适配器都实现HandlerAdapter接口,

       还有另外一个非注解的适配器:org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,

       另外一个映射器:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping,

       如果这些都不配置的话,仍然能够使用,因为MVC有默认配置在核心中的/org/springframework/web/servlet/DispatcherServlet.properties中,

       有兴趣的同学可以自行查看。

    4.  运行测试

       话不多说直接贴代码:

      ItemsController.java

    package com.smy.controller;
    
    import java.util.ArrayList;
    import java.util.List;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    import com.smy.po.Items;
    
    public class ItemsController implements Controller {
    
        @Override
        public ModelAndView handleRequest(HttpServletRequest request,
                HttpServletResponse response) throws Exception {
            
            List<Items> list = new ArrayList<Items>();
            Items items1 = new Items();
            items1.setId(1);
            items1.setName("图画");
            items1.setDescribe("珍贵名画");
            items1.setPrice(99.99);
            
            Items items2 = new Items();
            items2.setId(2);
            items2.setName("零食");
            items2.setDescribe("非常好吃");
            items2.setPrice(19.99);
            
            list.add(items1);
            list.add(items2);
            
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("list", list);
            modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
            return modelAndView;
        }
    }

       ItemsController类必须实现Controller接口,查看映射文件:

     

      只有在实现了Controller类之后,MVC框架才能够认识它。

      Items.java

    package com.smy.po;
    
    public class Items {
    
        private int id;
        private String name;
        private double price;
        private String describe;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public String getDescribe() {
            return describe;
        }
        public void setDescribe(String describe) {
            this.describe = describe;
        }
    }

      jsp页面中:

    <table>
            <tr>
                <td>商品ID</td>
                <td>商品名称</td>
                <td>商品单价</td>
                <td>商品描述</td>
            </tr>
            <c:forEach items="${requestScope.list }" var="items">
                <tr>
                    <td>${items.id }</td>
                    <td>${items.name }</td>
                    <td>${items.price }</td>
                    <td>${items.describe }</td>
                </tr>
            </c:forEach>
        </table>

     运行结果:

      

    The end.........

  • 相关阅读:
    设计模式详解(图码)
    设计模式详解(图)
    Zookeeper学习
    取消单元格的点击事件
    ios 中生成随机数
    IOS 时间和时间戳之间转化
    偏好存空判断
    限制textfield的文字长度
    tabBar的图标不被系统渲染
    (转)IOS http请求的get 和 post的请求的区别
  • 原文地址:https://www.cnblogs.com/gudu1/p/7222556.html
Copyright © 2020-2023  润新知