开始之前,先放一张百度脑图:
文章目录
web介绍
web相关概念回顾
-
软件架构
C/S:客户端端/服务器端
B/S 浏览器/服务器端(most)
(B/S架构零维护,开发快速) -
资源分类 静态资源(所有用户访问到的结果一样html,css,js) & 动态资源(每个用户访问相同资源,得到结果不一样servlet jsp php asp)
- 浏览器里面有静态资源的解析引擎,可以直接解析访问到的静态资源
- 当动态资源被访问时,需要先转为静态资源 ,再返回给浏览器(重点)
- 请求与响应模型
-
网络通信三要素
-
IP地址 : 省略
-
端口 :应用程序在计算机中的唯一标识(0~65536范围)
-
传输协议:规定数据传输的规则
基础协议:
- tcp协议:三次握手,速度稍慢
- udp协议:不安全的广播协议,速度快
-
web服务器软件
web服务器软件:接收用户的请求,处理请求,做出响应
- 在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
- web容器
- 与java相关的web服务器软件
- weblogic:oracle公司,大型的javaEE服务器,支持所有的javaEE规范,收费
- webSphere:IBM公司, 大型的,支持所有,收费
- Tomcat:Apache基金组织,中小型javaEE服务器,仅支持少量,开源的,免费的
- JavaEE:java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范
Tomcat(web服务器软件)
Tomcat简介
-
下载:官网 8.5.31 core
-
安装:解压安装压缩包 注意,安装目录不要有中文和空格
-
卸载:删除目录即可
-
启动:双击bin目录下 startup.bat文件 Linux下是startup.sh文件
启动后浏览器访问http://121.0.0.1:8080(默认) or http://localhost:8080 即可访问运行成功的tomcat
-
可能遇到的问题一:命令行窗口一闪而过 原因:未正确配置JAVA_HOME环境变量
-
启动报错:可以去logs文件去看报错信息,根据报错信息解决
一般会将tomcat的默认端口改为80,80端口是http协议的默认端口
可以在conf文件夹中的server.xml中修改端口号。
-
-
关闭:
- 正常关闭:
- bin目录下shutdown.bat
- ctrl + c
- 强制关闭:点击窗口上面的关闭
后续的启动和关闭大部分其实都是在IDE中执行。
- 正常关闭:
-
配置:
-
部署项目的方式
-
直接将项目文件放到webapps中
简化部署:将项目打包成war包,再将war包放到webapps目录下,war包会自动解压缩
-
在conf文件夹中的server.xml配置
找到标签,在其中添加如下代码
< Context docBase=“filepath” path = “/name” />
docBase是指你项目文件在你电脑上路径,path是指项目的访问路径,是虚拟路径。
-
conf/server.xml是tomcat的核心配置文件,在里面配置不安全
且修改后要重启才生效
在 conf/catalina/localhost 目录下创建一个任意名称的xml文件
在文件中编写
< Context docBase=“filepath” />
此时虚拟目录是xml文件的名称
-
-
静态项目和动态项目
-
目录结构
-
java动态项目的目录结构
– 项目的根目录
– WEB -INF 目录
– web.xml :web的核心配置文件
– Classes目录:放置字节码文件的目录
– lib目录:放置依赖的jar包
-
-
-
Tomcat集成到IDEA,创建部署项目
关于这一部分网上有很多教程,建议使用IDEA或者eclipse。但现在似乎越来越多的转向了IDEA。
此处我用到的tomcat版本是8.5.31,Java EE 7,javaEE对应servlet3.1版本。
成功创建后,我们可以看到项目的目录同我们之前说过的tomcat目录是一样的。
servlet
概念及入门实践
-
概念:运行在服务器端的小程序(server applet)
- servlet就是一个接口,定义了java类被浏览器访问(tomcat识别)的规则
- 将来我们定义一个类,实现servlet接口,复写方法
-
入门实践
-
创建javaEE项目
-
定义一个类,实现Servlet接口
-
实现接口中的抽象方法
代码:
import javax.servlet.*; import java.io.IOException; public class servletDemo1 implements Servlet { /*Servlet生命周期方法*/ //当Servlet第一次被创建对象时执行该方法,该方法在整个生命周期中只执行一次 public void init(ServletConfig arg0) throws ServletException { System.out.println("=======init========="); } //提供服务方法方法:对客户端响应的方法,该方法会被执行多次,每次请求该servlet都会执行该方法 public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("hello,servlet"); } //销毁方法:当Servlet被被正常销毁时执行该方法,只执行一次 public void destroy() { System.out.println("******destroy**********"); } /** *获取ServletConfig对象 *ServletConfig就是servlet的配置对象 */ public ServletConfig getServletConfig() { return null; } /** *获取Servlet的一些信息,版本,作者等 */ public String getServletInfo() { return null; } }
配置Servlet
-
-
执行原理:
- 当服务器接收到客户端浏览器的请求后,会解析请求的URL路径,获取访问的Servlet的资源路径
- 查找 web.xml文件,是否有对应的<url - pattern> 标签体内容
- 如果有,则在找到对应的<sevlet - class> 全类名
- tomcat会将字节码文件加载进内存,并且创建其对象
- 调用其方法
-
几个重要问题
-
servlet什么时候被创建
-
默认情况下,第一次被访问的时候,Servlet被创建
-
可以配置执行servlet的创建时机
-
-
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
当多个用户同时访问时,可能存在线程安全问题
解决:尽量不要在Servlet里面定义成员变量,即使定义了成员变量,也不要对其修改
-
init方法一般用于加载资源,destroy方法一般用于释放资源
-
-
Servlet3.0
-
优点:支持注解配置,可以不需要web.xml
-
步骤
-
创建javaEE项目,选择servlet的版本3.0以上,可以不创建web.xml
-
定义一个类,实现servlet的接口
-
重写方法
-
在类上使用@WebServlet注解,进行配置
一个servlet可以定义多个访问路径或多层路径即@WebServlet(" .demo1", "/usr/", “/usr/demo3”)
-
-
servlet的体系结构
推荐第三种,继承HttpServlet。
HTTP
-
概念:Hyper Text Transfer Protocol’
传输协议:定义了客户端和服务器端通信时发送数据的格式
-
特点
- 基于TCP/IP协议
- HTTP的默认端口是80
- 基于请求/响应模型,即一次请求对应一次响应
- 无状态的:每次请求之间相互独立,不能够交互数据
-
举例
浏览器访问www.baidu.com,到底向百度的服务器发送了几次请求?
答:发送了多次请求,收到了多次响应。每张图片,css文件,js文件都是一次单独的请求。 可以按F12找到Network,里面的每一项都是一次单独的请求和响应。
-
历史版本
- 1.0 每一次请求响应都会建立新的连接。(建立连接 -> 发送数据 -> 断开 ->建立连接 -> 发送数据 -> 断开)
- 1.1 (复用建立的连接) (建立连接 -> 发送数据 ->等待一会儿若还有数据发送,复用刚才连接 - >等待一会儿没有数据发送 -> 断开)
请求消息数据格式
-
请求行
请求方式 请求url 请求协议/版本
Get url HTTP/1.1
- HTTP协议中有7钟请求方式,常用的由2种
- GET:
- 请求参数在请求行中,在url后
- 请求的url长度有限制的
- 不太安全
- POST
- 请求的参数在请求中
- 请求的url长度没有限制
- 相对安全
- GET:
- HTTP协议中有7钟请求方式,常用的由2种
-
请求头
请求头名称: 请求头值(多个值用 , 分隔开)
常见的请求头:
-
User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本
可以在服务器端获取改头的信息,解决浏览器的兼容问题
-
Aceept:告诉服务器,浏览器可以接受你给我响应的什么样的数据格式
-
Referer:https://www.baidu.com/
告诉服务器,当前请求从哪里来
作用
1. 防盗链 2. 统计工作:方便统计比如一些流量的来源。
-
-
请求空行
空行,用于分割POST请求头和请求体
-
请求体(正文) GET方式无请求体
封装POST请求消息的请求参数的
以上信息可在浏览器的调试界面的Network看到
响应消息数据格式
与请求消息数据格式很类似。
-
响应行
组成:协议/版本 响应状态码 状态码描述
响应状态码是指服务器告诉客户端本次请求和响应的一个状态
响应状态码 Value 1xx 服务器接收客户端消息,但为接收完成,等待一段时间,发送1xx状态码 2xx 成功. 代表状态码:200 3xx 重定向。 代表状态码 :302(重定向) 304(访问缓存) 4xx 客户端错误 代表:404(请求路径无对应资源) 405(请求方式无对应的doXXX方法) 5xx 服务器错误 代表:500(服务器内部出现异常) -
响应头
组成:头名称:值
常见响应头:
-
Content-Type: 服务器告诉客户端本次响应体数据格式及编码格式
Content-Type: text/html; charset=UTF-8
-
Content-Length: 666 表示字节的个数
-
Content-disposition:服务器告诉客户端以什么样的格式打开响应体数据
默认值是:in-line 在当前页面内打开
attachment:以附件形式打开响应体 (文件下载)
-
-
响应空行
-
响应体
真实的传输的数据
总结
记JAVA web 第一次学习。同时为了跟上潮流,已经从eclipse转为IDEA。
有什么问题欢迎大家在下方评论或者私信或者联系邮箱[email protected]