发表于: 2018-04-02 22:49:15

2 809


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 

一、动态代理  https://blog.csdn.net/andyzhaojianhui/article/details/72833114

1.代理模式是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个真实对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。

2.通过代理层这一中间层,有效的控制对于真实委托类对象的直接访问,同时可以实现自定义的控制策略(Spring的AOP机制),设计上获得更大的灵活性。

3.静态代理:若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的。 通常情况下, 静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类。代理类在实现类的基础上增加自己的功能,实现自定义的控制策略。

4.代理类在程序运行时创建的代理方式被成为 动态代理。 也就是说,这种情况下,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代码中的“指示”动态生成的。相比于静态代理, 动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类的函数。

5.使用动态代理前,需要在委托类和实现类中间定义一个中介类,这个中介类实现了一个接口——InvocationHandler接口,这个接口的定义如下:

  1. public interface InvocationHandler { 
  2.   
  3. Object invoke(Object proxy, Method method, Object[] args); 
  4.  

从InvocationHandler这个名称我们就可以知道,实现了这个接口的中介类用做“调用处理器”。当我们调用代理类对象的方法时,这个“调用”会转送到invoke方法中,代理类对象作为proxy参数传入,参数method标识了我们具体调用的是代理类的哪个方法,args为这个方法的参数。这样一来,我们对代理类中的所有方法的调用都会变为对invoke的调用,这样我们可以在invoke方法中添加统一的处理逻辑(也可以根据method参数对不同的代理类方法做不同的处理)。

6.中介类与委托类构成了静态代理关系,在这个关系中,中介类是代理类,委托类就是委托类; 代理类与中介类也构成一个静态代理关系,在这个关系中,中介类是委托类,代理类是代理类。也就是说,动态代理关系由两组静态代理关系组成,这就是动态代理的原理。

7.首先通过newProxyInstance方法获取代理类实例,而后我们便可以通过这个代理类实例调用代理类的方法,对代理类的方法的调用实际上都会调用中介类(调用处理器)的invoke方法,在invoke方法中我们调用委托类的相应方法,并且可以添加自己的处理逻辑。


二、Tomcat    https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension

1.Tomcat定义

Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。

由于 Tomcat 本身也内含了一个 HTTP 服务器,它也可以被视作一个单独的 Web 服务器。但是,不能将 Tomcat 和 Apache HTTP 服务器混淆,Apache HTTP 服务器是一个用 C 语言实现的 HTTP Web 服务器;这两个 HTTP web server 不是捆绑在一起的。Tomcat 包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。

  1. 2.Tomcat重要目录
    • /bin - Tomcat 脚本存放目录(如启动、关闭脚本)。 *.sh 文件用于 Unix 系统; *.bat 文件用于 Windows 系统。
    • /conf - Tomcat 配置文件目录。
    • /logs - Tomcat 默认日志目录。
    • /webapps - webapp 运行的目录。
  2. 3.web工程目录
  3. webapp:工程发布文件夹。其实每个 war 包都可以视为 webapp 的压缩包。

    META-INF:META-INF 目录用于存放工程自身相关的一些信息,元文件信息,通常由开发工具,环境自动生成。

    WEB-INF:Java web应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。

    /WEB-INF/classes:存放程序所需要的所有 Java class 文件。

    /WEB-INF/lib:存放程序所需要的所有 jar 文件。

    /WEB-INF/web.xml:web 应用的部署配置文件。它是工程中最重要的配置文件,它描述了 servlet 和组成应用的其它组件,以及应用初始化参数、安全管理约束等。

4.下载Tomcat,解压后配置环境变量

Bin目录下startup.bat启动如下

在浏览器输入localhost:8080如下(8080是tomcat的默认端口号,可以在配置文件server.xml中修改为浏览器默认端口80则可以不显示)

配置成功

5.基本配置属性

①Server

Server 元素表示整个 Catalina servlet 容器。

因此,它必须是 conf/server.xml 配置文件中的根元素。它的属性代表了整个 servlet 容器的特性。

②Service

Service元素表示一个或多个连接器组件的组合,这些组件共享一个用于处理传入请求的引擎组件。Server 中可以有多个 Service。

③Executor

Executor表示可以在Tomcat中的组件之间共享的线程池。

Connector

Connector代表连接组件。Tomcat 支持三种协议:HTTP/1.1、HTTP/2.0、AJP。

⑤Context

Context元素表示一个Web应用程序,它在特定的虚拟主机中运行。每个Web应用程序都基于Web应用程序存档(WAR)文件,或者包含相应的解包内容的相应目录,如Servlet规范中所述。

⑥Engine

Engine元素表示与特定的Catalina服务相关联的整个请求处理机器。它接收并处理来自一个或多个连接器的所有请求,并将完成的响应返回给连接器,以便最终传输回客户端。

⑦Host

Host元素表示一个虚拟主机,它是一个服务器的网络名称(如“www.mycompany.com”)与运行Tomcat的特定服务器的关联。

6.启动方式

①将打包好的war包放入webapps文件夹,然后执行bin目录下的startup.bat或者startup.sh,然后访问 http://localhost:8080/xxx (xxx 是 war 包文件名)。

②API方式,在pom.xml里面添加依赖

<dependency>  

  <groupId>org.apache.tomcat.embed</groupId> 

   <artifactId>tomcat-embed-core</artifactId> 

  <version>8.5.24</version>

</dependency>


添加 SimpleEmbedTomcatServer.java 文件,内容如下:

import java.util.Optional;
import org.apache.catalina.startup.Tomcat;

public class SimpleTomcatServer {
private static final int PORT = 8080;
private static final String CONTEXT_PATH = "/javatool-server";

public static void main(String[] args) throws Exception {
// 设定 profile
       Optional<String> profile = Optional.ofNullable(System.getProperty("spring.profiles.active"));
System.setProperty("spring.profiles.active", profile.orElse("develop"));

Tomcat tomcat = new Tomcat();
tomcat.setPort(PORT);
tomcat.getHost().setAppBase(".");
tomcat.addWebapp(CONTEXT_PATH, getAbsolutePath() + "src/main/webapp");
tomcat.start();
tomcat.getServer().await();
}

private static String getAbsolutePath() {
String path = null;
String folderPath = SimpleEmbedTomcatServer.class.getProtectionDomain().getCodeSource().getLocation().getPath()
.substring(1);
if (folderPath.indexOf("target") > 0) {
path = folderPath.substring(0, folderPath.indexOf("target"));
}
return path;
}
}

成功后,可以访问 http://localhost:8080/javatool-server 。

③使用maven插件启动(不推荐)

在pom.xml中插入插件

<plugin>  

  <groupId>org.apache.tomcat.maven</groupId>  

   <artifactId>tomcat7-maven-plugin</artifactId> 

    <version>2.2</version>  <configuration>   

    <port>8080</port>    

   <path>/${project.artifactId}</path>   

  <uriEncoding>UTF-8</uriEncoding> 

</configuration></plugin>

运行 mvn tomcat7:run 命令,启动 Tomcat。

成功后,可以访问 http://localhost:8080/xxx (xxx 是 ${project.artifactId} 指定的项目名)。

但是不推荐此方法,因为插件版本太长时间没更新了。。。

④IDE插件

以 Intellij IDEA 为例,提供了 Tomcat and TomEE Integration 插件(一般默认会安装)。

使用步骤

点击 Run>Edit Configurations > New Tomcat Server > local ,打开 Tomcat 配置页面。

点击 Confiure... 按钮,设置 Tomcat 安装路径。

点击 Deployment 标签页,设置要启动的应用。

设置启动应用的端口、JVM 参数、启动浏览器等。

成功后,可以访问 http://localhost:8080/(当然,你也可以在 url 中设置上下文名称)。

tomcat-intellij-run-config.png

注:如果没有,则先在下面界面添加Tomcat server



明天计划的事情:(一定要写非常细致的内容) 

1.明天看一下servlet再来研究springmvc吧


遇到的问题:(遇到什么困难,怎么解决的) 

1.概念性太多了,特别是注解和动态代理,看的一脸懵逼

2.设置ide插件出了一点小问题,如上,不过解决了


收获:(通过今天的学习,学到了什么知识)

1.了解了tomcat及其部署

2.对动态代理有了个粗浅的了解



返回列表 返回列表
评论

    分享到