【书籍篇】Spring实战第4版 第2部分 Web中的Spring
Spring实战第4版 第2部分 Web中的Spring
- 五. 构建Spring Web应用程序
- 5.1 SpirngMVC请求流程
- 5.2 搭建Spring MVC
- 5.2.1 配置DispatcherServlet
- 5.2.2 配置WebConfig
- 5.2.3 配置RootConfig
- 5.3 编写基本的控制器
- 5.4 Spittr首页
- 5.6 复杂的控制器
- 5.6.1 定义类级别的请求处理
- 5.6.2 传递模型数据到视图中
- 5.6.3 接受请求的输入
- 5.6.4 处理表单
- 5.6.5 校验表单
- 六. 渲染Web视图
- 6.1 视图解析器
- 6.2 创建JSP视图
- 6.2.1 配置InternalResourceViewResolver
- 6.2.2 使用Spring的JSP库
- 6.2.3 Spring通用标签库
- 6.2.4 展示国际化信息
- 6.2.5 创建URL
- 6.2.6 转义
- 6.3 使用Apache Tiles视图定义布局
- 6.3.1 配置Tile视图解析器
- 6.3.2 定义Tiles
- 6.3.3 主布局模板
- 6.4 使用Thymeleaf模板
- 6.4.1 配置Thymeleaf视图解析器
- 6.4.2 定义Thymeleaf模板
- 6.4.3 借助Thymeleaf实现表单绑定
- 七. Spring MVC的高级技术
- 7.1 Spring MVC配置的替代方案
- 7.1.1 自定义DispacherServlet配置
- 7.1.2 添加其他Servlet和Filter
- 7.1.3 web.xml中声明DispatcherServlet
- 7.1.4 web.xml中使用基于java的配置
- 7.2 处理Multipart形式的数据
- 7.2.1 配置multipart解析器
- 7.2.2 StandardServletMultipartResolver
- 7.2.3 CommonsMultipartResolver
- 7.3 处理Multipart请求
- 7.4 处理异常
- 7.4.1 异常映射HTTP状态码
- 7.4.2 异常处理方法
- 7.4.3 为控制器添加通知
- 7.5 跨重定向请求传递数据
- 7.5.1 使用URL传递
- 7.5.2 使用flash传递
- 八. 使用Spring Web Flow
- 8.1 在Spring中配置Web Flow(xml配置)
- 8.1.1 装配流程执行器
- 8.1.2 配置流程注册表
- 8.1.3 处理流程请求
- 8.2 流程组件
- 8.2.1 状态
- 8.2.1.1 行为状态
- 8.2.1.2 决策状态
- 8.2.1.3 结束状态
- 8.2.1.4 子流程状态
- 8.2.1.5 视图状态
- 8.2.2 转移
- 8.2.3 流程数据
- 8.2.3.1 声明变量
- 8.2.3.2 作用域
- 8.3 流程实例
五. 构建Spring Web应用程序
5.1 SpirngMVC请求流程
web浏览器发送请求
第一站:前端控制器(DispatcherServlet),其作用是将从处理器映射(handler mapping)获取请求的下一站是哪里(哪个控制器)。
第二站:将请求数据交由控制器处理(controller)或者是控制器将业务逻辑委托给一个或多个服务对象处理,处理完的数据称为模型(model),再进行友好的方式进行格式化,最后发送给视图(view)
第三站:视图渲染数据响应给web浏览器。
5.2 搭建Spring MVC
5.2.1 配置DispatcherServlet
public class SpittrWebAppInitializerextends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected String[] getServletMappings() {return new String[] {"/"}; // 将DispatcherServlet映射到"/"}@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[] {RootConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[] {WebConfig.class};}
}
5.2.2 配置WebConfig
@Configuration
@EnableWebMvc
public class WebConfig {}
5.2.3 配置RootConfig
@Configuration
@ComponentScan(basePackages={"spittr"}, excludeFilters={@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)
})
public class RootConfig {}
5.3 编写基本的控制器
@Controller // 声明为一个控制器
public class DemoController {@RequestMapping(value="/", method=GET) // 处理对"/"的Get请求public String demo() {return "demo"; // 发送给视图“demo”}
}
5.4 Spittr首页
略。。。详细可从书中p144获知
5.6 复杂的控制器
5.6.1 定义类级别的请求处理
@Controller
@RequestMapping("/")
public class DemoController {...
}
5.6.2 传递模型数据到视图中
略。。。详细可从书中p147获知
5.6.3 接受请求的输入
@Controller
@RequestMapping("/")
public class DemoController {@Autowiredprivate DemoService demoService;@RequestMapping(value="/getList", method=GET)public List<String> getList(@RequestParam("conut") long count) { return demoService.selectByCount(count);}@RequestMapping(value="/{id}", method=GET)public List<String> getObj(@PathVariable("id") long id) { return demoService.selectById(id);}
}
5.6.4 处理表单
略。。。详细可从书中p158获知
5.6.5 校验表单
在Spring MVC中提供了对java校验API的支持,详细可从书中p164获知或百度
public class Demo {@NotNull@Size(min=5, max=16)private Long id;...
}@Controller
@RequestMapping("/")
public class DemoController {@RequestMapping(value="/valid", method=POST)public Boolean valid(@Valid Demo demo, Errors errors) {if (errors.hasErrors()) {return false;}return true;}
}
六. 渲染Web视图
6.1 视图解析器
Spring自带了13个视图解析器
视图解析器 | 描述 |
---|---|
BeanNameViewResolver | 将视图解析为Spring应用上下文中的bean,其中bean的ID与视图的名字相同 |
ContentNegotiatingViewResolver | 通过考虑客户端的内容类型来解析视图,委托给另一个能够产生对应内容类型的视图解析器 |
FreeMarkerViewResolver | 将视图解析为FreeMarker模板 |
InternalResourceViewResolver | 将视图解析为Web应用的内部资源(一般为JSP) |
JasperReportsViewResolver | 将视图解析为JasperReports定义 |
ResourceBundleViewResolver | 将视图解析为资源bundle(一般为属性文件) |
TilesViewResolver | 将视图解析为Apache Tiles定义,其中tile ID与视图名称相同(注意有两个不同的TilesViewResolver实现,分别对应Tiles 2.0 和 Tiles 3.0) |
UrlBasedViewResolver | 直接更具视图的名称解析视图,视图的名称会匹配一个物理视图的定义 |
VelocityLayoutViewResolver | 将视图解析为Velocity布局,从不同的Velocity模板中组合页面 |
VelocityViewResolver | 将视图解析为Velocity模板 |
XmlViewResolver | 将视图解析为XML文件中bean的定义(类似于BeanNameViewResolver) |
XsltViewReslover | 将视图解析为XSLT转换后的结果 |
ThymeleafViewResolver | 将逻辑视图名称解析为Thymeleaf模板视图 |
6.2 创建JSP视图
6.2.1 配置InternalResourceViewResolver
@bean
public ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INFO/views/");resolver.setSuffix(".jsp");// 解析JSTL标签resolver.setViewClass("org.springframework.web.servlet.view.JstlView.class");return resolver;
}
<bean id="viewResolver" class= "org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INFO/views/" p:suffix=".jsp" p:viewClass="org.springframework.web.servlet.view.JstlView" />
6.2.2 使用Spring的JSP库
<!-- JSP页面声明 -->
<%@ tagblib uri="http://wwww.springframwork.org/tags/form" prefix="sf" %>
6.2.3 Spring通用标签库
<%@ tagblib uri="http://wwww.springframwork.org/tags" prefix="s" %>
6.2.4 展示国际化信息
<h1><s:message code="spittr.welcome" />
</h1>
@Bean
public MessageSource messageSource() {ResourceBunleMessageSource messageSource = new ResourceBunleMessageSource();messageSource.setBeanname("message");return messageSource;
}@Bean
public MessageSource messageSource() {ReloadableResourceBunleMessageSource messageSource = new ReloadableResourceBunleMessageSource();messageSource.setBasename("file://etc/spittr/messages"); // 类路径以 classpath: 为前缀messageSource.setCacheSeconds(10);return messageSource;
}// en.properties
spittr.welcome=Welcome to Spittr!// zh.properties
spittr.welcome=欢迎来到Spittr!
6.2.5 创建URL
<s:url>。。。详细可从书中p182获知
6.2.6 转义
<s:escapebody>。。。详细可从书中p184获知
6.3 使用Apache Tiles视图定义布局
6.3.1 配置Tile视图解析器
@Bean
public TilesConfigurer tilesConfigurer() {TilesConfigurer tiles = new TilesConfigurer();// 指定Tile的定义的位置 "/WEB-INFO/**/tiles.xml" tiles.setDefinitions(new String[] {"/WEB-INFO/layout/tiles.xml" });// 启用刷新功能tiles.setCheckRefresh(true);return tiles;
}@Bean
public ViewResolver viewResolver() {return new TilesViewResolver();
}
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"><property name="definitions"><list><value>/WEB-INFO/layout/tiles.xml</value><value>/WEB-INFO/**/tiles.xml</value></list></property>
</bean><bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.ViewResolver" />
6.3.2 定义Tiles
<xml version="1.0" encoding="UTF-8">
<DOCTYPE tiles-definitions PUBLIC"...">
<tiles-definitions><!-- 定义base Tiles --><definition name="base" template="/WEB-INF/layout/page.jsp"><!-- 设置属性 --><put-attribute name="body" value="/WEB-INF/layout/header.jsp" /><put-attribute name="footer" value="/WEB-INF/layout/footer.jsp" /></definition><!-- 扩展base Tiles --><definition name="home" template="/WEB-INF/layout/home.jsp"><!-- 设置属性 --><put-attribute name="body" value="/WEB-INF/layout/home.jsp" /></definition>
</tiles-definitions>
6.3.3 主布局模板
<%@ tagblib uri="http://wwww.springframwork.org/tags" prefix="s" %>
<%@ tagblib uri="tiles.apache.org/tags-tiles" prefix="t" %><html><head>...</head><body><div id="header"><t:insertAttribute name="header" /> </div><div id="content"><t:insertAttribute name="body" /></div><div id="footer"><t:insertAttribute name="footer" /></div></body>
</html>
6.4 使用Thymeleaf模板
略。。。详细可从书中p190~196获知
6.4.1 配置Thymeleaf视图解析器
6.4.2 定义Thymeleaf模板
6.4.3 借助Thymeleaf实现表单绑定
七. Spring MVC的高级技术
7.1 Spring MVC配置的替代方案
略。。。详细可从书中p200~205获知
7.1.1 自定义DispacherServlet配置
7.1.2 添加其他Servlet和Filter
7.1.3 web.xml中声明DispatcherServlet
7.1.4 web.xml中使用基于java的配置
7.2 处理Multipart形式的数据
7.2.1 配置multipart解析器
从Spring3.1开始,Spring内置了两个MultipartResolver的实现供我们选择
multipart解析器 | 描述 |
---|---|
CommonsMultipartResolver | 使用Jakarta Commons FileUpload解析multipart请求 |
StandardServletMultipartResolver | 依赖于servlet3.0对multipart请求的支持 |
7.2.2 StandardServletMultipartResolver
@bean
public MultipartResolver multipartResolver() throws IOException {return new StandardServletMultipartResolver();
}
// java配置
@Override
protected void custiomizeRegistration(Dynamic registration) {// 临时路径,文件大小不超过2MB,整个请求不超过4MB,所有文件都写入磁盘registration.setMultipartConfig(new MultipartConfigElement("/tmp/spittr/uploads", 2096000, 4192000, 0));
}
<!-- xml配置 -->
<servlet><servlet-name>appServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup><multipart-config><location>/tmp/spittr/uploads</location><max-file-size>2096000</max-file-size><max-request-size>4192000</max-request-size></multipart-config>
</servlet>
7.2.3 CommonsMultipartResolver
@bean
public MultipartResolver multipartResolver() throws IOException {CommonsMultipartResolver resolver = new CommonsMultipartResolver();resolver.setUploadTempDir(new FileSystemResource("/tmp/spittr/uploads")); // 临时路径resolver.setMaxUploadSize(2096000); // 最大的文件容量resolver.setMaxInMemorySize(0); // 最大的内存大小return resolver;
}
7.3 处理Multipart请求
<form method="POST" enctype="multipart/form-data" th:object="${spitter}">...<label>Profile picture</label><input type="file" name="profilePicture" accept="image/jpeg,image/png,image/gif" />...
</form>
// 方式一:无法获取文件信息
@RequestMapping(value="/register", method=POST)
public String processRegistration(@RequestPart("profilePicture") btye[] profilePicture,@Valid Spitter spitter,Errors errors) {...
}// 方式二:使用part,能获取文件信息
@RequestMapping(value="/register", method=POST)
public String processRegistration(@RequestPart("profilePicture") Part profilePicture,@Valid Spitter spitter,Errors errors) {...
}
7.4 处理异常
7.4.1 异常映射HTTP状态码
@ResponseStatus(value=HttpStatus.NOT_FOUND, reson="Spittle Not Found")
public class SpitterNotFoundException extends RuntimeException {...
}
7.4.2 异常处理方法
// 方式一
@RequestMapping(method=POST)
public String saveSpitter(SpittleForm form, Model model) {try {spittleRepository.save(new Spittle(null, form.getName()));return "redirect:/spittles";} catch (DuplicateSpittleException e) {return "error/duplicate";}
}// 方式二
// 该控制器里的方法抛出DuplicateSpittleException异常就会调用handleDuplicateSpittle()方法来处理异常
@RequestMapping(method=POST)
public String saveSpitter(SpittleForm form, Model model) {spittleRepository.save(new Spittle(null, form.getName()));return "redirect:/spittles";
}@ExceptionHandler(DuplicateSpittleException.class)
public String handleDuplicateSpittle() {return "error/duplicate";
}
7.4.3 为控制器添加通知
// 任意控制器抛出DuplicateSpittleException异常都会调用handleDuplicateSpittle()方法来处理异常
@ControllerAdvice
public class AppWideExceptionHandller {@ExceptionHandler(DuplicateSpittleException.class)public String handleDuplicateSpittle() {return "error/duplicate";}
}
7.5 跨重定向请求传递数据
跨重定向请求传递数据 |
---|
使用URL模板以路径变量或查询参数的形式传递数据 |
通过flash属性发送数据 |
7.5.1 使用URL传递
@RequestMapping(value="/register", method=POST)
public String processRegistration(Spitter spitter, Model model) {spittleRepository.save(Spitter);model.adddAttribute("name", Spitter.getName());return "redirect:/spittles/{name}";
}
7.5.2 使用flash传递
@RequestMapping(value="/register", method=POST)
public String processRegistration(Spitter spitter, Model model) {spittleRepository.save(spitter);model.adddAttribute("name", spitter.getName());model.adddFlashAttribute("spitter", spitter);return "redirect:/spittles/{name}";
}@RequestMapping(value="/{name}", method=GET)
public String showSpitterProfile(@PathVariable String name, Model model) {if (!model.contaionsAttribute("spitter")) {model.adAttribute(spittleRepository.findByName(name));}return "profile";
}
八. 使用Spring Web Flow
8.1 在Spring中配置Web Flow(xml配置)
8.1.1 装配流程执行器
<!-- 当用户进入一个流程时,流程执行器会为用户创建并启用一个流程执行实例 -->
<flow:flow-executor id="flowExecutor" />
8.1.2 配置流程注册表
<!-- 加载流程定义并让流程执行器能够使用它们 -->
<!-- 流程注册表会在"/WEB-INF/flows"目录下查找流程定义,任何文件名以"*-flow.xml"结尾的xml文件都视为流程 -->
<flow:flow-registry id="flowRegistry" base-path="/WEB-INF/flows"><flow:flow-location-pattern value="*-flow.xml" />
</flow:flow-registry>
<!-- 直接指明文件 springpizza作为流程id -->
<flow:flow-registry id="flowRegistry"><flow:flow-location value="/WEB-INF/flows/springpizza.xml" />
</flow:flow-registry><!-- 直接指明文件和id -->
<flow:flow-registry id="flowRegistry"><flow:flow-location id="pizza" value="/WEB-INF/flows/springpizza.xml" />
</flow:flow-registry>
8.1.3 处理流程请求
<!-- 在Spring应用上下文中配置一个FlowHandlerMapping来帮助前端控制器将流程请求发送给Spring Web Flow -->
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping"><propertry name="flowRegistry" ref="flowRegistry" />
</bean><!-- 响应请求的是FlowHandlerAdapter,等同于Spring MVC的控制器对请求进行处理 -->
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter"><propertry name="flowExecutor" ref="flowExecutor" />
</bean>
8.2 流程组件
8.2.1 状态
类型 | 作用 |
---|---|
行为(Action) | 流程逻辑发生的地方 |
决策(Decision) | 将流程基于流程数据确定分成两个方向 |
结束(End) | 流程最后一站,一旦进入流程终止 |
子流程(Subflow) | 会在当前正在运行大队流程上下文中启动一个新的流程 |
视图(View) | 暂停流程并邀请用户参与流程 |
8.2.1.1 行为状态
<!-- 应用程序执行任务时一般会出发Spring所管理bean的一些方法,并根据方法的执行结果转移到另一个状态 -->
<action-state id="saveOrder"><evaluate expression="pizzaFlowActions.saveOrder(order)" /><transition to="thankYou" />
</action-state>
8.2.1.2 决策状态
<!-- 评估一个boolean类型的表达式,然后再两个状态转移中选择一个 -->
<decision-state id="checkDeiveryArea"><if test="pizzaFlowAtions.checkDeliveryArea(customer.zipCode)"then="addCustomer"else="deliveryWarning" />
</decision-state>
8.2.1.3 结束状态
<!-- 结束之后发生什么取决于三个因素。。。详细可从书中p231获知 -->
<end-state id="customerReady" />
8.2.1.4 子流程状态
<!-- 如果子流程结束状态id为orderCreated,那么流程会转移到payment -->
<subflow-state id="order" subflow="pizza/order"><input name="order" value="order" /><transition on="orderCreated" to="payment" />
</subflow-state>
8.2.1.5 视图状态
<!-- 简单实例 -->
<view-state id = "welcome" />
<!-- 指明视图名 -->
<view-state id = "welcome" view="greeting"/>
<!-- 视图绑定的对象 -->
<view-state id = "welcome" modedl="flowScope.paymentDetails"/>
8.2.2 转移
<!-- 当前状态的默认转移项 -->
<transition to="customerReady" />
<!-- 触发了phoneEntered就会进入customerReady状态 -->
<transition on="phoneEntered" to="customerReady" />
<!-- 触发了异常就会进入customerReady状态 -->
<transition on-exception="com.springinaction.pizza.service.CustomerNotFoundException" to="customerReady" />
<!-- 全局转移,流程中所有的状态都会默认拥有这个转移 -->
<global-transitions><transition on="cancel" to="endstate" />
</global-transitions>
8.2.3 流程数据
8.2.3.1 声明变量
<!-- 该变量可以再流程的任意状态进行访问 -->
<var name="customer" class="com.springinaction.pizza.domain.Customer" />
<!-- 计算一个表达式并且放到toppingsList,该变量是一个视图作用域变量 -->
<evaluate result="viewScope.toppingsList" expression="T(com.springinaction.pizza.ddomain.Topping).asList()" />
<!-- 将变量设置为表达式计算的结果,类似evaluate标签 -->
<set name="flowScope.pizza" value="new com.springinaction.pizza.domain.Pizza()" />
8.2.3.2 作用域
范围 | 作用域和可见性 |
---|---|
Conversation | 最高层级的的流程开始时创建,最高层级的流程结束时销毁。被最高层级的流程和其所有的子流程所共享 |
Flow | 当流程开始时创建,在流程结束时销毁。只有在创建它的流程中是可见的 |
Request | 当一个请求进入流程时创建,在流程返回时销毁 |
Flash | 当流程开始时创建,在流程结束时销毁。在视图状态渲染后,它会被清除 |
View | 当进入视图状态时创建,当这个状态退出时销毁。只在视图状态内是可见的 |
8.3 流程实例
略。。。详细可从书中p234~248获知
相关文章:
【书籍篇】Spring实战第4版 第2部分 Web中的Spring
Spring实战第4版 第2部分 Web中的Spring 五. 构建Spring Web应用程序5.1 SpirngMVC请求流程5.2 搭建Spring MVC5.2.1 配置DispatcherServlet5.2.2 配置WebConfig5.2.3 配置RootConfig 5.3 编写基本的控制器5.4 Spittr首页5.6 复杂的控制器5.6.1 定义类级别的请求处理5.6.2 传递…...
IC - 基础知识 - SOC与MCU
说明 工作中有涉及到SOC和MCU,非嵌入式专业,对两个概念理解不是很清晰。 共同点 MCU和SOC是两种常见的集成电路 (IC) 设计形式,它们的区别在于它们的设计目的和应用场景。工作中将MCU和SOC都称为IC也是没问题的,但是专业人员会…...

【elasticsearch+kibana基于windows docker安装】
创建网络:es和kibana容器互联 docker network create es-net加载镜像 docker pull elasticsearch:7.12.1运行 docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -v $…...

VMware网络设置 桥接模式 NAT VMNET0 1 8
1.桥接模式 虚拟机与主机并列 可拥有独立IP 主机与虚拟机之间,以及各虚拟机之间都可以互访。对应虚拟机就被当成主机所在以太网上的一个独立物理机来看待,各虚拟机通过默认的 VMnet0 网卡与主机以太网连接,虚拟机间的虚拟网络为 VMnet0。这…...

【MongoDB】MongoExport如何过滤数据导出
问题 使用MongoDB处理导出数据时,想增加数据过滤操作。 例如:导出所有isGirl为true的所有数据。 分析 在mongoexport说明文档中找到了query字段和queryFile字段,用来进行数据查询匹配导出。 query字段 后面直接跟 json格式数据。 queryF…...

吴恩达《机器学习》6-1->6-3:分类问题、假设陈述、决策界限
一、什么是分类问题? 在分类问题中,我们试图预测的变量𝑦是离散的值,通常表示某种类别或标签。这些类别可以是二元的,也可以是多元的。分类问题的示例包括: 判断一封电子邮件是否是垃圾邮件(二…...

C语言 用字符串比较函数cmp来做一个门禁:账号密码是否匹配 (干货满满)
#include<stdio.h> #include<string.h> void fun04() {for (int i 0; i < 3; i){char *str01 "hello";char uname[100] ;printf("请输入账号");scanf("%s",uname);char *str02 "123456";char pword[100];printf(&qu…...

Uniapp实现多语言切换
前言 之前做项目过程中,也做过一次多语言切换,大致思想都是一样的,想了解的可以看下之前的文章C#WinForm实现多语言切换 使用i18n插件 安装插件 npm install vue-i18n --saveMain.js配置 // 引入 多语言包 import VueI18n from vue-i18n…...

企业数字化转型与供应链效率-基准回归复刻(2007-2022年)
参照张树山(2023)的做法,本团队对来自统计与决策《企业数字化转型与供应链效率》一文中的基准回归部分进行复刻。文章实证检验企业数字化转型对供应链效率的影响。用年报词频衡量上市公司数字化转型程度,以库存周转天数来衡量供应…...

支持向量机 (SVM):初学者指南
照片由 Unsplash上的 vackground.com提供 一、说明 SVM(支持向量机)简单而优雅用于分类和回归的监督机器学习方法。该算法试图找到一个超平面,将数据分为不同的类,并具有尽可能最大的边距。本篇我们将介绍如果最大边距不存在的时候…...

UnityShader(五)
这次要用表面着色器实现一个水的特效。先翻到最下边看代码,看不懂再看下面的解释。 首先第一步要实现水的深浅判断,实现深水区和浅水区的区分。 这里需要用到深度图的概念。不去说太多概念,只去说怎么实现的,首先我们的水面是在…...

Java中的类和对象
文章目录 一、类和对象的基本概念二、类和对象的定义和使用1.创建类的语法2.创建类的对象3.范例(创建一个类的对象) 三、this引用1.什么是this引用2.this引用的特性 四、构造方法五、封装1.封装的概念2.访问限定符3.封装扩展包3.1包的概念3.2常见的包 六、static成员1.static修…...

多测师肖sir_高级金牌讲师_jenkins搭建
jenkins操作手册 一、jenkins介绍 1、持续集成(CI) Continuous integration 持续集成 团队开发成员每天都有集成他们的工作,通过每个成员每天至少集成一次,也就意味着一天有可 能多次集成。在工作中我们引入持续集成,通…...

Ps:色彩范围
Ps菜单:选择/色彩范围 Select/Color Range 色彩范围 Color Range是一个功能强大选择命令,不仅可以基于颜色进行选择,而且可以基于影调进行选择。不仅可以用来检测人脸选择肤色,也可用来选择超出印刷色域范围的区域。 在图层蒙版的…...

基于SSM的宠物医院管理系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
华为政企园区网络交换机产品集
产品类型产品型号产品说明 核心/汇聚交换机CloudEngine S5731-H24P4XCCloudEngine S5731-H24P4XC 提供 24个10/100/1000BASE-T以太网端口,4个万兆SFP,CloudEngine S5731-H 系列交换机是华为公司推出的新一代智能千兆交换机,基于华为公司统…...

NVMe FDP会被广泛使用吗?
文章开头,我们需要先了解固态硬盘的读写机制。我们知道,固态硬盘的存储单元是由闪存颗粒组成的,无法实现物理性的数据覆盖,只能擦除然后写入,重复这一过程。因而,我们可以想象得到,在实际读写过…...

[黑马程序员Pandas教程]——Pandas数据结构
目录: 学习目标认识Pandas中的数据结构和数据类型Series对象通过numpy.ndarray数组来创建通过list列表来创建使用字典或元组创建s对象在notebook中不写printSeries对象常用API布尔值列表获取Series对象中部分数据Series对象的运算DataFrame对象创建df对象DataFrame…...

AI 绘画 | Stable Diffusion 提示词
Prompts提示词简介 在Stable Diffusion中,Prompts是控制模型生成图像的关键输入参数。它们是一种文本提示,告诉模型应该生成什么样的图像。 Prompts可以是任何文本输入,包括描述图像的文本,如“一只橘色的短毛猫,坐在…...
tomcat默认最大线程数、等待队列长度、连接超时时间
tomcat默认最大线程数、等待队列长度、连接超时时间 tomcat的默认最大线程数是200,默认核心线程数(最小空闲线程数)是10。 在核心线程数满了之后,会直接启用最大线程数(和JDK线程池不一样,JDK线程池先使用工作队列再使用最大线程…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...