项目1在线交流平台-1.SpringBoot整合SSM环境准备-5.项目调试技巧与git版本控制

参考牛客网高级项目教程

常见调试方法

  • 根据响应状态码提示
    • 可大致知道问题出现的大方向,从哪方面去调试处理
  • 服务端断点调试技巧
  • 客户端断点调试技巧
    • 对前后端有怀疑的程序进行调试跟踪,分析变量、执行过程,进行排查
  • 设置日志级别,并将日志输出到不同的终端
    • 通过日志打印的信息,进行排查,特别是对mybaits的sql问题,很有效

1. 常见响应状态码

官网

状态码

200成功响应

Status Code:200
  • 表示响应成功,很常见的一个状态

300状态码

301(转发跳转)
  • 表示客户端跳转,永久性跳转,请求转发一般在servlet中使用如下代码

    • response.setStatus(301);

    • response.setHeader(“Location”,“fail.html”);

    • springMVC: return "/index"或return “forward:/index”

  • url的访问路径名不改变改变

    // 转发/hello3路径网页的请求
    servletContext.getRequestDispatcher("/hello3").forward(req, resp); 
    
    在这里插入图片描述
302(重定向):
  • 价值,降低耦合,使功能相对独立,实现功能之间的跳转

  • 客户端跳转,临时性的跳转

  • url访问地址会发生变化

例如

  • 点击登录表单login.jsp静态页面:
    • 表单提交后,会访问…/login路径的服务端servlet,
    • sevlet处理完数据后,会将请求返回给客户端,让客户端重定向去访问index.jsp页面
      • 这个是重要逻辑,登录页面与主页页面独立,
      • sevlet或controller只负责处理验证信息,决定两个页面的跳转=
    • 然后客户端访问index页面,得到响应结果
  • 点击登录后,跳转到登录请求的url,登录请求url会重定向index页面
请求转发与重定向的区别
  • 请求转发是A通过中间B获取C的信息
    • 访问路径名url不会改变
  • 重定向是三角关系,A请求B,B给了C的地址,让A去请求C
    • 访问路径名url会改变
在这里插入图片描述
  • 重定向-A与B没有耦合,A中数据无法带给B
  • 是两次请求,只是A建议浏览器访问B

在这里插入图片描述

  • 转发-A与B有耦合,A中数据可以转发给B,返回给浏览器
  • 只有一次请求,浏览器只认识A,不认识B

在这里插入图片描述

contreller返回模板视图名与返回路径名的区别
  • 在SpringMVC中,controller封装完model,
  • 如果返回逻辑视图文件名,
    • return “/index”; 指的是渲染模板视图页面,自动拼接模板文件的相对路径加后缀名
    • 访问的是这个资源文件的文件名地址,如html或jsp,将渲染结果返回给dispatchServlet,再展现给浏览器
    • 当然,这些视图文件,通过url+文件名,本身也可以直接显示,不过单独显示的是静态网页
  • 如果返回的是url路径名,
    • return “redirect:/index”;重定向,是访问另一个…/index的url地址
    • 会直接让浏览器访问这个url,会自动跳转到指定页面,并刷新显示
其他300状态码
  • status:304
  • 304 表示资源未被修改。当不是第一次访问一个静态页面或者图片的时候,就会得到这么一个提示。
  • 这是服务端提示浏览器,这个资源没有发生改变,你直接使用上一次下载的就行了,不需要重新下载。 这样就节约了带宽,并且浏览器的加载速度也更快。

客户端响应

404 Not Found
  • Status Code:404 表示访问的页面不存在,表示一个浏览器的错误,就是服务端没提供这个服务,但是你却去访问。
  • 一般检查路径优先
    • 即访问路径有没有写错
    • 服务端的url映射有没有问题

服务端响应

500 Internal Server Error
  • Status Code:500 表示服务端的错误,一般检查servlet。

其他相关

  • Status Code:100 表示继续

  • Status Code:401 表示未授权

  • Status Code:402 表示需要付费(很少见)

  • Status Code:403 表示禁止

  • Status Code:405 表示方法不被允许

  • Status Code:406 表示无法接受(很少见)

  • Status Code:408 表示请求超时

  • Status Code:413 表示实体过大(这个什么鬼)

  • Status Code:507 表示存储不足

2. 断点调试技巧

  • 服务端用idea断点调试,客户端,用浏览器的检查调试功能

  • 设置断点,进行跟踪查看,变量,过程

  • 断点的管理

    在这里插入图片描述

3. 设置日志

logback-spring.xml

  • 在SpringBoot中,配置文件名logback-spring.xml,会自动被加载,如果不是这个名字,不行

设置日志文件的存储位置

  • 将日志文件进行保存,以便于今后的查看检查

  • 文件保存的位置设定,将日志根据不同级别,大小进行归类

    	<contextName>community</contextName>
        <property name="LOG_PATH" value="E:/javaWeb/data"/>
        <property name="APPDIR" value="community2"/>
    

不同日志级别的设定

  • 以error日志级别为例:主要包含以下信息

    • 日志文件名
    • 日志滚动策略:
      • 每个文件最大大小
      • 最多保存时间
      • 是否追加形式存储
      • 日志的格式
      • 过滤的级别
    <!-- error file -->
        <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_PATH}/${APPDIR}/log_error.log</file>
    <!--     滚动策略   -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>5MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
    <!--     以追加形式存储,不是覆盖-->
            <append>true</append>
    <!--     日志的格式-->
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
                <charset>utf-8</charset>
            </encoder>
    <!--     过滤器-->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>error</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    

控制台输出设定

  • 设置控制台输出的级别,输出在设置级别以上的日志
<!-- console -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
    </appender>

指定文件日志级别设定

  • 默认的日志级别:
  • 嵌套其他级别的设定
<!-- 指定路径下的文件设定为debug日志级别-->
    <logger name="com.nowcoder.community" level="debug"/>
<!--根目录下所有jar包下的文件的日志级别设定,默认info-->
    <root level="info">
        <appender-ref ref="FILE_ERROR"/>
        <appender-ref ref="FILE_WARN"/>
        <appender-ref ref="FILE_INFO"/>
        <appender-ref ref="STDOUT"/>
    </root>

使用测试:

  • 使用工厂默认创建日志对象
  • 以当前类作为日志对象,便于观察
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class LoggerTest {
    private static final Logger logger = LoggerFactory.getLogger(LoggerTest.class);

    @Test
    public void testLogger() {
        System.out.println(logger.getName());

        logger.debug("debug log");
        logger.info("info log");
        logger.warn("warn log");
        logger.error("error log");

    }
}
com.nowcoder.community.LoggerTest
2022-02-23 16:34:48,801 DEBUG [main] c.n.c.LoggerTest [LoggerTest.java:21] debug log
2022-02-23 16:34:48,802 INFO [main] c.n.c.LoggerTest [LoggerTest.java:22] info log
2022-02-23 16:34:48,802 WARN [main] c.n.c.LoggerTest [LoggerTest.java:23] warn log
2022-02-23 16:34:48,802 ERROR [main] c.n.c.LoggerTest [LoggerTest.java:24] error log

4. 版本控制:

在这里插入图片描述

  • 分布式版本控制

官网

https://git-scm.com/book/zh/v2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值