SpringMVC入门程序实现

前言

此学习笔记是基于传智播客旗下的讲解视频的,因此第一个入门程序的实现也是基于此,旨在通过实践操作了解springmvc的运用以及对其工作机制能有个理解。

入门程序

1. 环境准备

1.1导入 Spring所有jar包(创建项目过程省略):


SpringMVC入门程序实现_第1张图片
image.png

1.2 数据库准备
环境:MySQL57、
工具:Navicat
第一步:建表

CREATE TABLE `items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL COMMENT '商品名称',
  `price` float(10,1) NOT NULL COMMENT '商品定价',
  `detail` text COMMENT '商品描述',
  `pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
  `createtime` datetime NOT NULL COMMENT '生产日期',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `sex` char(1) DEFAULT NULL COMMENT '性别',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '下单用户id',
  `number` varchar(32) NOT NULL COMMENT '订单号',
  `createtime` datetime NOT NULL COMMENT '创建订单时间',
  `note` varchar(100) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `FK_orders_1` (`user_id`),
  CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `orderdetail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `orders_id` int(11) NOT NULL COMMENT '订单id',
  `items_id` int(11) NOT NULL COMMENT '商品id',
  `items_num` int(11) DEFAULT NULL COMMENT '商品购买数量',
  PRIMARY KEY (`id`),
  KEY `FK_orderdetail_1` (`orders_id`),
  KEY `FK_orderdetail_2` (`items_id`),
  CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

开启数据库服务,打开Navicat连接到Mysql,新建查询,把SQL命令复制过去执行。
第二步:插入数据

insert  into `items`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,'台式机',3000.0,'该电脑质量非常好!!!!',NULL,'2015-02-03 13:22:53'),(2,'笔记本',6000.0,'笔记本性能好,质量好!!!!!',NULL,'2015-02-09 13:22:57'),(3,'背包',200.0,'名牌背包,容量大质量好!!!!',NULL,'2015-02-06 13:23:02');
insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'王五',NULL,'2',NULL),(10,'张三','2014-07-10','1','北京市'),(16,'张小明',NULL,'1','河南郑州'),(22,'陈小明',NULL,'1','河南郑州'),(24,'张三丰',NULL,'1','河南郑州'),(25,'陈小明',NULL,'1','河南郑州'),(26,'王五',NULL,NULL,NULL);
insert  into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,'1000010','2015-02-04 13:22:35',NULL),(4,1,'1000011','2015-02-03 13:22:41',NULL),(5,10,'1000012','2015-02-12 16:13:23',NULL);
insert  into `orderdetail`(`id`,`orders_id`,`items_id`,`items_num`) values (1,3,1,1),(2,3,2,3),(3,4,3,4),(4,4,2,3);

2.配置前端控制器(DIspaterServlet)

在WEB-INF目录下创建 web.xml,以下前端控制器、适配器、映射器的配置都是在此文件中完成。

配置Spring MVC的入口 DispatcherServlet,把所有的请求都提交到该Servlet
注意: springmvc,springmvc这个名字在下一步会用到



  springmvcfirst1208
  
  
  
    springmvc
    org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:springmvc.xml
        
  
  
  
    springmvc
    *.action
  


1.此处配置有两种方式:

  • 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析。
  • 第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析(使用此种方式可以实现 RESTful风格的url)。
    image.png

    注意:第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,
    仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错。
  1. 标签中contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等)
    如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml)
    
        contextConfigLocation
        classpath:springmvc.xml
    

3.配置处理器适配器

在WEB-INF目录下创建 springmvc.xml(如果没有配置contextConfigLocation,那么创建springmvc-servlet.xml)
springmvc.xml 与上一步中的 springmvc
springmvc对应。

    

通过查看源代码我们可以发现此适配器能执行实现 Controller接口的Handler。
SpringMVC入门程序实现_第2张图片
image.png

Handler执行完毕返回ModelAndView,所以不先着急配置映射器,因为Handler开发完毕配置映射器时能自动找到Handler。

4.开发Handler

需要实现Controller,由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行。

4.1 在下图结构中创建po,可使用mybatis逆向工程生成商品模型数据(如果没有使用过Mybatis的话手工创建也是可行的)
SpringMVC入门程序实现_第3张图片

由于内容太多,此处只给出一个Items示例:

import java.util.Date;

public class Items {
    private Integer id;

    private String name;

    private Float price;

    private String pic;

    private Date createtime;

    private String detail;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public Float getPrice() {
        return price;
    }

    public void setPrice(Float price) {
        this.price = price;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic == null ? null : pic.trim();
    }

    public Date getCreatetime() {
        return createtime;
    }

    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail == null ? null : detail.trim();
    }
}

4.2 在如下结构中创建ItemController1.class
SpringMVC入门程序实现_第4张图片
image.png

主要代码如下:

public class ItemsController1 implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) 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的setAttribut,在jsp页面中通过itemsList取数据
        modelAndView.addObject("itemsList", itemsList);
        
        //指定视图
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

        return modelAndView;
    }
}

5.视图编写

如图新建一个itensList.jsp页面


SpringMVC入门程序实现_第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"%>




查询商品列表

 
查询条件:
商品列表:
商品名称 商品价格 生产日期 商品描述 操作
${item.name } ${item.price } ${item.detail } 修改

7.配置Handler


    
    

8.配置映射器


9.配置视图解析器


10.Tomcat部署调试

此处略过,我遇到的问题比较多,如若全部写下,则篇幅过长。

访问地址:http://localhost:8080/springmvcfirst1208/queryItems.action(地址视项目而定),到此处springMVC的入门程序就算完成了。

你可能感兴趣的:(SpringMVC入门程序实现)