分布式商城项目总结二之整合静态页面

2.7.3 整合静态页面

  • 将准备好的静态页面放入WEB-IF下


    静态资源.PNG
  • 由于在web.xml中定义的url拦截形式为“/”表示拦截所有的url请求,包括静态资源例如css、js等。所以需要在springmvc.xml中添加资源映射标签

    
    

2.8 修改taotao-manager-mapper的pom文件

在pom文件加入如下内容:


    
        
            
                src/main/java
                
                    **/*.properties
                    **/*.xml
                
                false
            
        
    

2.9 整合测试

2.10 页面初始化

如果不使用tomcat插件,可以利用idea对tomcat进行配置


欢迎页.PNG

注意:
这里之所以访问localhost:8080/index会自动返回一个index.jsp页面,是因为在web.xml中配置了欢迎页,


        index.html
        index.htm
        index.jsp
        default.html
        default.htm
        default.jsp

欢迎页的功能类似于一个如下的controller:

@Controller
public class indexController {
     @RequestMapping("/index")
     public String showIndex(){
        return "index";
     }

注意:
web.xml中关于DispatcherServlet的url路径配置/,其实有很多讲究,如果url-pattern设置为/,则所有的静态资源都会被拦截,但不会影响jsp,对静态资源的访问都会除去后缀名,处理为对controller的调用。

2.11页面的切换

@Controller
public class PageController {
    //打开首页
    @RequestMapping("/")
    public String showIndex(){
        return "index";
    }
    //展示其他页,儒新增商品,查询商品等等
    @RequestMapping("/{page}")
    public String showPage(@PathVariable String page){
        return page;
    }
}

3. 商品列表查询

3.1 商品列表页面

查询商品列表.PNG

红色画圈部分表示请求对应的jsp为item-list.jsp,对应于2.11 PageControlller中的@RequestMapping("/{page}")

在加载出item-list.jsp,页面发起一个url为/item/list的get请求,请求参数为page和rows,为EasyUI自带的两个参数在item-list.jsp中table的标签上可以看到,如下,

客户端发起get请求:


商品列表请求.PNG

服务端响应回json数据:


商品列表返回结果.PNG

请求返回的数据必须为以下类型的实体转为的json字符串,EasyUI会根据这种格式的json字符串,自动解析json数据,渲染到页面,渲染结果即为上图查询商品列表所示

public class EUDataGridResult {
    private long total;
    private List rows;
    public long getTotal() {
        return total;
    }
    public void setTotal(long total) {
        this.total = total;
    }
    public List getRows() {
        return rows;
    }
    public void setRows(List rows) {
        this.rows = rows;
    }
}

其中rows列表中的实体类属性要与item-list.jsp的table标签中filed属性名一一对应,如下:
TbItem实体:

public class TbItem {
    private Long id;
    private String title;
    private String sellPoint;
    private Long price;
    private Integer num;
    private String barcode;
    private String image;
    private Long cid;
    private Byte status;
    private Date created;
    private Date updated;
//set和get方法省略。。。
}

item-list.jsp的table标签中filed属性:

当Controller返回一个EUDataGridResult对象时,@ResponseBoby会自动将其转为json格式的字符串,


@Controller
public class ItemController {

    @Autowired
    ItemService itemService;

    @RequestMapping("/item/list")
    @ResponseBody
    public EUDataGridResult getItemList(Integer page,Integer rows){
        EUDataGridResult result = itemService.getItemList(page,rows);
        return result;
    }
}

service的实现类中的getItemList方法,分页利用MyBatis的一个插件PageHelper,但是注意该插件对联合查询不友好

@Override
    public EUDataGridResult getItemList(int page, int rows) {
        //查询商品列表
        TbItemExample example = new TbItemExample();
        //分页处理
        PageHelper.startPage(page, rows);
        List list = itemMapper.selectByExample(example);
        //创建一个返回值对象
        EUDataGridResult result = new EUDataGridResult();
        result.setRows(list);
        //取记录总条数
        PageInfo pageInfo = new PageInfo<>(list);
        result.setTotal(pageInfo.getTotal());
        return result;
    }

3.3 分页处理

3.3.1 Mybatis分页插件 - PageHelper说明

如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。

3.3.2 使用方法

第一步:在Mybatis配置xml中配置拦截器插件:


    
    
                
        
    

第二步:在代码中使用

1、设置分页信息:
    //获取第1页,10条内容,默认查询总数count
    PageHelper.startPage(1, 10);
    //紧跟着的第一个select方法会被分页
    List list = countryMapper.selectIf(1);
2、取分页信息
//分页后,实际返回的结果list类型是Page,如果想取出分页信息,需要强制转换为Page,
Page listCountry = (Page)list;
listCountry.getTotal();
3、取分页信息的第二种方法
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());

你可能感兴趣的:(分布式商城项目总结二之整合静态页面)

商品ID 商品标题 叶子类目 卖点 价格 库存数量 条形码 状态 创建日期 更新日期