一、SpringMVC中的异常处理
1.1异常处理的思路

系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

系统的 dao、service、controller 出现都通过 throws Exception 向上抛出,最后由 springmvc 前端

控制器交由异常处理器进行异常处理,如下图:

1.2 实现步骤

1.2.1创建Maven项目springmvc_day02_exception

pom依赖文件:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.xiaomifeng1010</groupId><artifactId>springmvc_day02_03_exception</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>springmvc_day02_03_exception Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><spring.version>5.0.2.RELEASE</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency></dependencies><build><finalName>springmvc_day02_03_exception</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.0.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.20.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.0</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build>
</project>

web.xml配置:

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!--配置解决中文乱码的过滤器--><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

springmvc.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="cn.xiaomifeng1010"/><!-- 视图解析器对象 --><bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean><!--前端控制器,哪些静态资源不拦截--><mvc:resources location="/css/" mapping="/css/**"/><mvc:resources location="/images/" mapping="/images/**"/><mvc:resources location="/js/" mapping="/js/**"/><!--配置异常处理器--><bean id="sysExceptionResolver" class="cn.xiaomifeng1010.exception.SysExceptionResolver"/><!-- 开启SpringMVC框架注解的支持 --><mvc:annotation-driven /></beans>

1.2.1 编写异常类和错误页面

error.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head><title>Title</title>
</head>
<body>${errorMsg}</body>
</html>

异常类:

package cn.xiaomifeng1010.exception;/*** 自定义异常类*/
public class SysException extends Exception{// 存储提示信息的private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public SysException(String message) {this.message = message;}}

1.2.2 自定义异常处理器

package cn.xiaomifeng1010.exception;import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 异常处理器*/
public class SysExceptionResolver implements HandlerExceptionResolver{/*** 处理异常业务逻辑* @param request* @param response* @param handler* @param ex* @return*/public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {// 获取到异常对象SysException e = null;if(ex instanceof SysException){e = (SysException)ex;}else{e = new SysException("系统正在维护....");}// 创建ModelAndView对象ModelAndView mv = new ModelAndView();mv.addObject("errorMsg",e.getMessage());mv.setViewName("error");return mv;}}

测试controller中方法:

package cn.xiaomifeng1010.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import cn.xiaomifeng1010.exception.SysException;@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/testException")public String testException() throws SysException{System.out.println("testException执行了...");try {// 模拟异常int a = 10/0;} catch (Exception e) {// 打印异常信息e.printStackTrace();// 抛出自定义异常信息throw new SysException("查询所有用户出现错误了...");}return "success";}}

浏览器地址输入:

浏览器友好界面:

查看控制台:

二、SpringMVC 中的拦截器
2.1拦截器的作用

Spring MVC  的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。用户可以自己定义一些拦截器来实现特定的功能。
谈到拦截器,还要向大家提一个词——拦截器链(Interceptor 
Chain)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
说到这里,可能大家脑海中有了一个疑问,这不是我们之前学的过滤器吗?是的它和过滤器是有几分相似,但是也有区别,接下来我们就来说说他们的区别:
过滤器是 servlet 规范中的一部分,任何 java web 工程都可以使用。
拦截器是 SpringMVC 框架自己的,只有使用了 SpringMVC 框架的工程才能用。过滤器在 url-pattern 中配置了/*之后,可以对所有要访问的资源拦截。
拦截器它是只会拦截访问的控制器方法,如果访问的是 jsp,html,css,image 或者 js 是不会进行拦截的。
它也是 AOP 思想的具体应用。
我们要想自定义拦截器, 要求必须实现:HandlerInterceptor 接口。

2.2 自定义拦截器的步骤

2.2.1 创建maven项目springmvc_day02_04_interceptor

pom文件配置:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.xiaomifeng1010</groupId><artifactId>springmvc_day02_04_interceptor</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>springmvc_day02_04_interceptor Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><spring.version>5.0.2.RELEASE</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency></dependencies><build><finalName>springmvc_day02_04_interceptor</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.0.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.20.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.0</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build>
</project>

web.xml文件配置:

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!--配置解决中文乱码的过滤器--><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

springmvc.xml文件配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="cn.xiaomifeng1010"/><!-- 视图解析器对象 --><bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean><!--前端控制器,哪些静态资源不拦截--><mvc:resources location="/css/" mapping="/css/**"/><mvc:resources location="/images/" mapping="/images/**"/><mvc:resources location="/js/" mapping="/js/**"/><!--配置拦截器--><mvc:interceptors><!--配置拦截器--><mvc:interceptor><!--要拦截的具体的方法--><mvc:mapping path="/user/*"/><!--不要拦截的方法<mvc:exclude-mapping path=""/>--><!--配置拦截器对象--><bean class="cn.xiaomifeng1010.interceptor.MyInterceptor1" /> </mvc:interceptor><!--配置第二个拦截器--><mvc:interceptor><!--要拦截的具体的方法--><mvc:mapping path="/**"/><!--不要拦截的方法<mvc:exclude-mapping path=""/>--><!--配置拦截器对象--><bean class="cn.xiaomifeng1010.interceptor.MyInterceptor2" /></mvc:interceptor></mvc:interceptors><!-- 开启SpringMVC框架注解的支持 --><mvc:annotation-driven /></beans>

4.2.1 第一步:编写一个普通类实现HandlerInterceptor接口

package cn.xiaomifeng1010.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 自定义拦截器*/
public class MyInterceptor1 implements HandlerInterceptor{/*** 预处理,controller方法执行前* return true 放行,执行下一个拦截器,如果没有,执行controller中的方法* return false不放行* @param request* @param response* @param handler* @return* @throws Exception*/public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("MyInterceptor1执行了...前1111");// request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);return true;}/*** 后处理方法,controller方法执行后,success.jsp执行之前* @param request* @param response* @param handler* @param modelAndView* @throws Exception*/public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("MyInterceptor1执行了...后1111");// request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);}/*** success.jsp页面执行后,该方法会执行* @param request* @param response* @param handler* @param ex* @throws Exception*/public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("MyInterceptor1执行了...最后1111");}}

第二个拦截器:

package cn.xiaomifeng1010.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 自定义拦截器*/
public class MyInterceptor2 implements HandlerInterceptor{/*** 预处理,controller方法执行前* return true 放行,执行下一个拦截器,如果没有,执行controller中的方法* return false不放行* @param request* @param response* @param handler* @return* @throws Exception*/public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("MyInterceptor1执行了...前2222");// request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);return true;}/*** 后处理方法,controller方法执行后,success.jsp执行之前* @param request* @param response* @param handler* @param modelAndView* @throws Exception*/public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("MyInterceptor1执行了...后2222");// request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);}/*** success.jsp页面执行后,该方法会执行* @param request* @param response* @param handler* @param ex* @throws Exception*/public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("MyInterceptor1执行了...最后2222");}}

在UserController类中测试拦截器:

package cn.xiaomifeng1010.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/testInterceptor")public String testInterceptor(){System.out.println("testInterceptor执行了...");return "success";}}

2.3 拦截器的细节
2.3.1 拦截器的放行

放行的含义是指,如果有下一个拦截器就执行下一个,如果该拦截器处于拦截器链的最后一个,则执行控制器中的方法。
2.3.2  拦截器中方法的说明 

