springmvc03 非注解和注解處理器映射器和適配器


1其它非注解處理器映射器和適配器
1.1BeanNameUrlHandlerMapping(映射器)
根據請求url(XXXX.action)匹配spring容器bean的 name
找到對應的bean(程序編寫的Handler)
1.2SimpleUrlHandlerMapping(映射器)
<!--簡單url映射, 集中配置bean的id對應 的url -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/itemsTest1.action">itemController1</prop>
                <prop key="/itemsTest2.action">itemController2</prop>
            </props>
        </property>
    </bean>
注意:在springmvc.xml配置了多個處理器映射器,多個處理器映射器可以共存。哪個映射成功就用哪個。
1.3SimpleControllerHandlerAdapter(適配器)
要求程序編寫的Handler(Controller)需要實現 Controller接口。
    <!-- 配置處理器適配器, springmvc框架根據HandlerAdapter接口判斷該類是否是處理器適配器 -->
    <bean
        class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
1.4HttpRequestHandlerAdapter(適配器)
在springmvc.xml配置:HttpRequestHandlerAdapter
    <!-- HttpRequestHandlerAdapter適配器 -->
    <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
要求Handler 實現 HttpRequestHandler接口
1.4.1開發Handler
public class ItemController2 implements HttpRequestHandler {
    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        // 使用靜態數據將商品信息列表顯示在jsp頁面
        // 商品列表
        List<Items> itemsList = new ArrayList<Items>();
        Items items_1 = new Items();
        items_1.setName("聯想筆記本");
        items_1.setPrice(6000f);
        items_1.setCreatetime(new Date());
        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);
        //轉發到jsp頁面
        request.getRequestDispatcher("/WEB-INF/jsp/itemsList.jsp").forward(request, response);
    }
}
1.4.2配置Handler
    <!-- handler2 -->
    <bean id="itemController2" class="cn.itcast.springmvc.first.ItemController2"></bean>
使用簡單url映射器:
<!--簡單url映射, 集中配置bean的id對應 的url -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/itemsTest1.action">itemController1</prop>
                <prop key="/itemsTest2.action">itemController2</prop>
            </props>
        </property>
    </bean>
映射器是根據url查找handler,當有多個映射器相同的url的時候,所有的映射器在一個list隊列當中,映射url的時候從集合中拿,拿到了就使用,后面就不管了。

 1 DispatcherServlet.properoties

Springmvc的包:

DispatcherServlet前端控制器加載 DispatcherServlet.properoties 配置文件,從而默認加載各個組件,properoties文件如下:
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中配置了處理器,映射器和適配器則以sprintmvc.xml中配置的為准。
1注解映射器和適配器
1.1注解映射器
    spring3.1之前默認加載映射器是
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping,3.1之后要使用:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
在springmvc.xml中配置RequestMappingHandlerMapping:
    <!-- 注解處理器映射器 -->
    <bean
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
使用RequestMappingHandlerMapping需要在Handler 中使用@controller標識此類是一個控制器(Handler),使用@requestMapping指定Handler方法所對應的url。
1.2注解適配器
spring3.1之前默認加載映射器是
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter,3.1之后要使用:
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
    <!-- 注解適配器 -->
    <bean
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
RequestMappingHandlerAdapter,不要求Handler實現任何接口,它需要和RequestMappingHandlerMapping注解映射器配對使用,主要解析Handler方法中的形參。
1.3注解開發Hanlder
注解的handler(Controller)只能通過注解的映射器和適配器來調用。
@Controller//標識他是一個控制器

1.1配置Handler
    <!-- 注解的handler,單個配置 -->
    <!-- <bean class="cn.itcast.springmvc.first.ItemController3"/> -->
    <!-- 使用spring組件掃描,cn.itcast.springmvc.first是包名 -->
    <context:component-scan base-package="cn.itcast.springmvc.first" />
建議使用組件掃描,組件掃描可以掃描@Controller、@Service、@component(不是service也不是dao)、@Repsitory
1小結
DispatcherServlet:前端控制器,相當於中央調度器,可以降低組件之間的耦合度。
HandlerMapping:處理器映射器,負責根據url查找Handler
HandlerAdapter:處理器適配器,負責根據適配器要求的規則去執行處理器(Controller)。可以通過擴展適配器支持不同類型的Handler。
viewResolver:視圖解析器,根據邏輯視圖名解析成真正的視圖,
<!-- 配置視圖解析器 ,要求將jstl的包加到classpath -->
    <!-- ViewResolver -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />   配置前綴
        <property name="suffix" value=".jsp" />   配置后綴
    </bean>
真正視圖地址==前綴+邏輯視圖名+后綴
1、DispatcherServlet通過HandlerMapping查找Handler
返回一個Chain,for循環是從多個HandlerMapping中找,哪個適用了就用哪個,

2、DispatcherServlet通過適配器去執行Handler,得到ModelAndview

3、視圖解析
視圖解析完成得到一個view:

 

4、進行視圖渲染
將Model中的數據 填充到request域。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM