java web开发填坑记

Posted by
内容纲要

以下是我在java web开发中遇到的问题以及解决办法:

导入xStream运行出错

  • 去掉dom4j的依赖

启用Mybatis驼峰自动转换

  • 在Mybatis config 里添加
    <settings>
        <!--开启驼峰自动转换-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    </

    同类型转换错误

  • 去掉以下依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

防止浏览器缓存

  • 针对ie等浏览器
  • url添加?new Date()
  • url添加?时间戳
  • url添加?随机数

编辑完成后列表刷新的逻辑

  • 通过sql的order by进行排序
  • 为了便于用户查看,将item放到最前面(第一项)

线程安全的缓存Map

  • ConcurrentReferenceHashMap可以指定引用级别(比如弱引用)

    public class TestConcurrentReferenceHashMap {
    
    public static void main(String[] args) {
        ConcurrentReferenceHashMap map = new ConcurrentReferenceHashMap(16, ConcurrentReferenceHashMap.ReferenceType.WEAK);
        map.put("key","val");
    
        System.out.println(map);
    
        System.gc();
        try {
            Thread.currentThread().sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    
        System.out.println(map);
    
    }
    }

多表间的关系一定要和相关功能开发的同事沟通清楚

mybatis 模糊查询时特殊符号的处理

https://blog.csdn.net/gm371200587/article/details/81218902

```

#### mybatis 要加@Param
以下几种情况下必须加
https://cloud.tencent.com/developer/article/1471392

#### 定时任务重复执行的问题
* 有可能是多个项目连接同一个数据库,导致定时任务重复执行。

#### 下载文件名乱码
```java
String title = request.getParameter("exportTitle");
        //解决火狐浏览器文件名中文乱码问题
        String agent = request.getHeader("User-Agent");
        //根据不同浏览器进行不同的编码
        String realFilename = "";
        if (agent.contains("MSIE")) {
            // IE浏览器
            realFilename = URLEncoder.encode(title, "utf-8");
            realFilename = realFilename.replace("+", " ");
        } else if (agent.contains("Firefox")) {

            realFilename = "=?UTF-8?B?" + (new String(Base64.encodeBytes(title.getBytes("UTF-8")))) + "?=";
            // 火狐浏览器,此处使用java8  
        } else {
            // 其它浏览器
            realFilename = URLEncoder.encode(title, "utf-8");
        }

HttpClient获取到的html和浏览器里获取到的不一样

  • 因为HttpClient无法执行js

因为or导致慢sql的问题

  • 通过union的方式实现or的功能

静态类中获取service

  • 通过ApplicationContextAware获取ApplicationContext中的已经实例化的service

Mybatis provider使用占位符

  • provider的方法的参数为Map<String, Object> param
  • 往param里put想要调用的参数,然后调用
    param.put(String.valueOf(ss+i),ss+i);
    leftJoin.append(" where ss=" + "#{"+ss+i+"}");

jsp第一次请求时生成class和Java

url含有中文后台报400的问题

  • 前端双重编码
  • 后端解码

Leave a Reply

您的电子邮箱地址不会被公开。