Arya


  • 首页

  • 标签

  • 分类

  • 归档

未命名

发表于 2020-06-15

title: Arya25(学习Ajax)
date: 2020-06-15 18:05:13

tags:

学习原因

当然是Ajax太方便了,但是由于我觉得很难,所以也怕,也就是我今天才学的原因。之前用SSM写小Demo很想用ajax的,奈何当时理解起来有点困难,后面下决心一定要学一下,也就是今天。

SSM框架课程扩展之Ajax学习

AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的web应用程序的技术。
使用ajax要先导入jquery的包,而后编写对应处理的controller,返回消息或者字符串或者json格式的数据;接着编写ajax请求:url:controller请求,data:键值对,success:回调函数;最后给ajax绑定事件,点击click或者失去焦点onblur等等。

案例代码1

我觉得学的时候看的案例很简单明了,需要用的时候模仿着写再改改就行:

1
2
3
4
5
6
7
8
9
10
Controller层 
查询总用户数
@RequestMapping(value = "/findTotalUsers.do",method = RequestMethod.GET)
public @ResponseBody Long findTotalUsers(){
ModelAndView modelAndView = new ModelAndView();
Long sum = personService.findTotalUsers();
System.out.println(sum+"....................................");
modelAndView.addObject("sum",sum);
return sum;
}

