SpringMVC知识点1
SpringMVC框架——初学知识点篇1
注:作者本人也是初学者,所以本文有些总结性见解可能存在问题,但是多数问题都是在上网查询过资料后总结的,如果有逻辑或者原理上的错误,或者见解不同,欢迎在评论区讨论!!!
目录
SpringMVC框架
1.MVC模型
2.SpringMVC在三层架构的位置
3.SpringMVC:一种基于java实现MVC设计模型的请求驱动类型的轻量级WEB框架
回顾(重点)
1)开发步骤
1.导入SpringMVC相关坐标(pom.xml)
2.在web.xml中配置SpringMVC核心控制器
3.创建Controller类(请求控制器)和实体页面
4.使用注解配置Controller类中业务方法的映射地址(在第三步的@RequestMapping上)
5.配置SpringMVC核心文件
6.测试请求
2)初次运用感受
3)访问步骤
下面我们来一一解决初用SpringMVC中遇到的问题吧
1)@RequestMapping注解的运用
1.注解源码
2.注解的使用
2)SpringMVC的数据响应
1.页面的跳转
2.请求转发和重定向
3)获取请求参数
1.通过HttpServletRequest获取请求参数
2.直接通过参数接收
3.通过实体类参数直接获取请求对象。
4)ModelAndView对象
1.介绍
2.基本使用
3.不返回modelandview,如何将处理后的值传送到前台页面
5)域对象共享数据
1.使用HttpServletRequest域对象共享数据
2.使用ModelAndView向request中添加共享数据
3.使用Model向request域对象共享数据
4.使用map向request域对象共享数据
5.使用ModelMap向request域对象共享数据
6.向session域共享数据
7.向Application域共享数据
SpringMVC其实就是一个Servlet,他是基于原生servlet,并且封装了一个功能十分强大的前端控制器DispatcherServlet,以此对请求和相应做出统一处理。
1.MVC模型
2.SpringMVC在三层架构的位置
Mybatis负责处理数据访问层
Spring负责处理业务逻辑层
SpringMVC主要负责处理表现层
3.SpringMVC:一种基于java实现MVC设计模型的请求驱动类型的轻量级WEB框架
回顾(重点):
刚刚学习完javaweb时的项目案例流程,我们都是基于三层架构实现,前端页面布局设置好后我们需要创建servlet按照指定路径去接收客户端发送过来的信息,我们一般单独创建一个类去继承HTTPServlet,重写doPost和doGet方法,单独处理某个功能。以单纯的登录案例来看,我们就需要处理登录信息的LoginServlet类,处理登陆完后的SuccessServlet类,以及登录失败的FailServelet类。
如此布局代码臃肿,Servlet类众多。当时我们提出了以下解决方案:将我们所写的为了完成某个总体业务的一堆Servlet类都转换成一个Servlet类中的多个方法,这样就大大减少了代码的冗余。
为了实现这样的目的,我们查看HTTPServlet内部实现。由于每个类都约束于HttpServlet的doGet和doPost两个方法,我们发现HttpServlet里面的service方法读取了request请求信息,获取了访问方法类别,并且封装为了doGet方法和doPost方法。当浏览器访问我们所写类时,我们的Servlet类中只有doGet和doPost两种方法,那么没有重写的service方法就会继承父类HttpServlet类中的service方法,该方法内部通过request获取请求类型,并且根据不同的类型调用了不同的方法,如此实现了根据访问类型调用doGet方法和doPost方法。
如此一来我们就可以仿造HttpServlet中的设计思想:通过request信息获取我们要调用的方法名,然后再重写service方法,调用方法即可。
我们设计了包含各种各样方法的AllServlet类,以及继承HttpServlet重写service方法的BaseServlet类。以登录案例为例,AllServlet里面有login方法,success方法和fail方法,分别处理登录,登录成功以及登录失败三个问题。而AllServlet继承BaseServlet类,BaseServlet类则负责重写HttpServlet方法,当用户带着请求信息访问AllServlet类时,由于该类没有service方法,因此会调用继承自父类BaseServlet的service方法,此时的service方法已经被我们重写过了,他会通过request的请求信息,获取需要调用的方法名,然后通过java反射机制,通过方法名获取method对象。从而在service中完成对应方法的调用。
如此,我们就可以在同一个Servlet类中书写专门用于处理某一个模块问题的多个方法,相比于之前多个Servlet,代码冗余大幅减少,同时项目结构也更加清晰了。
但是这么写依旧相当麻烦,那有没有什么东西能帮我们实现好了呢?
1)开发步骤
首先我们按照规格打一下整体流程,感受一下springMVC开发与之前使用Servlet开发的不同点
注意:以下代码时基于maven开发,jsp作为前端页面的代码(由于Thymeleaf我们还未学习)
1.导入SpringMVC相关坐标(pom.xml)
<properties><!--定义统一版本--><spring.version>5.2.9.RELEASE</spring.version> </properties><dependencies><dependency><!--spring核心jar包--><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><!--springmvc核心jar包--><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><!--servlet-api包--><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><!--可能会用到的jsp-api包--><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version></dependency> </dependencies>
2.在web.xml中配置SpringMVC核心控制器
<web-app><display-name>Archetype Created Web Application</display-name><!--配置springmvc的核心控制器--><servlet><servlet-name>SpringMVCDispatherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--配置springMVC需要的配置文件--><init-param><!--contextConfigLocation是SpringMVC中已经定义好的参数名,不能写别的--><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!--配置Servlet的对象创建时间,服务器启动应用就创建对象--><!--正常的Servlet初始化实在客服端第一次访问服务器的时候初始化,但是我们的前端控制器DispatcherServlet负责诸多领域,内容庞大所以如果在第一次访问的时候初始化,势必会影响用户第一次使用的体验,所以再次我们将其设置为服务器启动时创建对象。--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>SpringMVCDispatherServlet</servlet-name><!--设置访问路径,该访问路径只对.html .css或者.js等静态资源生效,对.jsp动态资源是不生效的,前端控制其实就是DispatcherServlet,是一个Servlet,他是用来处理前端页面的而jsp文件他本身其实就是一个Servlet,不需要别的Servlet对其进行处理,jsp文件由org.apache.jasper.servlet.JspServlet这个Servlet来处理jsp资源。--><url-pattern>/</url-pattern></servlet-mapping> </web-app>
注意:
1.springmvc.xml是自己在resource包下书写的配置文件,当然可以定义成别的名字
2.jsp文件需要特殊Servlet去处理而不是这里的DispatcherServlet。DispatcherServlet使用"/"去拦截,他的拦截优先级小于处理jsp的拦截器,所以jsp文件会先被他的专属Servlet拦截并且处理,而类似于html这样的静态资源就会被后面的DispatchServlet拦截。如果使用"/*"去拦截,那么他的拦截优先级就会高于jsp专属拦截器,此时jsp会被DispatcherServlet拦截下来当作一个普通的静态前端页面去处理,一般会出错。
3.创建Controller类(请求控制器)和实体页面
@Controller public class HelloController {//括号内的hello是访问该方法的请求路径名称@RequestMapping(value = "/hello")public String hellomethod() {System.out.println("hello...");//返回值的类型为String,内容为想要跳转到的前端页面的名称(不加厚嘴)return "index";} }
4.使用注解配置Controller类中业务方法的映射地址(在第三步的@RequestMapping上)
5.配置SpringMVC核心文件
在第三步中定位的springmvc.xml中书写以下代码
如果使用的是jsp页面:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.tencent"/><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--定义前后缀--><property name="prefix" value="/pages/"></property><property name="suffix" value=".jsp"></property></bean> </beans>
如果使用的是html页面(如果学习过Thymeleaf就使用,当然需要导入Thymeleaf核心jar包)
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.ling"/><!-- 配置Thymeleaf视图解析器 --><bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><property name="order" value="1"/><property name="characterEncoding" value="UTF-8"/><property name="templateEngine"><bean class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver"><bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><!-- 视图前缀 --><property name="prefix" value="/WEB-INF/pages/"/><!-- 视图后缀 --><property name="suffix" value=".html"/><property name="templateMode" value="HTML5"/><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property></bean> </beans>
6.测试请求
我在WEB-INF下定义pages包,包下创建index.jsp,通过服务器地址+ /hello进行初次访问。
2)初次运用感受
回顾一下第一次使用springmvc的感受吧
1.配置的文件还挺多的,同时有点迷迷糊糊,尤其是第二步在web.xml中配置核心控制器,核心控制器是用来干什么的呢?
2.其次就是表现层,表现层由我们原来的一个一个Servlet变成了一个一个方法。而原本放在类上用于配置访问路径的注解@WebServlet(value = "/路径")变成了放在方法上的注解@RequestMapping(value = "/路径")
3.方法的返回值是一个字符串名字,而且恰好是我们想要跳转到的页面的名字。
4.第五步配置SpringMVC核心文件的时候配置了InternalResourceViewResolver,里面我们配置了前缀和后缀,前缀和后缀的名称分别对应了我们要访问的页面前面的路径以及后面的后缀。真实路径 = prefix中配置的内容 + 实体类方法的返回值 + suffix中配置的内容
3)访问步骤
-
第一步,浏览器发送请求给服务器,在服务器中前端控制器DispatcherServlet获取了请求,但是实际上他只是获取了前端传来的信息,实际上他不知道在传来时该请求是否被监听被拦截,如何拦截,拦截几次等。
-
第二步,前端控制器DispatcherServlet向处理映射器HandlerMapping发送请求,请求查询Handler,实际上就是查询整个请求在服务器接收后到底经历了什么样的一个过程。
-
第三步,处理映射器HandlerMapping将查询好的整个请求执行过程封装好,也就是处理器执行链HandlerExecutionChain,并将其返回给前端控制器DispatcherServlet。
-
第四步,获取了整体执行流程的前端控制器开始准备处理请求业务,他需要访问处理器Handler(可以理解为我们所写的Servlet,@RequestMapping注解下的方法),但是前端控制器所带有的一些变量可能不符合处理器的要求,所以前端控制器向处理器适配器HandlerAdaptor(主要负责将前端控制器的数据规范成处理器能够接受的格式)发送请求,请求执行Handler。
-
第五步,处理器适配器HandlerAdaptor将前端控制器发送的数据规范好,并且拿着规范好的数据向处理器发送请求,请求处理数据。
-
第六步,处理器Handler拿到数据,处理请求,把处理好的请求返回给处理器适配器HandlerAdaptor,处理器适配器将处理好的ModelAndView返回给前端控制器,这里Model包含了Request域,里面有着一系列准备响应给前端页面的数据键值对。View里包含了需要访问的路径资源(也就是ModelAndView里面setViewName设置的值。当我们在编写处理器方法时,没有把ModelAndView作为返回值,而是将String路径作为返回值,这个String其实就是View的名字,SpringMVC底层会将其封装为View对象的名字)。
-
第七步,处理器是配置将处理好的数据ModelAndView返回给前端控制器。
-
第八步,前端控制器将View发送给视图解析器(如果没有这一步,那我们所有存入ModelAndView的name值,或者以String作为返回值的路径名都需要写全称。当我们在开发时,处理非常多的业务都需要访问写在同一个目录下的页面,那么每一处都需要写同样的包名,造成代码冗余。使用视图解析器就可以避免冗余,我们设置文件姓名时只需要将不同的部分设置好,相同的部分经过视图解析器去处理,就可以大片减少代码冗余,提升开发效率)(另一种方式去理解,如果我们每一次设置的ModelAndView里面View都是全路径,以String为返回值的方法返回的是全路径,那经过这一步的时候压根就不需要操作)。
-
第九步,视图解析器ViewResolver将解析好的View返回给前端控制器。
-
第十步,前端控制器将处理好的信息,以及处理好的路径发送给视图页面,并且进行视图渲染。
下面我们来一一解决初用SpringMVC中遇到的问题吧
1)@RequestMapping注解的运用
1.注解源码
@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping {String name() default "";@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};RequestMethod[] method() default {};String[] params() default {};String[] headers() default {};String[] consumes() default {};String[] produces() default {}; }
阅读注解源码(抓重点):
1.Target注解中内容表示他可以作用在类上,也可以作用在方法上
2.Retention注解中内容表述他只在运行时生效
3.注解的path属性和value属性一致,所以path是关键属性,当只输入一个值时可以省略value
4.method属性顾名思义,就是定义可以访问的请求方法属性
5.此外我们还需要了解一下params属性,该属性是一个String类型的数组,用于获取只拥有数组内的请求key值。如果请求中没有这个key值,那么该请求就不会被接收处理。
总结:该注解可以作用于方法上也可以作用于类上,注解常用的有三个值,一个是最重要的path属性,用于设置访问路径,第二个method用于获取指定访问方法的请求,第三个params用于获取含有指定键的请求。
2.注解的使用
@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。
-
path/value:用于指定请求路径。
-
method:用于指定当前请求方式
@RequestMapping(value="/hello",method = RequestMethod.POST)
-
params:用于指定限定请求参数的条件。
@RequestMapping(value="/hello",method = {RequestMethod.GET,RequestMethod.POST},params = {"username"})
-
支持简单的表达式
@RequestMapping(value="/hello",method = {RequestMethod.GET,RequestMethod.POST},params = {"username","age!=20"})
- 如果只处理get请求,那么注解可是使用其衍生注解@GetMapping,同样的,如果只处理post请求,可以使用@PostMapping
2)SpringMVC的数据响应
1.页面的跳转
直接返回字符串:通过将返回的字符串与视图解析器的前缀后缀进行拼接后跳转。
2.请求转发和重定向
@RequestMapping("/m1")
public String method1(){
System.out.println("method1...");
return "redirect:/pages/index.jsp";
}
@RequestMapping("/m2")
public String method2(){
System.out.println("method2...");
return "forward:/pages/index.jsp";
}
转发:可以访问WEB-INF下面的文件资源
重定向:无法访问
3)获取请求参数
1.通过HttpServletRequest获取请求参数
HttpServletRequest作为形参,当DispatcherServlet前端控制器通过IOC容器获取Controller对象调用该方法时,会将request实参传入该方法参数。
@RequestMapping("/test1") public String testParam(HttpServletRequest request){String username = request.getParameter("username");String password = request.getParameter("password");System.out.println("username:"+username+",password:"+password);return "target"; }
2.直接通过参数接收
在DispatcherServlet调用该方法时,通过请求request获取请求的键值对,并且根据该方法参数去创建变量。通过变量的名称去匹配请求参数,如果遇到匹配的就赋值,并且将其作为实参传入该方法。
@RequestMapping("/test2") public String testParam(String username, String password){System.out.println("username:"+username+",password:"+password);return "target"; }
注意1:如果请求参数为多个同名key的键值对,比如爱好=篮球,爱好=摄影,那么如果参数使用String类型去接收,那么接收到的数据就会以字符串的形式拼接:“篮球,摄影”。如果参数使用String[]数组类型去接收,那么数组中每个值就是请求参数中所对应的值。
注意2:如果方法参数名与实际请求键值对名称不相同不匹配,那么可以对形参使用@RequestParam注解:
value值为该形参用于接收的请求参数名
required设置是否必须传输此请求参数,默认值为true。(如果为true的话那么发送请求时必须有注解中value配置的请求参数,否者会报错)
defaultValue当value所指定的请求参数没有传输或者传输的值为""时,则使用defaultValue配置的值为形参赋值
3.通过实体类参数直接获取请求对象。
@RequestMapping("/method3") public void method14(User user){System.out.println(user);System.out.println(user.getPassword()); }
public class User {private Integer id;private String username;private String password;@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public User() {}public User(Integer id, String username, String password) {this.id = id;this.username = username;this.password = password;} }
注意1:pojo实体类对象中的属性值必须与请求参数中的键值对对应,否则就无法成功赋值
4)ModelAndView对象
1.介绍
ModelAndView对象顾名思义就是Model和View两个对象的结合,既可以携带数据信息,也可以携带视图信息。Model和View两个对象分别对应SpringMVC中的M和V,而在表现层操作的类正好需要使用@Controller标签配置到bean容器中,又对应了C。所以ModelAndView十分的重要。
在开篇的是我我们提到:
Model(模型):通常指的就是我们的数据模型,主要作用用于封装数据,Model一种概念,主要用于向请求域共享数据。
View(视图):通知指的的是.html或者.jsp 应用,作用一般是进行数据展示的。
Controller(控制):通常指应用程序中处理用户交互的部分,作用就是处理程序的逻辑。
所以这里的Model基本就是存储客户端传送过来的信息,并且将其分装到JavaBean对象中,而Model就是一个存储信息的模型。
而View视图,一般就是前端页面应用。他的名字一般就是html或者jsp文件的名称(不加后缀)。此前以String作为返回值返回的内容,SpringMVC底层都将其封装为View对象的名称。
2.基本使用
@RequestMapping("/m4") public ModelAndView method4() {System.out.println("视图解析器");//创建ModelAndView对象ModelAndView modelAndView = new ModelAndView();//设置View的名称(也就是之前String类型的返回值)modelAndView.setViewName("m4");//设置请求键值对,类似于request.setAttribute(key,value);//这里model起作用,将键值对添加到request域中modelAndView.addObject("username", "zhangsan");//将带有信息的ModelAndView返回return modelAndView; }
此时model将键值对username=zhangsan添加到了request域中,而前台是可以通过request获取到该数据。
3.不返回modelandview,如何将处理后的值传送到前台页面
第一种,使用Model参数存值。
方法的参数中设置Model对象,当服务器调用该方法时会从容器中拿到springmvc创建好的该类型对象,用于存储该值。此时request中就存有了键值对。
@RequestMapping("/m7") public String method7(Model model){System.out.println("m7");model.addAttribute("username","zhangsan");return "index"; }
第二种,使用HttpServletRequest参数存值
@RequestMapping("/m8") public String method8(HttpServletRequest request){System.out.println("m8");request.setAttribute("username","zhangsan");return "index"; }
5)域对象共享数据
1.使用HttpServletRequest域对象共享数据
@RequestMapping("/m16") public String method16(HttpServletRequest request){request.setAttribute("username","zhangsan");request.setAttribute("id",1);return "target"; }
2.使用ModelAndView向request中添加共享数据
此处与上文我们所举的ModelAndView基本使用时的例子是基本一样的。
@RequestMapping("/userModelAndView") public ModelAndView userModelAndView(ModelAndView modelAndView){System.out.println("userModelAndView");modelAndView.setViewName("index");modelAndView.addObject("username","zhangsan");return modelAndView; }
3.使用Model向request域对象共享数据
@RequestMapping("/userModel") public String userModel(Model model){System.out.println("userModel");model.addAttribute("username","zhangsan");return "index"; }
4.使用map向request域对象共享数据
@RequestMapping("/userMap") public String userMap(Map<String,Object> map){map.put("username","zhangsan");return "target"; }
5.使用ModelMap向request域对象共享数据
@RequestMapping("/m16") public String method16(HttpServletRequest request){request.setAttribute("username","zhangsan");request.setAttribute("id",1);return "target"; }
Model、ModelMap、Map三个形参其实在DispatcherServlet调用时都传入了BindingAwareModelMap类型的对象,BindingAwareModelMap与这三个类有着继承和实现的关系,最终的传参也是根据多态的原理进行参数传递。
6.向session域共享数据
@RequestMapping("/useSession") public String useSession(HttpSession session){session.setAttribute("username","zhangsan");return "target"; }
7.向Application域共享数据
@RequestMapping("/useApplication") public String useApplication(HttpSession session){ServletContext servletContext = session.getServletContext();servletContext.setAttribute("username","zhangsan");return "target"; }
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 使用JavaScript实现B站评论区自动点赞工具的思路
JavaScript是什么? JavaScript是跨平台、面向对象的 Web编程脚本语言。绝大多数网站都使用JavaScript,所有现代Web浏览器(无论是桌面、平板还是手机浏览器)都包含JavaScript解释器,这让JavaScript成为有史以来部署最广泛的编程语言。过去十年࿰…...
2024/4/14 7:54:31 - Leetcode-字符串操作
文章目录q6 Z字形变换q14 最长公共前缀q763 划分字母区间q6 Z字形变换 题目传送门 题解 这道题一看就是一道模拟题,找到规律做的会比较快,我看到一位大佬比较简便的做法。做法是先开一个二维数组(字符串数组),然后把相…...
2024/4/14 7:54:56 - java学习day01
一开始老师给我推荐的马士兵腾讯课堂的视频,但是因为年代久远,有很多东西放在现在不太适用,所以我又在b站搜索了狂神说的java教程,然后又参考了菜鸟教程,这三个教程综合起来学习java(虽然很乱但是这种学习方…...
2024/4/13 8:16:35 - 常用的Linux命令整理
jps: 显示当前所有java进程pid的命令ps - ef | grep java:查看(java)的进程,用来查看java进程是否存在,如果存在它的相关信息是什么...
2024/5/4 20:01:12 - 10 阴阳买苹果
阳阳买苹果,每伞苹果0.8元,阳阳第一天买两个苹果,第二天开始每天买前一天的两倍, 直到购买的苹果个数为不超过100的最大值, 编程求阳阳每天平均花多少钱?...
2024/4/14 7:54:41 - 几种内部类
优点:内部类能访问外部类的私有属性(类内都可操作) 一、普通内部类 直接实例化内部类 public class Outm {private static int id;protected static double money;public class Inm{public void getid(){System.out.println(Outm.id);}pu…...
2024/4/14 7:54:31 - 搭建自己的服务器
阿里服务器搭建web环境购买阿里服务器1.安装数据库启动MySQL数据库\查询MySQL运行状态查看mysql 的初始化密码登录数据库,并输入密码使用命令前,需要用ALTER USER命令修改密码,否则会报错创建数据库mysql数据库开启远程连接修改root用户的host字段使本次修改立即生效使用Navica…...
2024/4/14 7:54:46 - VS+QT配置
一、简介 链接 vs2019 qt5编译环境配置及程序打包 - 知乎 (zhihu.com) 简介 Qt 是一个跨平台的C应用程序框架,支持Windows、Linux、Mac OS X、Android、iOS、Windows Phone、嵌入式系统等。也就是说,Qt 可以同时支持桌面应用程序开发、嵌入式开发和移动开…...
2024/5/4 17:39:21 - JVM 内置锁 synchronized 的几种状态概述
内置锁使用 通常我们说的 java 内置锁默认都是指的 JVM 给我们提供的 synchronized 关键字实现的锁。 下面是一个简单的例子: public class SynchronizedVariableTest1 {public static void main(String[] args) throws InterruptedException {SynchronizedVariab…...
2024/4/14 7:54:51 - C语言大一上学期总结
文章更多的借鉴了《C语言程序设计(第4版)》何钦铭 颜晖 主编,算是一个帮助大学生学习的总结吧。 C语言基本语法 1、C语言的标识符由字母、数字和下划线组成,其中第一个字符必须是字母或者下划线,例如 name。 2、常量…...
2024/4/14 7:54:31 - select函数原理
select函数原理linux编程中select函数用于检测一组socket上是否有事件就绪,这里的事件包括可读、可写、异常事件,其中读事件就绪是指发生以下几种情况: 1. socket内核接收缓冲区的字节数大于等于低水位标记SO_RCVLOWAT,此时可调用…...
2024/4/14 16:38:08 - 本周最新文献速递20220123
本周最新文献速递20220123 一、精细解读文献 一 文献题目: Multi-ancestry eQTL meta-analysis of human brain identifies candidate causal variants for brain-related traits 不想看英文题目: 人脑的多血统 eQTL 荟萃分析确定了大脑相关性状的候选…...
2024/4/14 7:55:47 - camunda数据库表结构介绍
Camunda bpm流程引擎的数据库由多个表组成,表名都以ACT开头,第二部分是说明表用途的两字符标识。笔者在工作中用的Camunda7.11版本共47张表。 ACT_RE_*: RE’表示流程资源存储,这个前缀的表包含了流程定义和流程静态资源(图片&am…...
2024/4/20 5:49:44 - 009 猴子吃桃
猴子吃桃问题:猴子第一天摘下若干个挑子, 当即吃了一半,还不过瘾, 又多吃了一个。 第二天早上又将第一天剩下的桃子吃掉一半, 又多吃了一个。以后每天早上都吃了钱一天剩下的一半零一个。到第10天早上想再吃时…...
2024/4/18 15:22:50 - pprof
go tool pprof http://0.0.0.0:9999/debug/pprof/heap 使用top10可以查看排名前10的内存消耗 golang pprof 使用简介 - 简书 pprof初探 | 王雨峰的博客...
2024/4/28 15:23:24 - 长度为n的方格,刷3种颜色的颜料, 相邻的方格颜料颜色不能相同,且首尾方格颜色不能相同。 每个方格必须涂色。计算一共有多少种涂色方式。
#include<stdio.h> int colornum(int n); int main() {int n;printf("请输入方格块数n:");scanf("%d",&n);printf("一共%d种涂色方式\n",colornum(n));return 0; } int colornum(int n) {long num[100]{"\0"};int i;num[0] …...
2024/4/18 16:27:00 - python windows下创建和使用虚拟环境
Windows下创建虚拟环境 首先创建虚拟环境使用的文件夹 直接新建一个文件夹后进入,在文件夹内部按住shift并按右键,可以看到打开命令行的选项,进入命令行,同时这个命令行也会显示在当前目录。 使用pip安装 pip3 install virtua…...
2024/4/28 14:18:20 - 操作系统重点第三章 进程管理整理总结
第三章 进程管理 1.1进程的概念 1.1.1为什么要引入进程 程序并发执行具有如下特征 间断性 失去封闭性 不可再现性 程序的并发可以总结为:一组在逻辑上相互独立的程序或程序段在执行过程中,其执行时间在客观上相互重叠,即是一个程序段的执行尚…...
2024/4/17 18:33:51 - 37,38压缩和解压39指令小结
文章目录压缩和解压缩gzip/gunzipzip/unziptar压缩和解压缩 gzip/gunzip zip/unzip 把整个文件夹压缩 tar...
2024/4/28 23:57:45 - jangow靶机渗透
今天给大家带来一个简单难度的靶机 首先主机扫描 netdiscover -i eth0 192.168.1.1/24 扫出靶机地址为 192.168.1.13 nmap 扫描 nmap -sV -p 0-6550 192.168.1.13 Starting Nmap 7.80 ( https://nmap.org ) at 2022-01-23 14:13 CST Nmap scan report for 192.168.1.13 Host i…...
2024/4/14 8:00:12
最新文章
- 【SSM进阶学习系列丨分页篇】PageHelper 分页插件导入集成实践
文章目录 一、说明什么是分页PageHelper介绍 二、导入依赖三、集成Spring框架中四、编写Service五、编写Controller六、编写queryAllByPage页面展示数据 一、说明 什么是分页 针对分页,使用的是PageHelper分页插件,版本使用的是5.1.8 。 参考文档…...
2024/5/4 20:19:01 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - python画图Matplotlib和Seaborn
python画图Matplotlib和Season 一、Matplotlib1、介绍2、安装3、内容二、Seaborn1、介绍2、安装3、内容一、Matplotlib Matplotlib官网 1、介绍 Matplotlib 是一个 Python 的绘图库,用于创建高质量的二维图表和一些基本的三维图表。它广泛应用于科学计算、数据分析、工程学和…...
2024/4/27 15:53:32 - 2024年04月IDE流行度最新排名
点击查看最新IDE流行度最新排名(每月更新) 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...
2024/5/4 10:38:10 - 【计算机网络】基础知识复习-第一章-计算机网络基础
第一章 计算机网络基础 以传输信息为主要目的,利用通信线路将各计算机系统的计算机连接起来的计算机群称为计算机通信网络。 凡是将地理位置不同,并具有独立功能的多个计算机系统通过通信设备和线路连接起来,以适用的软件(即…...
2024/4/30 17:32:57 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/3 23:10:03 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/4 18:20:48 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/4 2:59:34 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57