网站建设 之 web应用系统开发

这里用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 架构

中间件就是需要利用服务的人(前端写业务的),不需要知道底层逻辑(提供服务的)的具体实现,只要拿着中间件结果来用就好了。

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开发的方向有三个:

  1. J2SE

在那个时候就是Java Swing编程(也就是客户端开发,宇宙级开发工具InteliJ idea据说就是用Java开发的),Java语言由于编译成字节码在JVM运行的特性,号称一次编写,全平台运行,所以可以用来做客户端开发。

  1. J2EE

服务器开发,现在Java应用最广的开发方向,Spring cloud微服务这些东西就是Java服务器开发的一些框架。但是Java由于静态语言、编译型语言的特征,主要还是应用在企业级服务器开发领域。

  1. 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 提供了以下两种不同类型的容器。

序号容器 & 描述
1Spring BeanFactory 容器

它是最简单的容器,给 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口来定义。BeanFactory 或者相关的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的与 Spring 整合的第三方框架的反向兼容性的目的。

2Spring 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项目的框架。

前后端分离,,,面向配置编程真难受。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值