1
2
3
4
Service层
public Long findTotalUsers() {
return personDao.findTotalUsers();
}
Dao层
public Long findTotalUsers() {
        String hql = "select count(*) from Person";
        return (Long) this.getSessionFactory().getCurrentSession().createQuery(hql).uniqueResult();
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

```
ajax代码
<script src="../js/jquery-1.8.3.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(
function ajaxRePost(url,params){
var message = "";
var options={
type:"GET",//请求方式
url:"${pageContext.request.contextPath}/person/findTotalUsers.do",//后台请求路径
data:{},
async:false,//是否异步请求
success:function (msg) {//如果请求成功,返回数据。
message=msg;
}
};
$.ajax(options);
alert(message);
// debugger;
$("#count").text(message);
return message;
}
)

</script>

案例代码2

jsp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table class="table table-bordered table-hover table-striped" id="tableuserlist">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Fullname</th>
<th>Dept</th>
<th>Job</th>
</tr>
</thead>
<tbody>

</tbody>
</table>

js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
	   <script type="text/javascript">
$(function (){
$.ajax({
type:"GET",
url:"/usercontroller/getuserlist",
dataType:"json",
async:false,//是否异步请求
success:function(data){
<!-- //------------遍历对象 .each的使用-------------
//前提必须是对象,一般情况下,后台传过来json字符串,要使用相应的方法将其转化为对象(eval、str.parseJSON()、JSON.parse(str))。
-->
var obj=eval(data);//将括号内的表达式(expression)转化为对象
var tbody=$('<tbody></tbody>');
//下面使用each进行遍历
$(obj).each(function (index){
var val=obj[index];
var tr=$('<tr></tr>');
tr.append('<td>'+ val.userid + '</td>' + '<td>'+ val.username + '</td>' +'<td>'+ val.userfullname + '</td>' + '<td>'+ val.userdeptid + '</td>'+'<td>'+ val.userjobid + '</td>');
tbody.append(tr);// append() :在被选元素的结尾插入内容
});
$('#tableuserlist tbody').replaceWith(tbody);
}
});
});
</script>

controller: 
1
2
3
4
5
6
7
   	@RequestMapping(value="/getuserlist",method=RequestMethod.GET)
public @ResponseBody List<ErpUser> GetUserList (){
List<ErpUser> erpuserlist;
System.out.println("get userlist");
erpuserlist=userService.GetUserList();
return erpuserlist;
}
service:
1
2
3
  	public List<ErpUser> GetUserList(){
return erpUserMapper.selectAllUser();
}

mapper:

1
2
3
4
5
6
7
 List<ErpUser> selectAllUser();
mapper.xml:
<select id="selectAllUser" resultMap="BaseResultMap" >
select
<include refid="Base_Column_List" />
from erp_user
</select>

至此,完成了ajax 发送url请求,controller拦截后调用service mapper 至mysql查询数据,然后返回json格式数据交由ajax进行页面呈现。

Arya24(学习three.js)

发表于 2020-05-27

什么是three.js

1
2
Three.js 是一款 webGL 框架,由于其易用性被广泛应用。
Three.js 在 WebGL 的 API 接口基础上,又进行的一层封装。

什么是WebGL

1
2
3
4
WebGL(Web 图形库)是一种 JavaScript API,用于在任何兼容的 
Web 浏览器中呈现交互式 3D 和 2D 图形,而无需使用插件。WebGL
通过引入一个与 OpenGL ES 2.0 紧密相符合的 API,
可以在 HTML5 <canvas> 元素中使用。

Three.js和webGL的关系

1
2
3
4
WebGL 原生 API 是一种非常低级的接口,而且还需要一些数学和图形学的相关技术。
对于没有相关基础的人来说,入门真的很难,Three.js 将入门的门槛降低了一大截,
对 WebGL 进行封装,简化我们创建三维动画场景的过程。
简而言之:WebGL 和 Three.js 的关系,相当于 JavaScript 和 jQuery 的关系。

Three.js的基础知识

基础三大组件:

场景(scene)、相机(camera)、渲染(render)

三大组件关系:

场景是一个物体的容器,开发者把需要的物体放在场景中,相机的作用就是把场景里的物体拍下来,渲染器就是把相机拍下来的图片放在浏览器中显示。

三大组件介绍:

场景(scene)

场景就只有一种,用THREE.Scene来表示,构建一个场景的代码如下:var scene = new THREE.Scene();场景是所有物体的容器,你需要把显示的内容,放入到场景里面,才有机会被相机拍到,从而渲染到web页面上。

相机(camera)

相机决定了场景中哪个角度的景色会显示出来,就像你在屋里摆了个摄像头,照着哪里,就显示哪里。相机有两种:正投影相机(对象和相机之间的距离不会影响渲染效果,无远近之分)和透视相机(距离相机越远的地方,被渲染的越小)。

渲染器(render)

渲染器决定了渲染的结果应该画在页面的什么元素上面,并且以怎样的方式来绘制。

开发工具

Three.js 是一个 JavaScript 库,所以,我们不需要搭建复杂的开发环境,只需要有一个可以编辑 JavaScript 的编辑器和支持 Three.js 的浏览器(主要有:Google Chrome 9+、Firefox 4+、Opera 15+、Safari 5.1+、Internet Explorer 11 和 Microsoft Edge)就可以使用 Three.js 来创建 WebGL 应用。
推荐:WebStorm
我自己用的是sublime text3

案例学习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Stats插件案例</title>
<style>
body {
margin: 0;
}

canvas {
width: 100%;
height: 100%;
display: block;
}
</style>
</head>
<body onload="init()">
<!-- 引入资源文件 -->
<script src="https://cdn.bootcss.com/three.js/92/three.js"></script>
<script src="http://www.wjceo.com/lib/js/libs/stats.min.js"></script>
<script>
//声明一些全局变量
var renderer, camera, scene, geometry, material, mesh, stats;

//初始化渲染器
function initRenderer() {
renderer = new THREE.WebGLRenderer(); //实例化渲染器 THREE.WebGLRenderer,这是一个基于WebGL渲染的渲染器
renderer.setSize(window.innerWidth, window.innerHeight); //设置浏览器窗口的宽和高
document.body.appendChild(renderer.domElement);
//实例化渲染器时生成的一个canvas画布 添加到dom
}

//初始化场景
function initScene() {
scene = new THREE.Scene(); //实例化场景
}

//初始化相机
function initCamera() {
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 200); //实例化相机
// 实例化了一个透视相机,效果是近大远小,需要四个值分别是视野,宽高比,近裁面和远裁面。我们分别介绍一下这四个值:
// 视野:当前相机视野的宽度,值越大,渲染出来的内容也会更多。
// 宽高比:默认是按照画布的显示的宽高比例来设置,如果比例设置的不对,会发现渲染出来的画面有拉伸或者压缩的感觉。
// 近裁面和远裁面:这个是设置相机可以看到的场景内容的范围,如果场景内的内容位置不在这两个值内的话,将不会被显示到渲染的画面中。

camera.position.set(0, 0, 15);
// camera.position.set函数是设置当前相机的位置,函数传的三个值分别是x轴坐标,y轴坐标和z轴坐标。

}

//创建模型
function initMesh() {
geometry = new THREE.BoxGeometry( 2, 2, 2 ); //创建几何体 实例化了一个THREE.BoxGeometry立方体的几何体对象,实例化的三个传值分别代表着立方体的长度,宽度和高度。我们全部设置的相同的值,将渲染出一个标准的正立方体。
material = new THREE.MeshNormalMaterial(); //创建材质 这种材质的特点是,它会根据面的朝向不同,显示不同的颜色。

mesh = new THREE.Mesh( geometry, material ); //创建网格 THREE.Mesh实例化需要传两个值,分别是几何体对象和材质对象,才可以实例化成功。
scene.add( mesh ); //将网格添加到场景
}

//运行动画
function animate() {
requestAnimationFrame(animate); //循环调用函数

mesh.rotation.x += 0.01; //每帧网格模型的沿x轴旋转0.01弧度
mesh.rotation.y += 0.02; //每帧网格模型的沿y轴旋转0.02弧度

stats.update(); //更新性能检测框

renderer.render( scene, camera ); //渲染界面 渲染的render方法需要两个值,第一个值是场景对象,第二个值是相机对象。这意味着,你可以有多个相机和多个场景,可以通过渲染不同的场景和相机让画布上显示不同的画面。
}

//性能检测框
function initStats() {
stats = new Stats();
document.body.appendChild(stats.dom);
}

//初始化函数,页面加载完成是调用
function init() {
initRenderer();
initScene();
initCamera();
initMesh();
initStats();

animate();
}
</script>
</body>
</html>

在场景当中,我们能够看到左上角会有一个性能检测的小框:
前面的数值代表当前每秒的渲染帧率,后面的括号内的值是当前的场景渲染的帧率范围。
Alt text

Arya23(学习echarts)

发表于 2020-05-25

Echarts介绍

ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

百度出品的一个开源 Javascript 数据可视化库

可视化面板:应对现在数据可视化的趋势,越来越多企业需要在很多场景(营销数据,生产数据,用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出。

官网地址:https://www.echartsjs.com/zh/index.html

使用Echarts

  1. 引入echarts 插件文件到html页面中
  2. 准备一个具备大小的DOM容器

    1
    <div id="main" style="width: 600px;height:400px;"></div>
  3. 初始化echarts实例对象

    1
    var myChart = echarts.init(document.getElementById('main'));
  4. 指定配置项和数据(option)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var option = {
    xAxis: {
    type: 'category',
    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
    type: 'value'
    },
    series: [{
    data: [820, 932, 901, 934, 1290, 1330, 1320],
    type: 'line'
    }]
    };
  5. 将配置项设置给echarts实例对象

    1
    myChart.setOption(option);

    Echarts配置

    需要了解的主要配置:series、xAxis、yAxis、grid、tooltip、title、legend、color

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    series:
    系列列表。每个系列通过 `type` 决定自己的图表类型
    大白话:图标数据,指定什么类型的图标,可以多个图表重叠。
    xAxis:直角坐标系 grid 中的 x 轴
    boundaryGap: 坐标轴两边留白策略 true,这时候刻度只是作为分隔线,
    标签和数据点都会在两个刻度之间的带(band)中间
    yAxis:直角坐标系 grid 中的 y 轴
    grid:直角坐标系内绘图网格。
    title:标题组件
    tooltip:提示框组件
    legend:图例组件
    color:调色盘颜色列表
    数据堆叠,同个类目轴上系列配置相同的`stack`
    值后 后一个系列的值会在前一个系列的值上相加。

    案例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
      option = {
    // color设置我们线条的颜色 注意后面是个数组
    color: ['pink', 'red', 'green', 'skyblue'],
    // 设置图表的标题
    title: {
    text: '折线图堆叠123'
    },
    // 图表的提示框组件
    tooltip: {
    // 触发方式
    trigger: 'axis'
    },
    // 图例组件
    legend: {
    // series里面有了 name值则 legend里面的data可以删掉
    },
    // 网格配置 grid可以控制线形图 柱状图 图表大小
    grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    // 是否显示刻度标签 如果是true 就显示 否则反之
    containLabel: true
    },
    // 工具箱组件 可以另存为图片等功能
    toolbox: {
    feature: {
    saveAsImage: {}
    }
    },
    // 设置x轴的相关配置
    xAxis: {
    type: 'category',
    // 是否让我们的线条和坐标轴有缝隙
    boundaryGap: false,
    data: ['星期一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    // 设置y轴的相关配置
    yAxis: {
    type: 'value'
    },
    // 系列图表配置 它决定着显示那种类型的图表
    series: [
    {
    name: '邮件营销',
    type: 'line',

    data: [120, 132, 101, 134, 90, 230, 210]
    },
    {
    name: '联盟广告',
    type: 'line',

    data: [220, 182, 191, 234, 290, 330, 310]
    },
    {
    name: '视频广告',
    type: 'line',

    data: [150, 232, 201, 154, 190, 330, 410]
    },
    {
    name: '直接访问',
    type: 'line',

    data: [320, 332, 301, 334, 390, 330, 320]
    }
    ]
    };

    注意事项

    1、 防止缩放的时候,引导线过长。引导线略短些 (series对象里面的 labelLine 对象设置 )
    连接图表 6 px
    连接文字 8 px

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        // 文字调整
    label:{
    fontSize: 10
    },
    // 引导线调整
    labelLine: {
    // 连接扇形图线长
    length: 6,
    // 连接文字线长
    length2: 8
    }
    }
    ],

    2、浏览器缩放的时候,图表跟着自动适配。

    1
    2
    3
    4
    // 监听浏览器缩放,图表对象调用缩放resize函数
    window.addEventListener("resize", function() {
    myChart.resize();
    });

    社区介绍

    社区就是一些,活跃的echart使用者,交流和贡献定制好的图表的地方。在这里可以找到一些基于echart的高度定制好的图表,相当于基于jquery开发的插件,这里是基于echarts开发的第三方的图表。

Arya22(Android连接SQLite)

发表于 2020-05-25

一个数据库创建两个表的时候:当做第二个表的时候要把模拟器的这个数据库删了,不然创建不出来,在这删:
Alt text

Arya21(安装虚拟机Ubuntu踩的坑)

发表于 2020-02-19

首先是联网问题

1、 Ubuntu安装的时候选错了没选到Nat模式,就上不了网,直接改就改不了,只能重新安装;
2、 Ubuntu安装的时候选到了Nat模式,但是依旧上不了网,确保虚拟机中没有正在运行的系统,若有则退出,关闭。
点击【编辑】-【虚拟网络编辑器】后点击【更改设置】,选Nat模式,确定。

UBuntu软件没有需要的软件

在终端执行以下三条命令即可(如果没有网络就会错误,选的镜像很慢也会等超级久):
1、sudo apt update
2、sudo apt upgrade
3、sudo systemctl reboot

UBuntu网络很慢处理

打开【软件和更新】勾选【源代码】,下载至那里点击选择其他站点,点击【选择最佳服务器】然后等待安装即可。做这个操作的时候终端不能处理其他命令。

Arya20(学习Springboot)

发表于 2020-02-16

学习Springboot的环境

继续用之前装的jdk1.8、IDEA2019.1,然后又安装maven环境,之前用的是IDEA自带的maven工具。一开始选的是maven3.6.3版本,因为加入Springboot依赖导致报红,所以换了3.5.3版本的。maven版本太高了容易出错。

Spring Boot 简介

简化Spring应用开发的一个框架;

整个Spring技术栈的一个大整合;

J2EE开发的一站式解决方案;

Springboot开门程序helloworld

1、配置maven外部环境
IDEA首页-右下角Configure-settings-按下图配置
Alt text

2、创建程序时选maven后直接创建啥也不选后接着在maven文件目录下conf-settings.xml

<profile>
  <id>jdk-1.8</id>
  <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>1.8</jdk>
  </activation>
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  </properties>
</profile>

另外,settings.xml中的258行的要删掉,不然将项目打包成jar包会出错。

3、在pom.xml加入以下依赖

 <!-- Inherit defaults from Spring Boot  父项目 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

<!-- Add typical dependencies for a web application 不写版本号自动仲裁 -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>


<!-- Package as an executable jar  这个插件,可以将应用打包成一个可执行的jar包-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

4、创建Java类,如图所示代码,后在浏览器输入http://localhost:8080/hello即可看到Hello World!
Alt text
Alt text

5、停止运行程序后打包成jar包在cmd命令行运行程序
Alt text

点击package即可将命令打包,打包完成可见
Alt text

将包复制到桌面,cmd进入桌面后输入:Java -jar 包名
即可运行此程序,这就是将程序打包成jar包,刷新上一步链接依旧可以看到Hello World!

Springboot第一个程序总结

1、Springboot程序启动不需要配置Tomcat环境;

2、spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。

3、@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

4、@SpringBootConfiguration:Spring Boot的配置类;标注在某个类上,表示这是一个Spring Boot的配置类;
@Configuration:配置类上来标注这个注解;配置类 —– 配置文件;配置类也是容器中的一个组件;@Component

5、@EnableAutoConfiguration:开启自动配置功能; 以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;

6、@AutoConfigurationPackage:自动配置包
​ @Import(AutoConfigurationPackages.Registrar.class):
​ Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class;
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

7、EnableAutoConfigurationImportSelector:导入哪些组件的选择器;将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;

8、Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;==以前我们需要自己配置的东西,自动配置类都帮我们;J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar。

使用Spring Initializer快速创建Spring Boot项目

使用 Spring Initializer快速创建项目:IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;选择我们需要的模块;向导会联网创建Spring Boot项目;默认生成的Spring Boot项目;

- 主程序已经生成好了,我们只需要我们自己的逻辑
   - resources文件夹中目录结构
   - static:保存所有的静态资源; js css  images;
   - templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
   - application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;

yaml

   以前的配置文件;大多都使用的是  xxxx.xml文件;
   YAML:以数据为中心,比json、xml等更适合做配置文件;
​ yaml:配置例子
    server:
      port: 8081
​    XML:
    <server>
        <port>8081</port>
    </server> 

yaml基本语法

1、基本语法

k:(空格)v:表示一对键值对(空格必须有);
以**空格**的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的;属性和值也是大小写敏感
server:
    port: 8081
    path: /hello

2、值的写法

字面量:普通的值(数字,字符串,布尔)

​    k: v:字面直接来写;
​        字符串默认不用加上单引号或者双引号;
​        "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
​                name:   "zhangsan \n lisi":输出;zhangsan 换行  lisi
​        '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
​                name:   ‘zhangsan \n lisi’:输出;zhangsan \n  lisi

对象、Map(属性和值)(键值对):

​    k: v:在下一行来写对象的属性和值的关系;注意缩进
​        对象还是k: v的方式
friends:
        lastName: zhangsan
        age: 20
行内写法:friends: {lastName: zhangsan,age: 18}

数组(List、Set):

用- 值表示数组中的一个元素:
pets:
 - cat
 - dog
 - pig
行内写法:pets: [cat,dog,pig]

配置文件值注入

配置文件
person:
    lastName: hello
    age: 18
    boss: false
    birth: 2017/12/12
    maps: {k1: v1,k2: 12}
    lists:
      - lisi
      - zhaoliu
    dog:
      name: 小狗
      age: 12

  javabean类下加@ConfigurationProperties(prefix = "person")的时候会有提示则在pom.xml加依赖:
  <!--导入配置文件处理器,配置文件进行绑定就会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

中文乱码情况

如图设置即可解决
Alt text

web开发

1、简介

使用SpringBoot;
1)、创建SpringBoot应用,选中我们需要的模块;**
2)、SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来**
3)、自己编写业务代码;

自动配置原理:
这个场景SpringBoot帮我们配置了什么?能不能修改?能修改哪些配置?能不能扩展?xxx
xxxxAutoConfiguration:帮我们给容器中自动配置组件;
xxxxProperties:配置类来封装配置文件的内容;

访问当前项目的任何资源,都去(静态资源的文件夹)找映射:
"classpath:/META-INF/resources/", 
"classpath:/resources/",
"classpath:/static/", 
"classpath:/public/" 
"/":当前项目的根路径

2、Thymeleaf使用

引入thymeleaf;
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
          2.1.6
    </dependency>
切换thymeleaf版本
<properties>
        <thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
        <!-- 布局功能的支持程序  thymeleaf3主程序  layout2以上版本 -->
        <!-- thymeleaf2   layout1-->
        <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
  </properties>



使用:
@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {
    private static final Charset DEFAULT_ENCODING = Charset.forName("UTF-8");
    private static final MimeType DEFAULT_CONTENT_TYPE = MimeType.valueOf("text/html");
    public static final String DEFAULT_PREFIX = "classpath:/templates/";
    public static final String DEFAULT_SUFFIX = ".html";


只要我们把HTML页面放在classpath:/templates/,thymeleaf就能自动渲染;
使用:
1、导入thymeleaf的名称空间
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
2、使用thymeleaf语法;
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>成功!</h1>
    <!--th:text 将div里面的文本内容设置为 -->
    <div th:text="${hello}">这是显示欢迎信息</div>
</body>
</html>
3、语法规则
    th:text;改变当前元素里面的文本内容;
​    th:任意html属性;来替换原生属性的值

自定义starter

 starter:
​    1、这个场景需要使用到的依赖是什么?
​    2、如何编写自动配置

@Configuration  //指定这个类是一个配置类
@ConditionalOnXXX  //在指定条件成立的情况下自动配置类生效
@AutoConfigureAfter  //指定自动配置类的顺序
@Bean  //给容器中添加组件
@ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置
@EnableConfigurationProperties //让xxxProperties生效加入到容器中

自动配置类要能加载
将需要启动就加载的自动配置类,配置在META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\


3、模式:
启动器只用来做依赖导入;
专门来写一个自动配置模块;
启动器依赖自动配置;别人只需要引入启动器(starter)
mybatis-spring-boot-starter;自定义启动器名-spring-boot-starter


步骤:
1)、启动器模块
<?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>com.atguigu.starter</groupId>
    <artifactId>atguigu-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--启动器-->
    <dependencies>
        <!--引入自动配置模块-->
        <dependency>
            <groupId>com.atguigu.starter</groupId>
            <artifactId>atguigu-spring-boot-starter-autoconfigurer</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>


2)、自动配置模块
<?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>com.atguigu.starter</groupId>
   <artifactId>atguigu-spring-boot-starter-autoconfigurer</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>atguigu-spring-boot-starter-autoconfigurer</name>
   <description>Demo project for Spring Boot</description>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.10.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>
   <dependencies>
      <!--引入spring-boot-starter;所有starter的基本配置-->
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter</artifactId>
      </dependency>
   </dependencies>
</project>



package com.atguigu.starter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "atguigu.hello")
public class HelloProperties {
    private String prefix;
    private String suffix;
    public String getPrefix() {
        return prefix;
    }
    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }
    public String getSuffix() {
        return suffix;
    }
    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }
}



package com.atguigu.starter;
public class HelloService {
    HelloProperties helloProperties;
    public HelloProperties getHelloProperties() {
        return helloProperties;
    }
    public void setHelloProperties(HelloProperties helloProperties) {
        this.helloProperties = helloProperties;
    }
    public String sayHellAtguigu(String name){
        return helloProperties.getPrefix()+"-" +name + helloProperties.getSuffix();
    }
}



package com.atguigu.starter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnWebApplication //web应用才生效
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {
@Autowired
    HelloProperties helloProperties;
    @Bean
    public HelloService helloService(){
        HelloService service = new HelloService();
        service.setHelloProperties(helloProperties);
        return service;
    }
}

更多SpringBoot整合示例

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples

Arya19

发表于 2019-12-03

SSM中JSP显示图片问题

因为spingmvc.xml中配置了视图解析器:

<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>

所以存放图片的images文件夹必须放在webapp下,跟webinfo同级。这样写:

<img src="images/02.jpg"/> 

即可显示。

SSM中页面之间的跳转需要写方法实现

因为是SpringMVC中视图解析器的原因或者是整合框架了,不好直接跳转
所以这样写:

@RequestMapping("/register")
public void Register(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
    //   accountService.saveAccount(account);
    request.getRequestDispatcher("/WEB-INF/pages/register.jsp").forward(request,response);
}

另外要跳转到根目录下index.jsp下时要这样写(随便改一下就跳不过去了):
mv.setViewName(“redirect:/index.jsp”);

enctype=”multipart/form-data”

放在form表单语句里搞得我保存数据到数据库老是出错。正常存进去就说name cannot be null,要是把数据库的字段设置不是默认为空就导致存进去全是空值。
multipart/form-data —制定传输数据的特殊类型,上传的非文本的内容,比如图片或是是mp3。表单中enctype=”multipart/form-data”的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.

<%@ page isELIgnored=”true|false”%>如果设定为真,那么JSP中的表达式被当成字符串处理,我们通过字面意思理解一下:是否忽略el表达式,如果为true就是忽略el表达式,就是当做字符串来处理;反之,就是按el表达式来。

反正要用el表达式必须在文件头加上isELIgnored=”false”。切记!!!!el表达式的字段还不能是大写字母开头,比如${book.BorrowID}是不行的,得是${book.borrowID}才可以!!

el表达式

>>>
EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,使得代码更容易编写与维护。最基本的语法是${express}。${name}      <!-- 类比于<%=pageContext.findAttribute("name") %> -->
>>>

model.addAttribute(“list”,list);用法

往前台传数据,可以传对象,可以传List,通过el表达式 ${}可以获取到,类似于request.setAttribute(“sts”,sts)效果一样。

Arya18(BootStrap框架的学习)

发表于 2019-11-21

BootStrap框架的简介

Bootstrap是一组用于网站和网络应用程序开发的开源前端(所谓“前端”,指的是展现给最终用户的界面。与之对应的“后端”是在服务器上面运行的代码)框架,包括HTML、CSS及JavaScript的框架,提供字体排印、窗体、按钮、导航及其他各种组件及Javascript扩展,旨在使动态网页和Web应用的开发更加容易。

Bootstrap 下拉菜单(Dropdowns)

如需使用下拉菜单,只需要在 class .dropdown 内加上下拉菜单即可。
eg:

<div class="dropdown">
<button type="button" class="btn dropdown-toggle" id="dropdownMenu1" data-toggle="dropdown">主题
    <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
    <li role="presentation">
        <a role="menuitem" tabindex="-1" href="#">Java</a>
    </li>
    <li role="presentation">
        <a role="menuitem" tabindex="-1" href="#">数据挖掘</a>
    </li>
    <li role="presentation">
        <a role="menuitem" tabindex="-1" href="#">数据通信/网络</a>
    </li>
    <li role="presentation" class="divider"></li>
    <li role="presentation">
        <a role="menuitem" tabindex="-1" href="#">分离的链接</a>
    </li>
</ul>
</div>

Alt text

Bootstrap 下拉菜单(Dropdowns)添加下拉菜单

如需向按钮添加下拉菜单,只需要简单地在在一个 .btn-group 中放置按钮和下拉菜单即可。您也可以使用 来指示按钮作为下拉菜单。

<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">默认
    <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
    <li>
        <a href="#">功能</a>
    </li>
    <li>
        <a href="#">另一个功能</a>
    </li>
    <li>
        <a href="#">其他</a>
    </li>
    <li class="divider"></li>
    <li>
        <a href="#">分离的链接</a>
    </li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">原始
    <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
    <li>
        <a href="#">功能</a>
    </li>
    <li>
        <a href="#">另一个功能</a>
    </li>
    <li>
        <a href="#">其他</a>
    </li>
    <li class="divider"></li>
    <li>
        <a href="#">分离的链接</a>
    </li>
</ul>
</div>

Alt text

Bootstrap 输入框组

通过向输入域添加前缀和后缀的内容,您可以向用户输入添加公共的元素。例如,您可以添加美元符号,或者在 Twitter 用户名前添加 @,或者应用程序接口所需要的其他公共的元素。

向 .form-control 添加前缀或后缀元素的步骤如下:

把前缀或后缀元素放在一个带有 class .input-group 的 <div> 中。
接着,在相同的 <div> 内,在 class 为 .input-group-addon 的 <span> 内放置额外的内容。
把该 <span> 放置在 <input> 元素的前面或者后面。
为了保持跨浏览器的兼容性,请避免使用 <select> 元素,因为它们在 WebKit 浏览器中不能完全渲染出效果。也不要直接向表单组应用输入框组的 class,输入框组是一个孤立的组件。
<div style="padding: 100px 100px 10px;">
<form class="bs-example bs-example-form" role="form">
    <div class="input-group">
        <span class="input-group-addon">@</span>
        <input type="text" class="form-control" placeholder="twitterhandle">
    </div>
    <br>
    <div class="input-group">
        <input type="text" class="form-control">
        <span class="input-group-addon">.00</span>
    </div>
    <br>
    <div class="input-group">
        <span class="input-group-addon">$</span>
        <input type="text" class="form-control">
        <span class="input-group-addon">.00</span>
    </div>
</form>
</div>

Alt text

Bootstrap 导航元素

Bootstrap 提供的用于定义导航元素的一些选项。它们使用相同的标记和基类 .nav。Bootstrap 也提供了一个用于共享标记和状态的帮助器类。改变修饰的 class,可以在不同的样式间进行切换。

表格导航或标签
创建一个标签式的导航菜单:

以一个带有 class .nav 的无序列表开始。
添加 class .nav-tabs。

<p>标签式的导航菜单</p>
<ul class="nav nav-tabs">
<li class="active"><a href="#">Home</a></li>
<li><a href="#">SVN</a></li>
<li><a href="#">iOS</a></li>
<li><a href="#">VB.Net</a></li>
<li><a href="#">Java</a></li>
 <li><a href="#">PHP</a></li>
</ul>

Alt text

如果想要垂直的胶囊式导航菜单则可以在使用 class .nav、.nav-pills 的同时使用 class .nav-stacked,让胶囊垂直堆叠。

Bootstrap 导航栏

Bootstrap 导航栏:导航栏是一个很好的功能,是 Bootstrap 网站的一个突出特点。导航栏在您的应用或网站中作为导航页头的响应式基础组件。导航栏在移动设备的视图中是折叠的,随着可用视口宽度的增加,导航栏也会水平展开。在 Bootstrap 导航栏的核心中,导航栏包括了站点名称和基本的导航定义样式。
默认的导航栏
创建一个默认的导航栏的步骤如下:
向 <nav> 标签添加 class .navbar、.navbar-default。
向上面的元素添加 role="navigation",有助于增加可访问性。
向 <div> 元素添加一个标题 class .navbar-header,内部包含了带有 class navbar-brand 的 <a> 元素。这会让文本看起来更大一号。
为了向导航栏添加链接,只需要简单地添加带有 class .nav、.navbar-nav 的无序列表即可。
为了给导航栏添加响应式特性,您要折叠的内容必须包裹在带有 class .collapse、.navbar-collapse 的 <div> 中。折叠起来的导航栏实际上是一个带有 class .navbar-toggle 及两个 data- 元素的按钮。第一个是 data-toggle,用于告诉 JavaScript 需要对按钮做什么,第二个是 data-target,指示要切换到哪一个元素。三个带有 class .icon-bar 的 <span> 创建所谓的汉堡按钮。这些会切换为 .nav-collapse <div> 中的元素。为了实现以上这些功能,您必须包含 Bootstrap 折叠(Collapse)插件。
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid"> 
<div class="navbar-header">
    <a class="navbar-brand" href="#">菜鸟教程</a>
</div>
<form class="navbar-form navbar-left" role="search">
    <div class="form-group">
        <input type="text" class="form-control" placeholder="Search">
    </div>
    <button type="submit" class="btn btn-default">提交</button>
</form>
</div>
</nav>

Alt text

面包屑导航(Breadcrumbs)

是一种基于网站层次信息的显示方式。以博客为例,面包屑导航可以显示发布日期、类别或标签。它们表示当前页面在导航层次结构内的位置。Bootstrap 中的面包屑导航(Breadcrumbs)是一个简单的带有 .breadcrumb class 的无序列表。分隔符会通过 CSS(bootstrap.min.css)中下面所示的 class 自动被添加:

Alt text

Bootstrap 徽章(Badges)

徽章与标签相似,主要的区别在于徽章的边角更加圆滑。
徽章(Badges)主要用于突出显示新的或未读的项。如需使用徽章,只需要把 添加到链接、Bootstrap 导航等这些元素上即可。

Bootstrap 模态框(Modal)插件

模态框(Modal)是覆盖在父窗体上的子窗体。通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动。子窗体可提供信息、交互等。您可以切换模态框(Modal)插件的隐藏内容:通过 data 属性:在控制器元素(比如按钮或者链接)上设置属性 data-toggle=”modal”,同时设置 data-target=”#identifier” 或 href=”#identifier” 来指定要切换的特定的模态框(带有 id=”identifier”)。通过 JavaScript:使用这种技术,您可以通过简单的一行 JavaScript 来调用带有 id=”identifier” 的模态框:

 <h2>创建模态框(Modal)</h2>
<!-- 按钮触发模态框 -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">开始演示模态框</button>
<!-- 模态框(Modal) -->
 <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 class="modal-title" id="myModalLabel">模态框(Modal)标题</h4>
        </div>
        <div class="modal-body">在这里添加一些文本</div>
        <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
            <button type="button" class="btn btn-primary">提交更改</button>
        </div>
    </div><!-- /.modal-content -->
</div><!-- /.modal -->
</div>
代码讲解:
使用模态窗口,您需要有某种触发器。您可以使用按钮或链接。这里我们使用的是按钮。
如果您仔细查看上面的代码,您会发现在 <button> 标签中,data-target="#myModal" 是您想要在页面上加载的模态框的目标。您可以在页面上创建多个模态框,然后为每个模态框创建不同的触发器。现在,很明显,您不能在同一时间加载多个模块,但您可以在页面上创建多个在不同时间进行加载。
在模态框中需要注意两点:
第一是 .modal,用来把 <div> 的内容识别为模态框。
第二是 .fade class。当模态框被切换时,它会引起内容淡入淡出。
aria-labelledby="myModalLabel",该属性引用模态框的标题。
属性 aria-hidden="true" 用于保持模态窗口不可见,直到触发器被触发为止(比如点击在相关的按钮上)。
<div class="modal-header">,modal-header 是为模态窗口的头部定义样式的类。
class="close",close 是一个 CSS class,用于为模态窗口的关闭按钮设置样式。
data-dismiss="modal",是一个自定义的 HTML5 data 属性。在这里它被用于关闭模态窗口。
class="modal-body",是 Bootstrap CSS 的一个 CSS class,用于为模态窗口的主体设置样式。
class="modal-footer",是 Bootstrap CSS 的一个 CSS class,用于为模态窗口的底部设置样式。
data-toggle="modal",HTML5 自定义的 data 属性 data-toggle 用于打开模态窗口。

Bootstrap 滚动监听(Scrollspy)插件

滚动监听(Scrollspy)插件,即自动更新导航插件,会根据滚动条的位置自动更新对应的导航目标。其基本的实现是随着您的滚动,基于滚动条的位置向导航栏添加 .active class。
 用法
您可以向顶部导航添加滚动监听行为:

 通过 data 属性:向您想要监听的元素(通常是 body)添加 data-spy="scroll"。然后添加带有 Bootstrap .nav 组件的父元素的 ID 或 class 的属性 data-target。为了它能正常工作,您必须确保页面主体中有匹配您所要监听链接的 ID 的元素存在。
<body data-spy="scroll" data-target=".navbar-example">
<div class="navbar-example">
<ul class="nav nav-tabs">
    ...
</ul>
</div>
</body>

通过 JavaScript:您可以通过 JavaScript 调用滚动监听,选取要监听的元素,然后调用 .scrollspy() 函数:
$(‘body’).scrollspy({ target: ‘.navbar-example’ })

Arya17

发表于 2019-11-10

窗口类型

1、
Frame是框架窗体,有边框的,Panel是面板,无边框,一般把几个Panel加到一个Frame上。Sun公司的定义:Frame是带标题和边框的最顶层窗体;Panel是个最简单的容器类,它提供空间让程序放其它组件,包括其它Panel。 添加到容器中的组件放在一个列表中。列表的顺序将定义组件在容器内的正向堆栈顺序。如果将组件添加到容器中时未指定索引,则该索引将被添加到列表尾部(此后它位于堆栈顺序的底部)。

2、1.FlowLayoutpublic FlowLayout(int align,int hgap,int vgap) 创建一个新的流布局管理器,具有指定的对齐方式以及指定的水平和垂直间隙。
2.GridLayout

public GridLayout(int rows,
            int cols,
            int hgap,
            int vgap)
         创建具有指定行数和列数的网格布局。
3.BorderLayout
 public BorderLayout(int hgap,
               int vgap)用指定的组件之间的间距构造水平一个边界布局。
4.CardLayout
  public CardLayout(int hgap,
             int vgap)创建一个具有指定的水平和垂直间隙的新卡片布局。

3、drawLine(int x1, int y1, int x2, int y2) : 在此图形上下文的坐标系中,使用当前颜色在点 (x1, y1) 和 (x2, y2) 之间画一条线。
drawRect(int x, int y, int width, int height) : 绘制指定矩形的边框。
JAVA是以屏幕左上角为原点(0,0)往右X增加,往下Y增加

4、DrawString(String, Font, Brush, Single, Single, StringFormat):使用指定 Brush 的格式化特性,用指定的 Font 和 StringFormat 对象在指定的位置绘制指定的文本字符串。

5、fillRect(x,y,w,h)函数的作用是:填充一个矩形区域,x、y为起始坐标(即左上角坐标),后面两个参数分别为:w、h,是矩形区域的宽和高,这里的20表示填充宽度20像素,15表示填充高度15像素。

public int nextInt(int n)

该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

private static final long serialVersionUID=-32222288883332222L;

serialVersionUID 用来表明实现序列化类的不同版本间的兼容性;如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。

serialVersionUID作用:
相当于java类的身份证。主要用于版本控制。
serialVersionUID作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。

//创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

public FileOutputStream(File file);

//创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。
public FileOutputStream(File file,boolean append);

//创建一个向具有指定名称的文件中写入数据的输出文件流。
public FileOutputStream(String name);

//创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。
public FileOutputStream(String name,boolean append);

Ayra16(SSM学习笔记)

发表于 2019-10-25

IDEA常用的快捷键

Alt+回车 导入包,自动修正
Ctrl+N 查找类
Ctrl+Shift+N 查找文件
Ctrl+Alt+L 格式化代码
Ctrl+Alt+O 优化导入的类和包
Alt+Insert 生成代码(如get,set方法,构造函数等)
Ctrl+E或者Alt+Shift+C 最近更改的代码
Ctrl+R 替换文本
Ctrl+F 查找文本
Ctrl+Shift+Space 自动补全代码
Ctrl+空格 代码提示
Ctrl+Alt+Space 类名或接口名提示
Ctrl+P 方法参数提示
Ctrl+Shift+Alt+N 查找类中的方法或变量
Alt+Shift+C 对比最近修改的代码
Shift+F6 重构-重命名
Ctrl+Shift+先上键
Ctrl+X 删除行
Ctrl+D 复制行
Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/…/ )
Ctrl+J 自动代码
Ctrl+E 最近打开的文件
Ctrl+H 显示类结构图
Ctrl+Q 显示注释文档
Alt+F1 查找代码所在位置
Alt+1 快速打开或隐藏工程面板
Ctrl+Alt+ left/right 返回至上次浏览的位置
Alt+ left/right 切换代码视图
Alt+ Up/Down 在方法间快速移动定位
Ctrl+Shift+Up/Down 代码向上/下移动。
F2 或Shift+F2 高亮错误或警告快速定位

代码标签输入完成后,按Tab,生成代码。
选中文本,按Ctrl+Shift+F7 ,高亮显示所有该文本,按Esc高亮消失。
Ctrl+W 选中代码,连续按会有其他效果
选中文本,按Alt+F3 ,逐个往下查找相同文本,并高亮显示。
Ctrl+Up/Down 光标跳转到第一行或最后一行下
Ctrl+B 快速打开光标处的类或方法

Intellij IDEA最常用快捷键

1.Ctrl+E,可以显示最近编辑的文件列表
2.Shift+Click可以关闭文件
3.Ctrl+[或]可以跳到大括号的开头结尾
4.Ctrl+Shift+Backspace可以跳转到上次编辑的地方
5.Ctrl+F12,可以显示当前文件的结构
6.Ctrl+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择
7.Ctrl+N,可以快速打开类

Resources.getResourceAsStream找不到方法

将ResourcesgetResourceAsStream(resource);改为Resources.class.getResourceAsStream(resource);

为什么接口的实现类里面 @Override报红

@Override注解用来检测子类对父类或接口的方法的重写是否正确,在使用IDEA时给某个接口写实现类时写了这个注解就报红,百度了下才知道原来这是jdk1.5时的一个bug,在1.6时已经被修复。但是我使用的是1.8的,于是(其实不加这个注解也行)
Alt text

泛型术语

以ArrayList为例:
<>念着typeof
ArrayList中的E称为类型参数变量,其实就是类型的占位符(传入什么类型就是什么类型)
ArrayList中的Integer称为实际类型参数
整个称为ArrayList泛型类型
整个ArrayList称为参数化的类型ParameterizedType

Set
Enumeration
Map<String,Object>
Map<K,V>

java swing中setVisible(true);方法的真正作用

setVisible(true);方法的意思是说数据模型已经构造好了,允许JVM可以根据数据模型执行paint方法开始画图并显示到屏幕上了,并不是显示图形,而是可以运行开始画图了。这个方法和java多线程的start方法有点异曲同工之妙,start方式是允许run方法运行了,start方法和setVisible方法很相似。但为了安全起见,还是要把setVisible方法放到最后面。

123
xiao zhongying

xiao zhongying

28 日志
1 分类
2 标签
GitHub weibo
Links
  • gitee
© 2020 xiao zhongying
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4