【SpringMVC】入门

时间:2019-11-28 12:44:10   收藏:0   阅读:77

一、概述

1.1 SpringMVC是什么

1.2 MVC在b/s系统的应用

MVC是一个设计模式,在b/s系统的应用:

技术分享图片

1.3 SpringMVC 原理

技术分享图片

二、入门程序

2.1 需求

2.2 引入依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.5.RELEASE</version>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>3.0-alpha-1</version>
    <scope>provided</scope>
</dependency>

2.3 前端控制器

<!-- 前端控制器 -->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springmvc配置 -->
    <init-param>
           <param-name>contextConfigLocation</param-name>
    <!-- 配置文件的地址
        如果不配置contextConfigLocation,
        默认查找的配置文件名称classpath下的:servlet名称+"-serlvet.xml"即:springmvc-serlvet.xml
     -->
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!-- 
    可以配置/ ,此工程 所有请求全部由springmvc解析,此种方式可以实现 RESTful方式,需要特殊处理对静态文件的解析不能由springmvc解析
    可以配置*.do或*.action,所有请求的url扩展名为.do或.action由springmvc解析,此种方法常用 
    不可以/*,如果配置/*,返回jsp也由springmvc解析,这是不对的。  
     -->
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

2.4 springmvc.xml

2.5 配置处理器映射器

<!-- 根据bean的name进行查找Handler 将action的url配置在bean的name中 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

2.6 处理器适配器

 <bean      class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 
    
public boolean supports(Object handler)
/*    */   {
/* 42 */     return handler instanceof Controller;
/*    */   }

2.7 Handler编写

public class ItemController1 implements Controller {
    
    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
    
        // 使用静态数据将商品信息列表显示在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);
        
        ModelAndView modelAndView = new ModelAndView();
        //将数据填充到request
//      request.setAttribute("itemsList", itemsList);
        modelAndView.addObject("itemsList", itemsList);
        //指定转发的jsp页面
        modelAndView.setViewName("/WEB-INF/jsp/itemsList.jsp");
        return modelAndView;
    }

}

2.8 配置Handler

 <!-- 配置Handler 由于使用了BeanNameUrlHandlerMapping处理映射器,name配置为url -->
        <bean id="itemController1" name="/itemList.action"
            class="com.hao.controller.ItemController1" />

2.9 配置视图解析器

<!-- 配置视图解析器 要求将jstl的包加到classpath -->
<!-- ViewResolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />

</bean>

三、其它非注解处理器映射器和适配器

3.1 映射器

1. BeanNameUrlHandlerMapping(映射器)(上面例子已讲解)

2. SimpleUrlHandlerMapping(映射器)

<bean id="itemController1" name="/itemList.action"
      class="com.hao.controller.ItemController1" />
  
<!--简单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>

3.2 适配器

1. SimpleControllerHandlerAdapter(适配器)(上面例子已讲解)

2. HttpRequestHandlerAdapter(适配器)

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);
    
   }
}

四、注解映射器和适配器

4.1 注解映射器

4.2 注解适配器

4.3 注解开发Hanlder

@Controller
public class ItemController3 {
    //商品列表,@RequestMapping中url建议和方法名一致,方便开发维护
    @RequestMapping("/queryItems")
    public ModelAndView queryItems(){
        
    // 使用静态数据将商品信息列表显示在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);
        
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("itemsList", itemsList);
    //指定逻辑视图名
    modelAndView.setViewName("itemsList");
    
    return modelAndView;
    }
    //商品添加
        
    //商品删除 
    
}

4.4 配置Handler

<!-- 注解的handler,单个配置 -->
    <!-- <bean class="com.hao.controller.ItemController3"/> -->
    <!-- 使用spring组件扫描 -->
    <context:component-scan base-package="com.hao.controller" />

五、注解开发详解

5.1 @RequestMapping

5.2 关于Controller方法返回值

5.3 redirect重定向

5.4 forward转发

5.5 @ModelAttribute

//单独将商品类型的方法提出来,将方法返回值填充到request,在页面显示
    @ModelAttribute("itemsType")
    public Map<String, String> getItemsType()throws Exception{
        
        HashMap<String, String> itemsType = new HashMap<String,String>();
        itemsType.put("001", "数码");
        itemsType.put("002", "服装");
        return itemsType;
        
    }
商品类别:
<select>
    <c:forEach items="${itemsType }" var="item">
            <option value="${item.key }">${item.value }</option>    
    </c:forEach>

</select>

5.6 @RequestBody和@ResponseBody

七、springmvc和struts的区别

六、小结

<!-- 配置视图解析器 要求将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
  2. DispatcherServlet通过适配器去执行Handler,得到ModelAndview
  3. 视图解析,视图解析完成得到一个view
  4. 进行视图渲染 将Model中的数据 填充到request域。

原文:https://www.cnblogs.com/haoworld/p/springmvc-ru-men.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!