Java从0开始(下)

简介: Java从0开始

Java从0开始(上):https://developer.aliyun.com/article/1508412

JSP

Servlet是java标准库中的网络连接库。它可以处理HTTP请求,发送HTTP响应。可以通过PrintWriter来发送响应,然后输出HTML,但是输出太麻烦,JSP就是用来简便这个操作的,一个简单的JSP(Java Server Pages)如下:

<html>
<head>
    <title>Hello World - JSP</title>
</head>
<body>
    <%-- JSP Comment --%>
    <h1>Hello World!</h1>
    <p>
    <%
         out.println("Your IP address is ");
    %>
    <span style="color:red">
        <%= request.getRemoteAddr() %>
    </span>
    </p>
</body>
</html>

整个JSP的内容实际上是一个HTML,但是稍有不同:

  • 包含在**<%––%>**之间的是JSP的注释,它们会被完全忽略;
  • 包含在**<%%>**之间的是Java代码,可以编写任意Java代码;
  • 如果使用**<%= xxx %>**则可以快捷输出一个变量的值

JSP可以简单看作HTML与Java的混合。

框架

什么是框架?

简单来说就是java项目开发的半成品(在此基础上进行自身项目的开发),由一系列的类和接口构成;

现阶段需要了解的框架?

Spring boot, Pandora boot;

Filter

在实际的Web应用程序中,通常有URL映射,也会有多个Servlet来处理URL。以下列为例:


545055d2eaf3b15614d43332cfabc9e1.png


