SpringMVC学习笔记(三)——处理器映射器和适配器

博客源码下载:戳我一下

SpringMVC学习笔记汇总:SpringMVC学习笔记汇总

我在SpringMVC学习笔记(二)——入门程序中写的开发环境为Spring3.2,但是在学习过程中发现Spring3.2jdk1.8一起使用会有错误,网上查了一下,发现jdk1.8需要配合Spring4.0以上的版本使用,所以就把Spring换为了4.2.4版本。

非注解的处理器映射器和适配器

一、非注解的处理器映射器

处理器映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
另一个映射器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/queryItemsone.action">itemsControlleroneprop>
                <prop key="/queryItemstwo.action">itemsControlleroneprop>
                <prop key="/queryItemstwo.action">itemsControllertwoprop>
            props>
        property>
    bean>

多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确的映射器处理。

二、非注解的处理器适配器

1、org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求编写的Handler实现 Controller接口。
Handler示例见:SpringMVC学习笔记(二)——入门程序

2、org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
要求编写的Handler实现 HttpRequestHandler接口。

package com.jiayifan.ssm.controller;

import com.jiayifan.ssm.po.Items;

import org.springframework.web.HttpRequestHandler;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * 实现HttpRequestHandler接口的处理器
 * @author 贾一帆
 *
 */
public class ItemsControllertwo implements HttpRequestHandler {

    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用service查找数据库,查询商品列表,这里先使用静态的数据模拟
        List itemsList = new ArrayList<>();
        //想List中填充静态数据
        Items items_1 = new Items();
        items_1.setName("联想笔记本");
        items_1.setPrice(6000f);
        items_1.setDetail("ThinkPad T430 联想笔记本电脑!");

        Items items_2 = new Items();
        items_2.setName("苹果手机");
        items_2.setPrice(5000f);
        items_2.setDetail("iphone6苹果手机!");

        itemsList.add(items_1);
        itemsList.add(items_2);
        //设置模型数据
        request.setAttribute("itemsList",itemsList);
        //设置转发的视图
        request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
        //使用此方法可以通过修改response,设置响应的数据格式,比如响应json格式
        /*response.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write("json串");*/
    }

}

三、DispatcherSerlvet.properties

SpringMVC学习笔记(三)——处理器映射器和适配器_第1张图片

# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
    org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

端控制器从上边的文件中加载处理映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,使用默认加载的。

注解的处理器映射器和适配器

在spring3.1之前使用
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。

在spring3.1之后使用
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。

在spring3.1之前使用
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。

在spring3.1之后使用
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

一、配置注解映射器和适配器

    
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
    
    <-- <mvc:annotation-driven>mvc:annotation-driven> -->

二、开发注解Handler

package com.jiayifan.ssm.controller;

import com.jiayifan.ssm.po.Items;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
 * 注解的Handler
 * @author 贾一帆
 *
 */
//使用Controller标识这是一个控制器
@Controller
public class ItemsControllerthree {
    //商品查询列表
    //@RequestMapping("/queryItems")实现的是对queryItems方法和url进行映射,一个方法对应一个url
    //建议url和方法名一样
    @RequestMapping("/queryItems")
    public ModelAndView queryItems() throws Exception {
        //调用service查找数据库,查询商品列表,这里先使用静态的数据模拟
        List itemsList = new ArrayList<>();
        //想List中填充静态数据
        Items items_1 = new Items();
        items_1.setName("联想笔记本");
        items_1.setPrice(6000f);
        items_1.setDetail("ThinkPad T430 联想笔记本电脑!");

        Items items_2 = new Items();
        items_2.setName("苹果手机");
        items_2.setPrice(5000f);
        items_2.setDetail("iphone6苹果手机!");

        itemsList.add(items_1);
        itemsList.add(items_2);
        //返回ModelAndView
        ModelAndView modelAndView = new ModelAndView();
        //相当于request的setAttribute方法
        modelAndView.addObject("itemsList",itemsList);
        //指定视图
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
        return modelAndView;
    }
}

三、在spring容器中加载Handler

    
    
    
    <context:component-scan base-package="com.jiayifan.ssm.controller"/>

五、部署调试

这里写图片描述

你可能感兴趣的:(SpringMVC)