Web开发避坑指北(持续更新)

内容较多可按Ctrl+F搜索


0.目录

1.获取插入数据后自增长主键的值

2.Controller中返回给ajax请求字符串/json会跳转到xxx.jsp

3.ajax请求获得的json无法解析

4.在Controller中使用ServletFileUpload获取的上传文件为null

5.莫名其妙报service和dao里方法的错误

6.ajax请求拿到的数据中文乱码

7.修改嵌套标签里的某一项文本

8.layui其他样式正常,但部分组件无法显示(如开关/单选框)

9.layui弹出框请求别的页面,关闭后按钮无法点击也不报错

10.在服务器运行SQL语句时Unknown collation:’utf8mb4_0900_ai_ci ‘

11.本地正常运行,部署到服务器找不到表

12.Vue项目[plugin:vite:import-analysis] Cannot read properties of undefined (reading 'url')

13.[plugin:vite:json] Failed to parse JSON file, invalid JSON syntax found at position -1


1.获取插入数据后自增长主键的值

原生web写法

public int saveUData(String sql,Object[] objs){
        int rs=0,unum=-1;
        if (conn!=null){
            try{
                ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
                if (objs!=null){
                    for (int i=0;i<objs.length;i++){
                        ps.setObject(i+1,objs[i]);
                    }
                }
                rs=ps.executeUpdate();
                ResultSet generatedKeys = ps.getGeneratedKeys();
                if (generatedKeys.next()) {
                    unum=generatedKeys.getInt(1);
                }
            }catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        return unum;
    }

spring-mybatis写法

    <insert id="saveUData" parameterType="cc.lslink.pojo.UData" useGeneratedKeys="true" keyProperty="unum" keyColumn="unum">
        insert into udata(upwd, utime, upath, utype, uid)
        values (#{upwd}, #{utime}, #{upath}, #{utype}, #{uid})
    </insert>

 注意会将自增长之后的值赋给传入对象对应的属性,可在service中处理

    @Autowired
    UDataDao udd;
    public int saveUData(UData uData) {
        udd.saveUData(uData);
        return uData.getUnum();
    }

2.Controller中返回给ajax请求字符串/json会跳转到xxx.jsp

与 Spring MVC 中的视图解析器配置有关,如下面代码前缀设置为 /,表示视图的路径会从项目的根目录开始,后缀设置为 .jsp,表示视图解析时会自动添加 .jsp 后缀

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/"></property>
       <property name="suffix" value=".jsp"></property>
    </bean>

 可以使用@ResponseBody注解来告诉 Spring MVC 不要解析视图

或者返回ResponseEntity<String>对象来明确告诉 Spring MVC 返回的是数据而不是视图。

    @RequestMapping(value = "/login",method = RequestMethod.POST)
    @ResponseBody
    public String login(@RequestParam("uname") String uname, @RequestParam("upwd") String upwd, HttpSession session) {

        ...

        JsonMessage<User> JSM = new JsonMessage<>("300", "登录成功", user);
        return JSM.toJSONString();;
    }

3.ajax请求获得的json无法解析

如在回调函数里打印data可以得到json,但打印data.code会输出undefined

八成是你没指定接收的返回值类型dataType

        $.ajax({
          url:"/getUname",
          type:"post",
          dataType: "json", //这里需要指定json,否则默认字符串
          data:{uname:uname},
          success:function(data){
            if(data.code=="201"){
              xxx
            }else if(data.code=="200"){
              xxx
            }
          },error:function(){
            console.log("ajax请求失败!!!")
          }
        });

4.在Controller中使用ServletFileUpload获取的上传文件为null

如下面所示

    @RequestMapping(value = "/uploadFile",method = RequestMethod.POST)
    public void uploadFile(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
        ServletFileUpload upload = new ServletFileUpload (new DiskFileItemFactory());
        upload.setHeaderEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        List<FileItem> items = upload.parseRequest(request);

        ...
    }

可以改成Spring MVC 提供的MultipartResolver来处理文件上传

    <!-- 文件上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置默认的编码格式: -->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 设置最大上传文件的总大小(字节) -->
        <property name="maxUploadSize" value="52428800"></property>
        <!-- 设置单个文件上传的大小: -->
        <property name="maxInMemorySize" value="52428800"></property>
    </bean>
    @RequestMapping(value = "/uploadFile",method = RequestMethod.POST)
    public void uploadFile(@RequestParam("file") MultipartFile file) throws IOException, ClientException {
        String fileName = file.getOriginalFilename();
        
        ...
    }

5.莫名其妙报service和dao里方法的错误

从头到尾检查dao对应的mapper文件!

即使是其他没用到的方法有错误也会报错!

6.ajax请求拿到的数据中文乱码

Controller注解里加上produces="text/html;charset=UTF-8"

    @RequestMapping(value = "/login",method = RequestMethod.POST,produces="text/html;charset=UTF-8")
    @ResponseBody
    public String login(@RequestParam("uname") String uname, @RequestParam("upwd") String upwd, HttpSession session) {
            xxx
    }

7.修改嵌套标签里的某一项文本

如要在js里修改tester

<a href="javascript:;" id="userInfo">
  <img src="../uicons/default.png" id="uicon" class="layui-nav-img">
      tester
</a>

使用下列方法均会出现各种问题

$("#userInfo").contents().last().replaceWith("New Text Here");
$("#userInfo").contents().last()[0].nodeValue = 'New Text Here';

建议直接给tester套一层标签,然后用jquery选择器

<a href="javascript:;" id="userInfo">
  <img src="../uicons/default.png" id="uicon" class="layui-nav-img">
  <span id="userName">tester</span>
</a>

//js
$("#userName").text(user.uname);

8.layui其他样式正常,但部分组件无法显示(如开关/单选框)

缺少layui.js

9.layui弹出框请求别的页面,关闭后按钮无法点击也不报错

可以参考我的另一个帖子

10.在服务器运行SQL语句时Unknown collation:’utf8mb4_0900_ai_ci ‘

版本不一致导致的

打开sql文件,将文件中的所有 utf8mb4_0900_ai_ci替换为utf8_general_ci ,utf8mb4替换为utf8

11.本地正常运行,部署到服务器找不到表

windows系统上表名、列名还是数据库名默认不区分大小写

在类Unix系统(如 Linux、Mac OS X 等)上,MySQL 默认区分大小写

可通过配置项 lower_case_table_names 修改

12.Vue项目[plugin:vite:import-analysis] Cannot read properties of undefined (reading 'url')

尝试更新vite

npm install vite@latest

13.[plugin:vite:json] Failed to parse JSON file, invalid JSON syntax found at position -1

确保文件内容是有效的 JSON 格式。每个属性应该用双引号括起来,并且键值对之间使用冒号分隔。例如:

{
  "key": "value"
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0x3fffff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值