SSM项目踩坑点


1 静态资源访问

因为代码需要Restful风格,因此在dispatcherServlet中需要配置请求url-pattern为/。但这样静态资源也同样走了这个路径,因为没有Controller可以处理这个请求,因此就会出错。

解决方法:

  • 通过mvc:resources解决。在springmvc配置文件中增加以下节点
<mvc:resources mapping="/img/**" location="/img/"/>
        <mvc:resources mapping="/js/**" location="/js/"/>
        <mvc:resources mapping="/css/**" location="/css/"/>
        <mvc:resources mapping="/fonts/**" location="/fonts/"/>
        <mvc:resources mapping="/static/**" location="/static/"/>
        <mvc:resources mapping="/pages/**" location="/pages/"/>

其中,location表示资源所在目录,mapping表示映射的请求地址,**表示映射resources/下所有的URL,包括子路径(即接多个/)。

  • 通过默认的servlet处理解决。其解决原理是,当servlet匹配路径时,按照一定规则顺序进行匹配(最长匹配、路径匹配、扩展类型匹配)。当所有都匹配不到时,通过defaultServletHandler可以自动处理静态资源。
<mvc:default-servlet-handler/>

1.1 扩展:上述都配置了但是还是无法访问静态资源:因为配置文件没有打包进项目

花了一天的时间才发现问题所在。这个问题就是,所有的配置文件都没有打包进项目

项目正常部署的结果:

在这里插入图片描述
但是我在点击tomcat运行后,上述配置文件并没有打包上。

最后的解决方法:在启动服务器之前,先手动build项目

在这里插入图片描述

2 springmvc从客户端接收日期和向客户端发送日期

2.1 接收日期:@DateFormat

2.2 发送日期:@JsonFormat

@DateTimeFormat(pattern="yyyy-MM-dd") //这个是在方法接收客户端传来的字符串日期参数的时候做转换的
    @JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")   // 这个是处理器(Controller)返回给客户端数据的时候可以转化为字符串日期
    private Date createTime;

2.3 通过在controller中追加initDateFormatBinder方法

@InitBinder
    protected void initDateFormatBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

3 前端disabled的数据无法获取

因为disabled表示的input作用域无法获得参数,因此如果要传递这个值,前端必须手动传递这个值(比如通过url):

...
url = "/team/" + teamId,
data = $("#myForm").serialize() + "&_method=PUT"
...

一定要注意,后端根据team对象动态更新时,必须先给team对象设置teamId。因为team接收客户端参数时没有接收这个参数。

@RequestMapping(value = "{id}", method = RequestMethod.PUT)
    public ResultVO<Team> update(@PathVariable("id") Integer teamId, Team team) {
        team.setTeamId(teamId);
        int update = teamService.update(team);
        if (update == 1) {
            return new ResultVO<>();
        } else {
            return new ResultVO<>(500, "更新失败!");
        }
    }

4 java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.setContentLengthLong(J)V

这种情况下是因为spring-webmvc的版本太高了,设置为5.3.0以下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值