目录
前言
本系列文章将会记录笔者从服务端小白一点点跋涉的过程。笔者是Android端开发,所以对java还是有一些经验的,这次服务端的切入方向也是java web。内容比较零碎,学习路线不一定值得借鉴。有些词或者技术点可能会反复出现,因为刚开始对于某样东西的理解是极其粗浅的,随着学习的深入,我们一定会对原有的概念进行刷新认知,为了能够如实反映学习的路线,不会返回去补充知识点,而是会重新记录。擦……还是等学点皮毛之后再来写前言吧……
就如标题说的"伪装成服务端开发",实际上服务端开发的内容相比客户端而言,更是广阔,各种各样的框架层出不穷,所以如果不长时间学习实践,就靠书本知识和一些些demo,就只能到这个地步了。不过,谁不是从这个地步走上去的呢?
开发环境
开发系统: macOS
java : 1.8
开发工具 : IntelliJ IDEA
maven
下载安装maven。网上资料很多,不过就是下载,解压,配置一个path而已。
maven就相当于android中的gradle的功能,包括管理你的文件结构,编译流程,依赖管理。实际上,我们也可以使用gradle来完成这件事情。但是由于在eclipse中对于gradle的支持并不好,并且业内使用maven的也比较多,所以习惯性的,大家还是在用maven来维护java web项目。
Web 服务器
用我微少的知识我知道,在搭建一个网站的时候我们需要一个 WEB服务器,用百度的话说就是一个通过HTTP协议可以向浏览器等WEB客户端提供文档的程序。常用的WEB服务器有Apache,Nginx,Lighttpd,Tomcat等。
至于具体的工作原理,协议出来,各种各种结构图,我们可以在完成“伪装”之后再按需填充。面向对象编程嘛,先要有对象,然后再慢慢在对象里添加需要的东西。
Servlet & Servlet容器
在WEB服务器的逻辑中,我们只能提供静态的请求网页,因为我们没有中间服务代码能够在请求过来的时候根据请求做某些处理。为了解决这个问题,于是就引入了Servlet,所谓的Servlet就是,Servlet就是使用java编写的服务端的小程序,主要就是根据请求动态生成web内容。
而servlet容器就是装载这些小程序的容器。
Servlet容器和Web服务器处理一个请求的基本流程:
1. Web服务器接收到HTTP请求
2. Web服务器将请求转发给servlet容器
3. 如果容器中不存在所需的servlet,容器就会检索servlet,并将其加载到容器的地址空间中
4. 容器调用servlet的init()方法对servlet进行初始化(该方法只会在servlet第一次被载入时调用)
5. 容器调用servlet的service()方法来处理HTTP请求,即,读取请求中的数据,创建一个响应。servlet会被保留在容器的地址空间中,继续处理其他的HTTP请求
6. Web服务器将动态生成的结果返回到正确的地址。
下图标出了上述的六个步骤:
PS: servlet着重于控制端,展示端会使用jsp,不过现在jsp的替代还是很多的,如果要学展示端,可以网上搜搜,选一门学学,至于笔者的学习流程中,暂时还没有展示端的安排。
Tomcat
Tomcat厉害了,首先他是一个servlet容器,另外他有个兼职,WEB服务器,所以很多新手入门教程的时候直接使用Tomcat完成了所有的服务部署流程,但是我们要清楚,这里其实有两个部分的。
Tomcat的安装网上资料很多。
Tomcat 重要目录
- /bin - Tomcat 脚本存放目录(如启动、关闭脚本)。
*.sh
文件用于 Unix 系统;*.bat
文件用于 Windows 系统。 - /conf - Tomcat 配置文件目录。
- /logs - Tomcat 默认日志目录。
- /webapps - webapp 运行的目录。
web 工程发布目录结构
一般 web 项目路径结构
|-- webapp # 站点根目录
|-- META-INF # META-INF 目录
| `-- MANIFEST.MF # 配置清单文件
|-- WEB-INF # WEB-INF 目录
| |-- classes # class文件目录
| | |-- *.class # 程序需要的 class 文件
| | `-- *.xml # 程序需要的 xml 文件
| |-- lib # 库文件夹
| | `-- *.jar # 程序需要的 jar 包
| `-- web.xml # Web应用程序的部署描述文件
|-- <userdir> # 自定义的目录
|-- <userfiles> # 自定义的资源文件
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 和组成应用的其它组件,以及应用初始化参数、安全管理约束等。
tomcat在conf文件夹下有一个 conf/server.xml 文件,该文件用于tomcat本身的属性设置。他有很多设置项,我们可以在官网找到,用到一个学一个吧。
war文件
(扩展名为.War,Web Application Archive)包含全部Web应用程序。在这种情形下,一个Web应用程序被定义为单独的一组文件、类和资源,用户可以对jar文件进行封装,并把它作为小型服务程序(servlet)来访问。 war包是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下。
参考:
https://blog.csdn.net/snarlfuture/article/details/18473761
https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension
https://blog.csdn.net/ganquanzhong/article/details/80719703