SpringMVC入门(一)

一、SpringMVC框架

1.1、什么是SpringMVC

SpringMVC是基于MVC的web层框架;

SpringMVC是Spring框架的一个模块;

1.2、MVC在B/S系统下的应用

1.3、SpringMVC框架

1、用户发送请求到前端控制器(DispatcherServlet)

2、前端控制器请求HandlerMapping查找Handler

根据请求的url和xml配置或注解进行查找

3、HandlerMapping向前端控制器返回Handler

4、前端控制器请求处理器适配器执行Handler

5、处理器适配器执行Handler

6、Handler执行后向处理器适配器返回ModelAndView

ModelAndView是SpringMVC框架的底层对象,包括Model和View 

7、处理器适配器向前端控制器返回ModelAndView

8、前端控制器请求视图解析器进行视图解析

根据逻辑视图名解析成真正的视图 

9、视图解析器向前端控制器返回View

10、前端控制器进行视图渲染

视图渲染将模型数据(ModelAndView对象中)填充到request域 

11、前端控制器向用户响应结果

1.4、组件

1、前端控制器DispatcherServlet

接收用户请求、并响应结果。DispatcherServlet减少了其它组件之间的耦合度。

2、处理器映射器HandlerMapping

根据请求的url和xml配置或注解查找Handler

3、处理器适配器HandlerAdapter

按照特定规则(HandlerAdapter要求的规则)执行Handler

4、处理器Handler

按照HandlerAdapter的要求编写Handler

5、视图解析器ViewResolver

根据逻辑视图名解析成真正的视图

6、视图View

该接口的实现类支持不同的View类型

二、入门程序

2.1、导入Spring相关的jar包

2.2、配置前端控制器

web.xml中配置:

    <!-- springmvc前端控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!-- contextConfigLocation配置springmvc加载的配置文件位置,包括处理器映射器、适配器等 -->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

url-pattern的配置说明:

  1. *.action:由DispatcherServlet解析以.action结尾的url。
  2. /:由DispatcherServlet解析所有访问的url,而静态文件需要配置为不让DispatcherServlet解析。
  3. /*:配置不对。首先不能根据jsp地址找到Handler,会报错;其次在转发到jsp页面时,DispatcherServlet仍然解析该jsp地址。

2.3、配置处理器适配器

classpath下的springmvc.xml中配置处理器适配器:

    <!-- 处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

所有处理器适配器都实现了HandlerAdapter接口。

通过查看源代码,该适配器能执行实现了Controller接口的Handler。

public class SimpleControllerHandlerAdapter implements HandlerAdapter {

	@Override
	public boolean supports(Object handler) {
		return (handler instanceof Controller);
	}

	@Override
	public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {

		return ((Controller) handler).handleRequest(request, response);
	}

	@Override
	public long getLastModified(HttpServletRequest request, Object handler) {
		if (handler instanceof LastModified) {
			return ((LastModified) handler).getLastModified(request);
		}
		return -1L;
	}

}

2.4、编写Handler

需要实现Controller接口,SimpleControllerHandlerAdapter适配器才会执行。

package cn.caijiajia.ssm.controller;

import cn.caijiajia.ssm.po.Items;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author:chicago
 * @Date:2018/10/23 下午10:15
 */
public class ItemsController implements Controller {
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws Exception {
        // 调用Service查询数据库,查询商品列表,使用静态数据模拟
        List<Items> itemsList = new ArrayList<Items>();
        // 向List中填充静态数据
        Items items_1 = new Items();
        items_1.setName("联想笔记本");
        items_1.setPrice(5000f);
        items_1.setDetail("ThinkPad T430联想笔记本电脑!");

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

        itemsList.add(items_1);
        itemsList.add(items_2);

        // 返回ModelAndView
        ModelAndView modelAndView = new ModelAndView();
        // 相当于request的setAttribute(),在jsp页面中即可通过itemsList获取数据
        modelAndView.addObject("itemsList", itemsList);

        // 指定视图
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

        return modelAndView;
    }
}

2.5、编写视图

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>查询商品列表</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/item/queryItem.action" method="post">
    查询条件:
    <table width="100%" border=1>
        <tr>
            <td><input type="submit" value="查询"/></td>
        </tr>
    </table>
    商品列表:
    <table width="100%" border=1>
        <tr>
            <td>商品名称</td>
            <td>商品价格</td>
            <td>生产日期</td>
            <td>商品描述</td>
            <td>操作</td>
        </tr>
        <c:forEach items="${itemsList }" var="item">
            <tr>
                <td>${item.name }</td>
                <td>${item.price }</td>
                <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
                <td>${item.detail }</td>

                <td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a></td>

            </tr>
        </c:forEach>

    </table>
</form>
</body>

</html>

2.6、配置Handler

配置Handler在Spring容器中加载。

    <!-- 配置Handler -->
    <bean id="itemsController" name="/queryItems.action" class="cn.caijiajia.ssm.controller.ItemsController"/>

2.7、配置处理器映射器

    <!--
    处理器映射器
    将bean的name作为url进行查找,需要在配置Handler时指定bean的name
     -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

2.8、配置视图解析器

    <!--
    视图解析器
    解析jsp,默认使用jstl标签
     -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值