zoukankan      html  css  js  c++  java
  • SpringMVC的简单应用

    1:Spring和SpringMVC

       从严格意义上来讲,spring并不是一个框架,而是一个容器。开发程序的模块组件,都可以通过spring来组装拼合,表现在IOC(空置反转)和AOP面向切面编程

        IOC存在另一种说法就是DI即依赖注入,将对象交给spring管理,由于不需要手动创建、协调、销毁对象,从而极大的降低了代码的耦合程度

        AOP:由于AOP不好描述,所以举个例子

    /*    我们以系统中常用到的事务管控举例子。在系统操作数据库的过程中,不可避免地要考虑到事务相关的内容。如果在每一个方法中都新建一个事务管理器,那么无疑是对代码严重的耦合和侵入。
    为了简化我们的开发过程(实际上spring所做的一切实现都是为了简化开发过程),需要把事务相关的代码抽成出来做为一个独立的模块。通过AOP,确认每一个操作数据库方法为一个连接点,这些连
    接点组成了一个切面。当程序运行到其中某个一个切点时,我们将事务管理模块顺势织入对象中,通过通知功能,完成整个事务管控的实现。这样一来,所有的操作数据库的方法中不需要再单独关心事务
    管理的内容,只需要关注自身的业务代码的实现即可。所有的事务管控相关的内容都通过AOP的方式进行了实现。简化了代码的内容,将目标对象复杂的内容进行解耦,分离业务逻辑与横切关注点
    */

      SpringMVC : SpringMVC其实是spring 位于web层的一个框架,两者的关系其实是子父层的关系。是实现了WEB MVC 设计模式的请求驱动类型的轻量级的框架,,将web层进行职责解耦

          请求驱动即是使用请求——响应模型

    2:spring mvc 的流程图

                               

        具体执行步骤:

          1:用户将请求发送给前段控制器(Dispatcher  Servlet),前端控制器根据请求信息,将请求转发给具体页面控制器,即图中的1、2部分

          2:页面处理器接收到请求后,将收集和绑定信息到一个对象,这个对象在spring mvc中成为命令对象,将一个命令对象交给业务对象进行处理,返回一个ModleAndView(模型视图和逻辑视图名)

      即图中的3、4部分

          3:前段控制器收回控制权,根据返回的逻辑视图名,选择相应的页面进行解析,并把相应的数据模型传入进行视图渲染,即图中的5、6部分

          4:前段控制器再吃收回控制权,将相应的页面传输给用户,图中的7部分

      

      相应的JAVA代码和配置文件:

        项目保存在  D:海同springMVCFirsetSpringMVC  目录下  

        主要用到的JAR包   spring-web.jar  和spring-webmvc.jar 

       

        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_3_1.xsd"
             version="3.1">
        <!-- 配置调度serlvet  -->
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--    加载spring配置文件  -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
            <!--    设置加载文件优先级-->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <!--    配置调度servlet的配置路径,这里表示多有的请求全部要经过该Servlet -->
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

      spring的配置文件:

    <?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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
        <!--    扫描注解    -->
        <context:component-scan base-package="com.yuwenhui.springMVC.handler"></context:component-scan>
        <!--    配置视图解析器,将handler返回值,解析成实际的物理视图  -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--    配置路径    -->
            <property name="prefix" value="/WEB-INF/views/"></property>
            <!--    后置路径-->
            <property name="suffix" value=".jsp"></property>
        </bean>
    </beans>

      Controller代码:

    package com.yuwenhui.springMVC.handler;
    
    import com.yuwenhui.springMVC.entity.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import java.util.Map;
    
    /**
     * Created by Administrator on 2017/9/15 0015.
     */
    //声明为控制层
    @Controller
    public class First {
        private static String SUCCESS = "success";
    
        /**
         *  ModelAttribute 将会在在所有的RequestMapping之前调用
         *  将user保存到model里面
         * @param map
         * @param model
         */
        @ModelAttribute("user")
        public User getUser(Map<String,Object> map, Model model){
            User user = new User("YuWenHui","123456");
            System.out.println("数据库对象:"+user);
            map.put("user",user);
    //        将数据或者对象保存到request域中,利用modle
            model.addAttribute("username",user.getName());
            return user;
        }
    
    //    RequestMapping 当用户访问的servlet为 RequestMapping中的值时将调用该方法
        @RequestMapping("/testModelAttribute")
        public String testModelAttribute(User u){
            System.out.println("修改:"+u);
            return SUCCESS;
        }
    
    //     请求重定向 redirect 后不能加空格
        @RequestMapping(value = "redirect")
        public String testRedirect(){
            System.out.println("重定向");
            return "redirect:index.jsp";
        }
    //    请求转发
        @RequestMapping(value = "forward")
        public String testForward(){
            System.out.println("转发");
            return "forward:first";
        }
    
    
    //    页面请求写的servlet方法,将对应 RequestMapping中的值
        @RequestMapping(value = "/first",method = RequestMethod.GET)
        public String sayHolloWord(){
            System.out.println("Hollo Word");
            return "success";
        }
    
        @RequestMapping(value = "update",method = RequestMethod.POST)
        public String update(User user){
            System.out.println(user);
            return "success";
        }
    
    //    这里不能进行方法的重载,否则springMVC将不知道将请求发送到哪一个方法中
        @RequestMapping(value = "find",method = RequestMethod.GET)
        public String getAgeAndID(@RequestParam(value = "id",required = false,defaultValue = "0") int id,
                                  @RequestParam(value = "age",required = false,defaultValue = "0") int age){
            System.out.println("ID:" + id);
            System.out.println("AGE:" + age);
            return SUCCESS;
        }
    
    }
  • 相关阅读:
    php5调用web service
    经典SQL语句大全
    15个初学者必看的基础SQL查询语句
    MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解
    mysql update操作
    Oracle CASE WHEN 用法介绍
    日期时间格式正则表达式
    JS的事件监听机制
    JS 事件介绍
    c#格式化数字
  • 原文地址:https://www.cnblogs.com/yuwenhui/p/7532550.html
Copyright © 2011-2022 走看看