   public interface HandlerInterceptor {/*** 如何调用:*      按拦截器定义顺序调用* 何时调用:*      只要配置了都会调用* 有什么用:*      如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去*      进行处理,则返回 true。*      如果程序员决定不需要再调用其他的组件去处理请求,则返回 false。*/default  boolean  preHandle(HttpServletRequest  request,  HttpServletResponse response, Object
handler)throws Exception {return true;}/*** 如何调用:*      按拦截器定义逆序调用* 何时调用:*      在拦截器链内所有拦截器返成功调用* 有什么用:*      在业务处理器处理完请求后,但是 DispatcherServlet 向客户端返回响应前被调用,*      在该方法中对用户请求 request 进行处理。*/default  void  postHandle(HttpServletRequest  request,  HttpServletResponse response, Object
handler,@Nullable ModelAndView modelAndView) throws Exception {}/*** 如何调用:*      按拦截器定义逆序调用* 何时调用:*      只有 preHandle 返回 true 才调用* 有什么用:*      在 DispatcherServlet 完全处理完请求后被调用,*      可以在该方法中进行一些资源清理的操作。*/default void afterCompletion(HttpServletRequest request, HttpServletResponseresponse, Object handler,@Nullable Exception ex) throws Exception {}}

思考: 如果有多个拦截器,这时拦截器1的preHandle方法返回true,但是拦截器2的preHandle方法返回false,而此时拦截器1的afterCompletion方法是否执行?

2.3.3 拦截器的作用路径 作用路径可以通过在配置文件中配置。


<!-- 配置拦截器的作用范围 --><mvc:interceptors><mvc:interceptor><mvc:mapping path="/**" /><!-- 用于指定对拦截的 url --><mvc:exclude-mapping path=""/><!-- 用于指定排除的 url--><bean id="handlerInterceptorDemo1"class="com.itheima.web.interceptor.HandlerInterceptorDemo1"></bean></mvc:interceptor></mvc:interceptors>

2.3.4 多个拦截器的执行顺序

2.4 拦截器的简单案例(验证用户是否登录)
2.4.1  实现思路

1、有一个登录页面,需要写一个 controller 访问页面

2、登录页面有一提交表单的动作。需要在 controller 中处理。

2.1、判断用户名密码是否正确

2.2、如果正确 向 session 中写入用户信息

2.3、返回登录成功。

3、拦截用户请求,判断用户是否登录

3.1、如果用户已经登录。放行

3.2、如果用户未登录,跳转到登录页面

2.4.2  控制器代码

//登陆页面@RequestMapping("/login")public String login(Model model)throws Exception{return "login";}//登陆提交//userid:用户账号,pwd:密码 @RequestMapping("/loginsubmit")public  String  loginsubmit(HttpSession  session,String  userid,String  pwd)throwsException{//向 session 记录用户身份信息session.setAttribute("activeUser", userid);return "redirect:/main.jsp";}//退出@RequestMapping("/logout")public String logout(HttpSession session)throws Exception{//session 过期session.invalidate();return "redirect:index.jsp";}

2.4.3 拦截器代码

public class LoginInterceptor implements HandlerInterceptor{@OverridePublic boolean preHandle(HttpServletRequest request,  HttpServletResponse response, Object handler)
throws Exception {//如果是登录页面则放行if(request.getRequestURI().indexOf("login.action")>=0){return true;}HttpSession session = request.getSession();//如果用户已登录也放行if(session.getAttribute("user")!=null){return true;}//用户没有登录挑战到登录页面request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);return false;}}

SSM框架之Spring MVC(四)异常处理和拦截器实现相关推荐

  1. 一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程重要

    前言 SSM(Spring+SpringMVC+Mybatis)是目前较为主流的企业级架构方案,不知道大家有没有留意,在我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教 ...

  2. SSM框架之Spring MVC(一)

    一.Spring MVC简单介绍: 1.1 Spring MVC概述 SpringMVC是一种基于Java的实现MVC(Model View Controller)设计模型的请求驱动类型的轻量级Web ...

  3. SSM框架之Spring MVC(三)http响应、文件上传

    一.响应数据和结果视图 1.1 返回值分类 1.1.1 字符串 创建实体类和controller类 实体类User package cn.xiaomifeng1010.domain;import ja ...

  4. SSM框架之Spring MVC(二)常用注解说明

    一.常用注解 1.1RequestParam 1.1.1  使用说明 作用: 把请求中指定名称的参数给控制器中的形参赋值. 属性: value:请求参数中的名称. required:请求参数中是否必须 ...

  5. 超详细整合SSM框架--(Spring + Spring MVC + MyBatis)

    超详细整合SSM框架--(Spring + Spring MVC + MyBatis) SpringMVC框架--文章跳转 Spring框架--文章跳转 Mybatis框架--文章跳转 整合思路 设计 ...

  6. SSM框架:Spring

    SSM框架:Spring 文章目录 前言 一.Spring 1. 简介 2. 优点 3. 组成 4. 拓展 二.IOC理论推导 1. IOC原型引入 2. IOC本质(基本思想) 三.HelloSpr ...

  7. 框架应用 : Spring MVC - 开发详述

    软件开发中的MVC设计模式 软件开发的目标是减小耦合,让模块之前关系清晰. MVC模式在软件开发中经常和ORM模式一起应用,主要作用是将(数据抽象,数据实体传输和前台数据展示)分层,这样前台,后台,数 ...

  8. JavaWeb学习之路——SSM框架之Spring(五)

    前情提要请看JavaWeb学习之路--SSM框架之Spring(四)                                         整合Spring和Mybatis框架 1.在项目的 ...

  9. 如何部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    在学习cocos2dx手游开发的过程中,为了实现用户注册.用户登陆和世界排行榜这些模块,需要用到服务器来搭建平台.以前都是 在本地搭建服务器,在本科期间使用过IIS和Tomcat,感觉在本地搭建服务器 ...

最新文章

  1. python中with类的_在Python中使用`with`的不同类
  2. 安装完python后怎么使用-安装anaconda后该怎么使用
  3. python中字符串编码转换
  4. Python中enumerate用法详解
  5. 基于Token进行身份验证
  6. curl 发送带有Authorization的post请求命令
  7. java 树 右键菜单_jQuery实现自定义右键菜单的树状菜单效果
  8. 启动不起来_国产开源工具:U盘启动工具Ventoy v1.0.29发布——墨涩网
  9. python实现什么功能_Python 实现WC功能
  10. PHP逻辑运算符如何写,PHP 逻辑运算符
  11. C# 线程手册 第四章 线程设计原则 对等线程模型
  12. Hessian Matrix
  13. linux下打包deb文件,制作deb包的三种方法
  14. ios上java代码实现_IOS学习之路五(代码实现UITableView)
  15. 弱口令扫描工具mysql ftp_超级弱口令检查工具
  16. C#语言-输入三角形或者长方形边长,计算其周长和面积并输出
  17. Python IDE、IDLE 和 Tcl/Tk
  18. 基于FPGA的ADS1256讲解
  19. iPhone无法连接Wi-Fi解决方法
  20. Friedman 检验后的two-tailed Nemenyi test和the two-tailed Bonferroni-Dunn test的关键值

热门文章

  1. JavaScript中的“ new”关键字是什么?
  2. ur3 aubo movit机械臂运动
  3. python保存不了_新手,我的python保存不了文件
  4. Android:SQLiteOpenHelper数据库的两套API
  5. 如何做组间差异检验_买套餐送车险,做维修提供代步车,考拉爱车如何实现差异化竞争?...
  6. linux内核系列远程拒绝服务漏洞,预警 | Linux 爆“SACK Panic”远程DoS漏洞,大量主机受影响...
  7. token的作用_说一说Coin和Token有什么不同
  8. OpenCV adaptiveThreshold 自适应阈值
  9. C/C++:copy control (拷贝控制)
  10. java同步队列_Java 中队列同步器 AQS(AbstractQueuedSynchronizer)实现原理