天猫整站(简易版)SSM——踩过的坑

1.视图无法解析404

在spring mvc.xml中没有配置注解驱动

<mvc:annotation-driven />

那么<mvc:annotation-driven />具体的作用是什么呢?

其对应的实现类是org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser。

通过阅读类注释文档,发现这个类主要是用来向工厂中注册了

  • RequestMappingHandlerMapping

  • BeanNameUrlHandlerMapping

  • RequestMappingHandlerAdapter

  • HttpRequestHandlerAdapter

  • SimpleControllerHandlerAdapter

  • ExceptionHandlerExceptionResolver

  • ResponseStatusExceptionResolver

  • DefaultHandlerExceptionResolver 

    上面几个Bean实例。这几个类都是用来做什么的呢?

    前两个是HandlerMapping接口的实现类,用来处理请求映射的。其中第一个是处理@RequestMapping注解的。第二个会将controller类的名字映射为请求url。

    中间三个是用来处理请求的。具体点说就是确定调用哪个controller的哪个方法来处理当前请求。第一个处理@Controller注解的处理器,支持自定义方法参数和返回值(很酷)。第二个是处理继承HttpRequestHandler的处理器。第三个处理继承自Controller接口的处理器。

    后面三个是用来处理异常的解析器。

2.加载webapp下的静态资源文件

在adminHeader.jsp中要引入webapp下的css、img和js等资源文件,如果使用相对路径访问会发生错误,所以这里采用绝对路径的访问方法,即在访问的路径前加上项目名。

3.部署问题

tomcat部署时有两种部署方式:war和war exploded。

区别:

war模式:将web工程以包的形式上传到服务器

工程target目录下会生成war包, 并且解压后的war包会被部署到tomcat的webapp 目录下。注意:如果application-context 设置为 /, tomcat目录下不会有解压后的war文件,只有指定文件目录,才会生成文件夹,这个文件夹作为项目的根目录。

war exploded模式:将web工程以当前文件夹的位置关系上传到服务器

此时在tomcat的文件目录中不会有解压的war文件夹。如果用idea, 它会在${user.home}/.IntelliJIdea/system/tomcat 目录下生成项目的文件夹,里面包含了tomcat的配置,日志等信息。

/conf/Catalina/localhost 目录下有 *.xml 配置文件,指定了项目的路径 

就是工程目录中target里的未压缩的war文件。

两种部署方式获取上下文路径

获取上下文环境绝对路径的代码:

String contextPath = request.getSession().getServletContext().getRealPath("/");

war模式获取到的是tomcat的所在位置

war exploded模式取到的是项目target的位置

2. 前端首页显示问题

2.1 修改productsAsideCategorys.jsp

在遍历分类对应的商品时,修改字段c.productsRow。保持和pojo中的属性一致。

2.2 修改homepageCategoryProducts.jsp

显示全部商品时,图片的显示一定要与Product中的字段一致。

3.  比较器

若一个类实现了Comparable接口,就意味着“该类支持排序”。 假设“有一个List列表(或数组),里面的元素是实现了Comparable接口的类”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。

Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式:

第一种直接对list进行排序

public static <T extends Comparable<? super T>> void sort(List<T> list) {
        list.sort(null);
    }

第二种可以自定义排序规则,实现Comparator接口就可以了。

public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);
    }

前端中有商品排序功能,需要提供五个比较器:综合、人气、新品、销量和价格。

给出一个示例:

自定义排序规则

package comparator;

import com.li.tmall.pojo.Product;

import java.util.Comparator;

/**
 * @Author: 98050
 * Time: 2018-09-27 23:16
 * Feature:
 */
public class ProductAllComparator implements Comparator<Product> {
    @Override
    public int compare(Product o1, Product o2) {
        return o2.getReviewCount()*o2.getSaleCount() - o1.getReviewCount()*o1.getSaleCount();
    }
}

Controller中调用

4.登录状态

最简单的将用户对象存放在session中。 

5.订单数量的计算

前端页面要显示订单成交记录数,所以必须是买家确认收货后,才算是真正的订单完成。

6.后台管理中删除问题

因为数据库中外键的约束,在后台进行删除操作时会发生异常,要进行级联删除。

7.前端购物车问题

页面右上角购物车中的商品数量不能实时刷新

8. 商品库存问题如何解决?

9.订单不能删除,只能修改其状态

10.后台不能查看收货地址

11. 我的订单操作页面,当session中的user属性过期后,删除时发生错误

猜你喜欢

转载自blog.csdn.net/lyj2018gyq/article/details/82747500