这里用java来做。。。
发现那些的容器都是apt不能用,vi根本没有,有的都不让安装sources.list
能否设置dockerfile的时候就设置容器名呢?还是docker-compose设置容器名?
以后再说吧
MyBatis
Maven就好像是命令行的IDE。
xmlns 属性可以在文档中定义一个或多个可供选择的命名空间。该属性可以放置在文档内任何元素的开始标签中。该属性的值类似于 URL,它定义了一个命名空间,浏览器会将此命名空间用于该属性所在元素内的所有内容。
什么意思呢?
例如,如果需要使用符合 XML 规范的 XHTML 文档,则应该在文档中的<html> 标签中至少使用一个 xmlns 属性,以指定整个文档所使用的主要命名空间:
<html xmlns="http://www.w3.org/1999/xhtml">
如果需要在一个 div 元素中显示一串数学公式,则可以为该 div 元素定义一个数学命名空间。比如这样:
<div xmlns="http://www.w3.org/1999/Math/MathMl"
>x3/x</div>
如果您不希望在每次显示除法公式时都在 div 元素中定义 xmlns 属性,那么更好的办法是在文档的开头处定义具有前缀的命名空间:
<html xmlns="http://www.w3.org/1999/xhtml">
xmlns:math="http://www.w3.org/1999/Math/MathMl">
然后,您就可以在 div 中使用该前缀了,就像这样:
<math:div>x3/X<div>
虽然在大多数情况下,绝大多数 XHTML 作者都不需要定义多个命名空间,但是您仍然有必要理解存在着多个命名空间,以便在需要选择将基于某个 DTD 的内容嵌入其他 DTD 定义的内容中时,可以管理多个命名空间。(这其实在Android中相当有用)
<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>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>project</artifactId>
<!-- 版本号 -->
<version>1.0</version>
</project>
这4个必不可少。所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。
现在的问题是那个容器装不了vi。。。
容器能通过dockerfile命名吗?或者通过docker-compose命名,Docker Compose 会使用目录名(counter-app)作为项目名称(而不是镜像名,就是当前目录文件夹名,接下来是服务名),Docker Compose 会将所有的资源名称中加上前缀 counter-app_。
也就是说,把source.list文件add进去后,直接apt update,然后用compose命名容器,就是标准做法。
怎么把这个list文件弄出来呢?
docker container cp -a CONTAINER:SRC_PATH DEST_PATH
1、如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。
如果目标路径不存在,则会自动创建目标路径。
2、如果源路径是个文件,且目标路径是不是以 / 结尾,则docker会把目标路径当作一个文件。
如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;
如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意,这种情况下,最好显示的以 / 结尾,以避免混淆。
3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。
如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。
4、如果源文件是个归档文件(压缩文件,比如 .tar文件),则docker会自动帮解压。但是.tar.gz文件是不会自动解压的。
一句话:怎么方便怎么来。
既然是一个整体 ,那么就命名app吧。端口在8001,开放内部80端口。也不知道run什么,跑起来再说。也不挂载什么了。
突然发现不能用 \t,只能space。。
看来要自己建造了,进入添加公钥,是要公钥的。
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
有必要的话把这个做成自己的镜像。就可以修改Dockerfile更好一点了。
vim安装上了。
接下来就是写一个maven文件。以后就把webapp当作工作目录。
eXtendsible markup language 可扩展的标记语言,后缀为 .xml
标记语言:文本相关的其他信息(包括文本的结构和表示信息等)与原来的文本结合在一起以展示文档的结构等
yaml与xml对比,简洁(xml配置中有大量的资源被浪费在开闭资源上)
写入如下:
<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>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.heroisuseless.project-group</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>project</artifactId>
<!-- 版本号 -->
<version>1.0</version>
</project>
在容器里不允许粘贴吗。。。用控制台试试。
mvn help:effective-pom -Doutput=EffectivePom.xml
我们都知道maven是约定大于配置,也就是默认有很多约定好的配置,如果你不改变,那么就使用这些配置,比如你的java源代码放置在src/main/java下, 资源文件放置在src/main/resources下, 所以当我们把源代码,资源按约定的结构建立起来后,pom.xml配置很少就可以build jar/war/ear 包, 那么如果你想知道pom.xml的默认配置有哪些,分别设置了哪些值,那么你可以通过上面的goal来生成一个完整的EffectivePom.xml文件,这里面有完整的配置(超级长的那种)。
第一个是粘贴格式不正确的问题,第二个是maven仓库连接不上。。。
换成ps试试看。ps也是一眼的问题,cmd呢。
如果在.vimrc中设置了自动缩进set autoindent,那么在插入模式下粘贴代码时,vim会自动为代码缩进,导致格式混乱。解决的办法如下
设置set paste选项,这样粘贴代码时就不会产生缩进了,但是如果需要缩进的时候又要把该选项改回set nopaste。
必须要换源,pom.xml基本包罗万象了,但另一个缺点就是太长了,基本不可读。。。
还有,最好还是在windows机上做吧,毕竟开发环境而已。
JDK:它是Java开发运行环境,在程序员的电脑上当然要安装JDK;
JRE:Java Runtime Environment它是Java运行环境,如果你不需要开发只需要运行Java程序,那么你可以安装JRE。例如程序员开发出的程序最终卖给了用户,用户不用开发,只需要运行程序,所以用户在电脑上安装JRE即可。
JDK包含了JRE。
JRE中包含虚拟机JVM
JRE: Java Runtime Environment
JDK:Java Development Kit
JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
Java SE(Java Standard Edition,Java 标准版)是Java技术的核心和基础,是Java ME和Java EE编程的基础
Java2平台有3个版本,它们是适用于小型设备和智能卡的Java2平台Micro版(Java2 Platform Micro Edition,JavaME)、适用于桌面系统的Java 2平台标准版(Java2 Platform Standard Edition,Java SE)、适用于创建服务器应用程序和服务的Java 2平台企业版(Java2 Platform Enterprise Edition,Java EE)。
用IDEA的话,它有自己的maven,很多配置不知道有什么意义,就算知道了问题也不大。
太难受了,用IDEA构建就可以了,自己做就是作死的感觉到处都是error。
这个倒构建成功了,接下来又要学习tomcat。
学学tomcat和apache:
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。那么感觉tomcat跟容器很像了。它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
中间件就是需要利用服务的人(前端写业务的),不需要知道底层逻辑(提供服务的)的具体实现,只要拿着中间件结果来用就好了。
Servlet 执行以下主要任务:
- 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
- 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
- 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
- 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
- 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。
说白了,就是输入处理和输出处理。
感觉sevrlet跟django的view完全相同,就是后台程序主体。
tomcat是一个开源的servlet容器。
catalina 就是Tomcat服务器使用的 Apache实现的servlet容器的 名字。
Tomcat的核心分为3个部分:
(1)Web容器---处理静态页面;
(2)catalina --- 一个servlet容器-----处理servlet;
(3)还有就是JSP容器,它就是把jsp页面翻译成一般的servlet。
IDEA部署到tomcat时,首先启动tomcat的catalina,tomcat本质上是一款servlet容器,因此Catalina是tomcat的核心,其它模块均为catalina提供支持。
虽然tomcat也可以作web服务器,但其处理静态html的速度比不上apache,且其作为web服务器的功能远不如apache,因此我们想把apache和tomcat集成起来。
tomcat还是没明白怎么装app,应该复制过去就装上了。
Apache是世界使用排名第一的Web服务器软件。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
apache实际上它的软件名字叫httpd。httpd是Apache超文本传输协议(HTTP)服务器的主程序。
主配置文件 | /etc/httpd/conf/httpd.conf |
子配置目录 | /etc/httpd/conf.d |
默认发布目录 | /var/www/html/ |
默认发布文件 | index.html |
虚假的服务器总是在8080,真正的服务器总是在80。
这样下来,apache没什么好了解的了,就直接使用就可以了。
现在继续捣鼓Intellij,让它链接上tomcat。
社区版就是没有tomcat server的
算了,卸载掉吧,反正有90天,90天后一切都明白了。
现在学学spring
那你得知道javabean是什么
那你就得知道J2EE是什么
Java开发的方向有三个:
- J2SE
在那个时候就是Java Swing编程(也就是客户端开发,宇宙级开发工具InteliJ idea据说就是用Java开发的),Java语言由于编译成字节码在JVM运行的特性,号称一次编写,全平台运行,所以可以用来做客户端开发。
- J2EE
服务器开发,现在Java应用最广的开发方向,Spring cloud微服务这些东西就是Java服务器开发的一些框架。但是Java由于静态语言、编译型语言的特征,主要还是应用在企业级服务器开发领域。
- J2ME
这个玩意比较偏门,属于嵌入式开发,在Android和iOS系统大红大紫的今天,基本无人问津。
所以题主所问Java开发和J2EE开发的区别,我的回答:从范畴来说,Java开发包括J2EE开发,两者属于内含关系。
Java语言欠缺属性、事件、多重继承功能。所以,如果要在Java程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码。Java Bean正是编写这套胶水代码的惯用模式或约定。这些约定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。遵守上述约定的类可以用于若干工具或库。总的来说:
1、所有属性为private
2、提供默认构造方法
3、提供getter和setter
4、实现serializable接口
Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。
Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用
三层架构
- A 表现层 web层 MVC是表现层的一个设计模型
- B 业务层 service层
- C 持久层 dao层
那什么是dao层?
dao层:dao层叫数据访问层,bai全du称为data access object,属于zhi一种比较底层,比较基础的操作,具体到dao对于某个表、某个实体的增删改查
service层:service层叫服务层,被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来。
POJOs有时候也称作Plain Ordinary Java Objects,表示一个数据集合。
POJO只是一个普通的,已删除限制的Java Bean。 Java Bean必须满足以下要求:
1. 默认无参数构造函数
2. 对于值foo为可变属性,遵循get()方法和set()方法的Bean协议;如果值foo是不可变的,则不使用setFoo。
3.必须实现java的序列化(java.io.Serializable)
POJO不强制执行这些操作。顾名思义:在JDK下编译的对象可以被认为是一个普通的Java对象。没有应用服务器,没有基类,没有需要使用的接口。
Spring有几个非常重要,难于理解的概念。
JDBC=Java Data Base Connectivity,
ORM=Object Relational Mapping,
OXM=Object XML Mapping,
JMS=Java Message Service
IoC 容器
Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。这些对象被称为 Spring Beans
很简单 ,就是本来你该做的事情 你不去做了 让系统去做,比如,你获取一个对版象的时候,往往需要new出实例来,如果用了控制反转,那这件事情 就不需要你做了,你只需要在配置文件xml中配置好,系统就帮你new,控制反转也叫依赖注入,就是把该用到的东西提前注入进去,下次直接用而不是每次都new
IOC 容器具有依赖注入功能的容器,它可以创建对象,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。在Spring中BeanFactory是IOC容器的实际代表者。
Spring 提供了以下两种不同类型的容器。
序号 | 容器 & 描述 |
---|---|
1 | Spring BeanFactory 容器 它是最简单的容器,给 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口来定义。BeanFactory 或者相关的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的与 Spring 整合的第三方框架的反向兼容性的目的。 |
2 | Spring ApplicationContext 容器 该容器添加了更多的企业特定的功能,例如从一个属性文件中解析文本信息的能力,发布应用程序事件给感兴趣的事件监听器的能力。该容器是由 org.springframework.context.ApplicationContext 接口定义。 |
ApplicationContext 容器包括 BeanFactory 容器的所有功能,所以通常不建议使用BeanFactory。BeanFactory 仍然可以用于轻量级的应用程序,如移动设备或基于 applet 的应用程序,其中它的数据量和速度是显著。
反射
简单的说,就是运行时动态执行源代码
比如一个用Java写的程序,里边有一个文本框。你在里边输入一段java程序文本,然后这段文本不但可以被执行,而且还可以改变你的程序的状态。
用途,主要基本都是用于做依赖注入(dependency injection)。
举个例子——游戏里,你写了一个MOD,然后你不用改变主程序的源代码,直接就可以使用这个MOD的功能。(当然MOD一般不是用反射写的)但大概是这个意思。
假设你有一个包含文本编辑器组件的应用程序,并且你想要提供拼写检查。标准代码看起来是这样的:
public class TextEditor {
private SpellChecker spellChecker;
public TextEditor() {
spellChecker = new SpellChecker();
}
}
在这里我们所做的就是创建一个 TextEditor 和 SpellChecker 之间的依赖关系。而在控制反转IoC的场景中,我们会这样做:
public class TextEditor {
private SpellChecker spellChecker;
public TextEditor(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
}
在这里,TextEditor 不应该担心 SpellChecker 的实现。SpellChecker 将会独立实现,并且在 TextEditor 实例化的时候将提供给 TextEditor,整个过程是由 Spring 框架的控制(例如写到XML中)。
自己在写Android的时候,常常遇到这种情况,实际上这样便于调试,或者更好的,更多样性地设置这个依赖注入实例。
依赖注入的第二种方法是通过 TextEditor 类的 Setter 方法,我们将创建 SpellChecker 实例,该实例将被用于调用 setter 方法来初始化 TextEditor 的属性。
Intellij搭建成功,但好像不能实时更新,打开关闭特别慢,接下来用它构建一个小项目。
从最简单最简单的maven项目开始。
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中为最成功的一个。 JUnit有它自己的JUnit扩展生态圈。
多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
最简单的在这里:
https://blog.csdn.net/u011212394/article/details/102083293
现在的话,实际上jsp就能够写网页,但是我想前后端分离。。。
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
前后端分离,,,面向配置编程真难受。。。