其中,Profile和Post以及Reply三个都需要用户登陆才能操作,否则就跳转到登陆页面,如果将登陆判断都放回到这三个里,代码过于重复,可以利用filter来进行预处理,即将“/user/*”之外的所有请求都屏蔽。

PS:其实就相当于进行了一个过滤(正则匹配之类的)。


JavaBean

当class的定义满足以下规范

若干private实例字段(即成员量);

通过public方法来读写实例字段;

并且读写方法符合以下命名规范(可以只有读/写):

// 读方法:
public Type getXyz()
// 写方法:
public void setXyz(Type value)

那就称为JavaBean。

显而易见,这种结构的主要作用是为了传递数据。

Spring

优良特性

IoC容器

inversion of control,即控制权反转,又称为依赖注入(Dependency Injection)。IoC将组件的创建+配置与组件的使用相分离(例如,A类中需要B类对象,A B中都需要一个Data对象,传统方式是需要A B类中都new 一个Data对象,但是IoC可以只需要一个,实现对象的共享、创建很方便)。IoC容器中创建的组件被称为JavaBean组件。

PS:JavaBean容器是通过读取XML文件使用反射(通过字符串来表示类)机制完成的。

什么是容器?


容器是一种为某种特定组件的运行提供必要支持的一个软件环境。例如,Tomcat就是一个Servlet容器,它可以为Servlet的运行提供运行环境。类似Docker这样的软件也是一个容器,它提供了必要的Linux环境以便运行一个特定的Linux进程。


所以,Spring的核心就是提供一个IoC容器,可以管理所有轻量级的JavaBean组件,提供包括生命周期管理、配置等底层服务。


PS:BeanFactory和ApplicationContext的区别在于,BeanFactory是按需创建,即第一次获取Bean才创建,但是后者会一次性创建所有的Bean(也就是所谓的饥汉子)。由于后者是继承Beanfactory接口,提供更多的功能。


PPS:注解(Annotation)是另一种配置Bean的方式,相比于XML更加便捷(便于更新扩展)。详见:https://www.liaoxuefeng.com/wiki/1252599548343744/1282382596407330


AOP

Aspect Oriented Programming,面向切面编程。跟OOP(面向对象,主要特点是封装、继承、多态)不同的是,AOP将系统分解为不同的关注点(切面)。


为什么会想到使用切面的方式?在实际的项目开发中,有许多的重复的代码段:例如安全检查、日志、事务等代码,为了避免重复编写代码,可以使用Proxy模式(即将这部分代码放入Proxy中),但是这种方式需要抽取接口并对每个方法进行Proxy的实现。AOP就是为了减少重复的操作次数。

DI

Dependency injection,依赖注入,不需要手动调用setXX方法去设置,而是通过配置赋值;(依赖于控制反转)

容器

Spring是一个容器,它包含并且管理应用对象的声明周期。

组件化一站式

组件化是指可以使用XML或者注解来组合对象;

一站式是指可以整合各种开源框架和第三方类库;

其他

Spring Boot

Spring Boot是一个基于Spring的套件,它帮我们预组装了Spring的一系列组件,以便以尽可能少的代码的配置来开发基于Spring的Java应用程序,可以简单的理解为模块化的Spring。

PS:高度工具化模块化,建议先学会了Spring在进行SpringBoot的开发,不然很容易出现题但是找不到解决的方法

实战教程

参考教程:

https://juejin.cn/post/6844903779519725575

PS:需要新建Spring Boot时,需要安装Spring Assistant,自行百度;

PS: 在Sprigboot项目中,程序启动入口Application只会扫描当前的文件路径下的java代码;

其他

JavaSE

Java Standard Edition,java标准版。

classloader

用来加载class,负责将calss的字节码形式(可以来自磁盘文件也可以是jar包里的class,也可以是远程的字节流)转换为内存形式的class对象,其实字节码的本质就是字节数组【】byte,拥有特定的复杂的内部格式。


PS:许多字节码加密就是通过定制Classloader来实现的,即对字节码进行加密,再用特定的工具来解密。


JVM中内置三个Classloader:

  • BootstrapClassloader:负责加载JVM运行时核心类,如java.util.*等,是用C代码实现的,称为根加载器;
  • ExtensionClassLoader:负责加载JVM扩展类。例如swing等;
  • AppClassLoader:面向用户的加载器,例如classpath中定义的路径

default

接口通常只能声明方法,java8之后可以使用default,表示接口中该方法为普通方法,可以写方法体;这是为了解决“对于已经发布的版本,很难在给接口添加新方法的同时,不影响已有的实现,一切都是为了兼容性”。

一些问题

类优先于接口:


https://blog.csdn.net/qq_35835624/article/details/80196932


Java TDO


https://www.cnblogs.com/xt0810/p/3654574.html


设计模式的学习——常见的设计模式;

参考资料

《HeadFirst Java》

部分链接见文章内;

相关文章
|
10月前
|
设计模式 消息中间件 算法
【实习总结】Java学习最佳实践!
【实习总结】Java学习最佳实践!
108 3
|
9月前
|
NoSQL 算法 Java
技术好文:Redis实现分布式锁的7种方案
技术好文:Redis实现分布式锁的7种方案
|
9月前
|
存储 SQL NoSQL
ClickHouse(16)ClickHouse日志表引擎Log详细解析
ClickHouse的Log引擎系列适用于小数据量(&lt;1M行)的表,包括StripeLog、Log和TinyLog。这些引擎将数据存储在磁盘,追加写入,不支持更新和索引,写入非原子可能导致数据损坏。Log和StripeLog支持并发访问和并行读取,Log按列存储,StripeLog将所有数据存于一个文件。TinyLog是最简单的,不支持并行读取和并发访问,每列存储在单独文件中。适用于一次性写入、多次读取的场景。
293 0
|
10月前
|
Android开发
Android 高通平台集成无源码apk示例
Android 高通平台集成无源码apk示例
142 0
|
Go iOS开发 MacOS
Go学习笔记-代码调试工具 dlv
Go学习笔记-代码调试工具 dlv
1346 1
Go学习笔记-代码调试工具 dlv
|
10月前
Failed to connect to apiserver: the server has asked for the clieto provide credentials
Failed to connect to apiserver: the server has asked for the clieto provide credentials
80 0
|
程序员 Android开发
Eclipse 注释模板配置以及设置护眼模式--超级超级详细
Eclipse 注释模板配置以及设置护眼模式--超级超级详细
|
10月前
安装并使用labelImg标注数据集,yolo,VOC格式
安装并使用labelImg标注数据集,yolo,VOC格式
288 0
|
存储 测试技术
西门子S7-200 SMART自由口通信,如何编写接收程序
本篇我们来学习编写西门子S7-200 SMART自由口通信的接收程序。我们继续使用上篇文中STEP7 Micro/WIN SMART编程软件所创建的项目,删除已经编写的发送程序,再来编写接收程序,拖动常开触点到程序段1中,输入地址SM0.1,通过传送指令,将常数十六进制数09送到SMB130。
西门子S7-200 SMART自由口通信,如何编写接收程序
|
存储 文件存储 数据安全/隐私保护
seafile搭建个人存储网盘
几种开源的网盘存储解决方案