zoukankan      html  css  js  c++  java
  • SpringMVC的整合,基于注解

    1、applicationContext.xml中需要配置扫描注解的包

      spring容器中,在web.xml中配置一个监听器,在Tomcat启动的时候创建

    如果在启动的时候加载项目名的一个父包,需要扫描注解的就包含(web、service、controller)

      springMVC容器中,在web.xml中配置了load-on-startup值为1,在Tomcat启动的时候创建

    此时,web层只需要扫描(controller)中的注解

    Spring容器是SpringMVC容器父容器

    先创建Spring容器,再创建SpringMVC的容器,在创建SpringMVC容器调用setParen(spring容器对象)。把Spring容器作为springMVC父容器

    子容器可以访问父容器的bean .父容器不能访向子容器的bean

    那么,applicationContext.xml中只需要扫描(web、service)中的注解

    <!-- 1、扫描注解 (2、或者单独扫描包,一个dao,一个service  -->
        <context:component-scan base-package="spring08">
            <!-- 不包括那些注解 -->
            <!-- <context:exclude-filter type="annotation" expression=""/> -->
        
            <!-- 包括那些注解 -->
            <!-- <context:include-filter type="annotation" expression=""/> -->
            
            <!-- 配置Controller注解的扫描
                expression: 排除的注解的包.注解名
             -->
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>

    springmvc.xml中只需要扫描(controller)中的注解

        <!-- 1、扫描注解 -->
       <context:component-scan base-package="spring08.web"/>
       
     <!--   <context:component-scan base-package="spring08"> 2、包括web的注解
           <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
       </context:component-scan>  -->

    2、web.xml中的创建监听器,前端控制器,编码过滤器

    <!-- 创建Spring容器的监听器: 在Tomcat启动的时候创建 -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <!-- spring默认加载的配置文件: WEB-INF/applicationContext.xml -->
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
    
        <!-- 配置springMVC的前端控制器 : 创建SpringMVC的容器-->
        <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--如果不配置contextConfigLocation,
                        默认查找springmvc的配置文件为:WEB-INF/servlet名字-servlet.xml :   WEB-INF/springMVC-servlet.xml
                比如我们这查找的就是:WEB-INF/springMVC-servlet.xml
             -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc2.xml</param-value>
            </init-param>
            <!--load-on-startup: servlet创建是在Tomcat启动时候创建  -->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springMVC</servlet-name>
            <!-- 
                 url以.action结尾的到SpringMVC的Servlet
                 / : 匹配所有的url, 在后面再说, 显示restFull风格,  静态资源也会被这个前端控制器处理, 需要对静态资源处理
                 /*: 错误写法, 
             -->
            <url-pattern>*.action</url-pattern>
        </servlet-mapping>
    
        <!-- 配置处理乱码的过滤器: post请求编码, 响应编码 -->
        <filter>
            <filter-name>CharacterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <!-- 配置初始化参数 -->
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <!-- 设置响应编码 -->
            <init-param>
                <param-name>forceResponseEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    中文编码的过滤器,Spring提供了乱码过滤器, 只需要配置就行

      只能处理的post请求编码,  以及响应编码

      Get请求编码, 需要,在tomcat的server.xml文件中配置: URIEncoding=”UTF-8”

      在Tomcat8以上的版本, 已经帮我们处理

    3、springMVC的配置文件(视图解析器,[处理器映射器,处理器适配器],扫描注解)

     <!-- springMVC的配置文件 -->
        <!-- 视图解析器 :  -->
        <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 前缀 -->
            <property name="prefix" value="/jsp/"/>
            <!-- 后缀 -->
            <property name="suffix" value=".jsp"/>
            <!-- 视图的类 : 视图支持 jstl-->
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        </bean>
        
        <!-- 基于注解的处理器映射器,处理器适配器 
    注解处理器适配器, 调用的处理器,处理器不需要实现任意接口, 就是一个普通类提供了关于Controller相关的注解
    -->
        <mvc:annotation-driven/>
        
        <!-- 扫描注解 -->
       <context:component-scan base-package="spring08.web"/>

    4、web层的代码:

      常见的注解:@RequestMapping:

    类上, 请求的处理器的上级路径

    方法上, 控制器的处理方法绑定一个url, 这个方法访问的url是什么

      属性:  String[ ] path/value  同一个意思,  绑定的url , 一个处理器方法可以绑定多个url, 实际开发只需要一个

    用在方法上,形参就是前端传过来的数据,要求数据名一致,数据类型不一致时(自动进行数据类型的转换)

      属性: method:  处理的请求方式, 默认是get/post都可以处理,

    值是RequestMethod的枚举类型,

    @Controller
    public class UserController {
        @Autowired
        private IUserService userService;
        
        //根据id显示用户对象
        @RequestMapping("/findUser.action")
        public ModelAndView findUser(int id) {
            //根据id调用业务层获取对象
            User user = userService.queryByid(id);
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("user", user);
            modelAndView.setViewName("info");
            return modelAndView;
        }
        
        //这个方法可以get请求, 也可以处理post
        @RequestMapping(value="/sayHello.action",method = RequestMethod.GET)
        public ModelAndView  sayHello(String name) throws Exception{
            ModelAndView modelAndView = new ModelAndView();
            System.out.println(name);
            modelAndView.addObject("hello", "hello:"+name);
            modelAndView.setViewName("hello");
            return modelAndView;
        }

    如果设定类型为get结果是post提交, 出现如下错误:

  • 相关阅读:
    小tips: HTTP 请求过程示例图及名称解释
    小tips:使用vuecli2脚手架配置vant自定义主题
    axios使用备忘录
    知乎问题:为什么很多web项目还是使用 px,而不是 rem?
    小tips:HTML5的ruby标签实现给汉字加拼音、details标签实现折叠面板、原生进度条progress和度量meter
    ES6之常用开发知识点:入门(一)
    GitBook相关使用以及配置笔记
    小tips:使用vue-cli脚手架搭建项目,关于eslint语法检测配置
    小tips:JS/CSS实现字符串单词首字母大写
    vue动态子组件的实现方式
  • 原文地址:https://www.cnblogs.com/64Byte/p/13137721.html
Copyright © 2011-2022 走看看