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提交, 出现如下错误:

 

posted @ 2020-06-15 20:43  64Byte  阅读(187)  评论(0编辑  收藏  举报