Author:Exchanges
Version:9.0.2
一、引言1.1 C/S架构和B/S架构1.2 C/S架构(Client/Server 客户端/服务器)1.3 B/S架构(Browser/Server 浏览器/服务器)1.4 资源分类1.5 网络通信三要素二 、服务器2.1 概念2.1.1 什么是Web2.1.2 什么是Web服务器2.2 常见服务器2.3 Tomcat服务器2.4 Tomcat安装2.4.1 下载2.4.2 解压安装2.4.3 Tomcat目录结构2.5 Tomcat启动和停止2.5.1 启动2.5.2 验证2.5.3 停止2.5.4 修改端口号2.5.5 访问资源2.5.6 集成IDEA三 、Servlet【重点】3.1 概念3.1.1 Servlet作用3.2 Servlet开发步骤3.2.1 搭建开发环境3.2.2 编写Servlet3.2.3 配置Servlet3.3 运行测试3.4 常见错误3.4.1 500错误3.4.2 404错误3.5 执行原理3.5 生命周期3.6 自动加载3.7 多线程并发问题3.8 Servlet3.03.9 Servlet的体系结构3.10 Servlet访问路径相关配置
1.1 C/S架构和B/S架构
C/S和B/S是软件发展过程中出现的两种软件架构方式。
1.2 C/S架构(Client/Server 客户端/服务器)
特点:必须在客户端安装特定软件
优点:图形效果显示较好(如:3D游戏)
缺点:服务器的软件和功能进行升级,客户端也必须升级、不利于维护
常见的C/S程序:QQ、微信等
一、引言1.1 C/S架构和B/S架构1.2 C/S架构(Client/Server 客户端/服务器)1.3 B/S架构(Browser/Server 浏览器/服务器)1.4 资源分类1.5 网络通信三要素二 、服务器2.1 概念2.1.1 什么是Web2.1.2 什么是Web服务器2.2 常见服务器2.3 Tomcat服务器2.4 Tomcat安装2.4.1 下载2.4.2 解压安装2.4.3 Tomcat目录结构2.5 Tomcat启动和停止2.5.1 启动2.5.2 验证2.5.3 停止2.5.4 修改端口号2.5.5 访问资源2.5.6 集成IDEA三 、Servlet【重点】3.1 概念3.1.1 Servlet作用3.2 Servlet开发步骤3.2.1 搭建开发环境3.2.2 编写Servlet3.2.3 配置Servlet3.3 运行测试3.4 常见错误3.4.1 500错误3.4.2 404错误3.5 执行原理3.5 生命周期3.6 自动加载3.7 多线程并发问题3.8 Servlet3.03.9 Servlet的体系结构3.10 Servlet访问路径相关配置 一、引言1.1 C/S架构和B/S架构
1.2 C/S架构(Client/Server 客户端/服务器)
1.3 B/S架构(Browser/Server 浏览器/服务器)
1.4 资源分类
1.5 网络通信三要素
二 、服务器2.1 概念 2.1.1 什么是Web
2.1.2 什么是Web服务器
2.2 常见服务器
2.3 Tomcat服务器
2.4 Tomcat安装 2.4.1 下载
2.4.2 解压安装
2.4.3 Tomcat目录结构
2.5 Tomcat启动和停止 2.5.1 启动
2.5.2 验证
2.5.3 停止
2.5.4 修改端口号
2.5.5 访问资源
2.5.6 集成IDEA
三 、Servlet【
|
---|
500错误 |
---|
3.4.2 404错误
找不到页面,一般是访问的路径不存在
3.5 执行原理
1、当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2、查找web.xml文件,是否有对应的
标签体内容。 3、如果有,则在找到对应的
全类名 4、tomcat会将字节码文件加载进内存,并且创建其对象
5、调用其方法
3.5 生命周期
1、Servlet中的生命周期: servlet类对象什么时候创建,什么时候调用什么方法,什么时候销毁。 2、Servlet程序的生命周期由tomcat服务器控制的。 3、Servlet生命周期的方法在Servlet接口中实现。 3.1 构造方法: 创建servlet对象的时候调用,默认情况下,第一次访问servlet的时候创建servlet对象 只调用1次。证明servlet对象在tomcat是单实例的。 3.2 init方法: 创建完servlet对象的时候调用,只调用1次。 3.3 service方法: 每次发出请求时调用,调用n次。 3.4 destroy方法: 停止服务器或者重新部署web项目,销毁servlet对象的时候调用,只调用1次。
3.6 自动加载
默认情况下,第一次访问servlet的时候创建servlet对象,如果servlet的构造方法或init方法中执行了比较多的逻辑代码,那么导致用户第一次访问sevrlet的时候比较慢,我们可以改变servlet创建对象的时机,在servlet的配置信息中,加上一个
标签,提前到加载web应用的时候创建,标签内数字如果是0或者正数则启动程序时创建,如果是负数,则访问时创建。 数字越小优先级越高。
3.7 多线程并发问题
1、注意: servlet对象在tomcat服务器是单实例多线程的。 2、因为servlet是多线程的,所以当多个servlet的线程同时访问了servlet的共享数据,如成员变量,可能会引发线程安全问题。 解决办法: 1)把使用到共享数据的代码块进行同步(使用synchronized关键字进行同步) 2)建议在servlet类中尽量不要使用成员变量。如果确实要使用成员,必须同步。而且尽量缩小同步代码块的范围。(哪里使用到了成员变量,就同步哪里!!),以避免因为同步而导致并发效率降低。
3.8 Servlet3.0
Servlet3.0 好处:
1、支持注解配置。可以不需要web.xml了。
2、步骤:
创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
定义一个类,实现Servlet接口
复写方法
在类上使用@WebServlet注解,进行配置 @WebServlet("/访问路径名")
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebServlet { String name() default "";//相当于 String[] value() default {};//代表urlPatterns()属性配置 String[] urlPatterns() default {};//相当于 int loadOnStartup() default -1;//相当于 WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default ""; }
name: Serlvet名字 (可选)
value: 配置url路径,可以配置多个
urlPatterns:配置url路径 ,和value作用一样,不能同时使用
loadOnStartup:配置Servlet的创建的时机,
3.9 Servlet的体系结构
Servlet -- 接口 | GenericServlet -- 抽象类 | HttpServlet -- 抽象类
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet:对http协议的一种封装,简化操作
定义类继承HttpServlet
复写doGet/doPost方法
3.10 Servlet访问路径相关配置
urlpartten:Servlet访问路径 1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/xxx","/yyy","/zzz"}) 2. 路径定义规则: 1. /xxx:路径匹配 2. /xxx/xxx:多层路径,目录结构 3. *.do:扩展名匹配
注意:url路径访问时,先找动态资源,再找静态资源
1.3 B/S架构(Browser/Server 浏览器/服务器)
特点:无需安装客户端,任何浏览器都可直接访问
优点:涉及到功能的升级,只需要升级服务器端
缺点:图形显示效果不如C/S架构
需要通过HTTP协议访问
B/S架构 |
---|
1.4 资源分类
1、静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析。
如: html,css
2、动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换为静态资源,再返回给浏览器。
如:servlet/jsp....
1.5 网络通信三要素
1、IP:电子设备(计算机)在网络中的唯一标识。
2、端口:应用程序在计算机中的唯一标识。 0~65536
3、传输协议:规定了数据传输的规则
基础协议:
tcp:安全协议,三次握手。 速度稍慢
udp:不安全协议。 速度快
2.1 概念
2.1.1 什么是Web
Web(World Wide Web) 称为万维网,简单理解就是网站,它用来表示Internet主机上供外界访问的资源。
Internet上供外界访问的资源分为两大类
静态资源:指Web页面中供人们浏览的数据始终是不变的。(HTML、CSS)
动态资源:指Web页面中供人们浏览的数据是由程序产生的,不同时间点,甚至不同设备访问Web页面看到的内容各不相同。(JSP/Servlet)
在Java中,动态Web资源开发技术我们统称为Java Web。
2.1.2 什么是Web服务器
Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问,简单来说,就是安装了服务器软件的计算机。
web服务软件的作用:把本地的资源共享给外部访问
2.2 常见服务器
开源:OpenSource(1、开放源代码 2、免费)
Tomcat(主流Web服务器之一)
jetty(淘宝,运行效率比Tomcat高)
resin(新浪,所有开源服务器软件中,运行效率最高的)
三者的用法从代码角度完全相同,只有在开启、关闭服务器软件时对应的命令稍有区别。掌握一个即掌握所有
收费
WebLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
WebSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范
2.3 Tomcat服务器
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,免费开源、并支持Servlet 和JSP 规范。目前Tomcat最新版本为9.0。
Tomcat 技术先进、性能稳定,深受Java 爱好者喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
2.4 Tomcat安装
2.4.1 下载
官网下载(Apache Tomcat® - Welcome!) Tomcat8.5解压缩版本
2.4.2 解压安装
将Tomcat解压到一个没有特殊符号的目录中(一般纯英文即可)
注意
不建议将服务器软件放在磁盘层次很多的文件夹
不建议放在中文路径下
2.4.3 Tomcat目录结构
文件夹 | 说明 | 备注 |
---|---|---|
bin | 该目录下存放的是二进制可执行文件 | startup.bat启动Tomcat、shutdown.bat停止Tomcat |
conf | 这是一个非常重要的目录,这个目录下有两个最为重要的文件server.xml和web.xml | server.xml:配置整个服务器信息。例如修改端口号,编码格式等。 web.xml:项目部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。 |
lib | Tomcat的类库,里面存放Tomcat运行所需要的jar文件。 | |
logs | 存放日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,异常也会记录在日志文件中。 | |
temp | Tomcat的临时文件,这个目录下的东西在停止Tomcat后删除。 | |
webapps | 存放web项目的目录,其中每个文件夹都是一个项目;其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。 | |
work | 运行时生成的文件,最终运行的文件都在这里。 | 当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。 |
2.5 Tomcat启动和停止
2.5.1 启动
进入tomcat安装目录bin下,双击startup.bat 启动程序,出现如下界面
Tomcat启动控制台 |
---|
可能遇到的问题:
1、黑窗口一闪而过:
原因: 没有正确配置JAVA_HOME环境变量
解决方案:正确配置JAVA_HOME环境变量
2、启动报错(可能端口号重复):
找到占用的端口号,并且找到对应的进程,杀死该进程
也可修改自身的端口号,在conf/server.xml文件中修改
2.5.2 验证
打开浏览器,输入 http://localhost:8080
如果出现以下界面证明Tomcat启动成功。
Tomcat访问页面 |
---|
2.5.3 停止
双击shutdown.bat即可关闭Tomcat启动窗口。
2.5.4 修改端口号
Tomcat默认端口号为8080,可以通过conf/server.xml文件修改
注意:修改端口号需要重新启动Tomcat才能生效
2.5.5 访问资源
Tomcat是Web服务器,我们的项目应用是部署在webapps下(不能单独存在需要创建目录),然后通过特定的URL访问。
浏览器地址中输入URL:http://localhost:8080/myweb/hello.html
URL主要有4部分组成:协议、主机、端口、资源路径]()
URL组成 |
---|
2.5.6 集成IDEA
将Tomcat集成到IDEA中,并且创建JavaEE的项目,部署项目。 Run -->> Edit Configurations -->> Templates -->> Tomcat Server -->> Local
重点
】3.1 概念
Servlet:Server Applet的简称,是服务器端的程序(代码、功能实现),可交互式的处理客户端发送到服务端的请求,并完成操作响应。
动态网页技术
JavaWeb程序开发的基础,JavaEE规范(一套接口)的一个组成部分。
概念:运行在服务器端的小程序,用于开发动态资源!!!
3.1.1 Servlet作用
接收客户端请求,完成操作。
动态生成网页(页面数据可变)。
将包含操作结果的动态网页响应给客户端。
3.2 Servlet开发步骤
3.2.1 搭建开发环境
1.创建创建JavaEE项目,并导入servlet-api.jar包
3.2.2 编写Servlet
2.定义一个类,继承HttpServlet,重写doGet/doPost方法
3.2.3 配置Servlet
在web.xml中配置
ServletDemo1 com.company.servlet.ServletDemo1 ServletDemo1 /ServletDemo1
注意:url-pattern配置的内容就是浏览器地址栏输入的URL中项目名称后资源的内容
3.3 运行测试
启动Tomcat,在浏览器地址栏中输入http://localhost:8080/ServletDemo1访问测试
3.4 常见错误
3.4.1 500错误
服务端出现异常
500错误 |
---|
3.4.2 404错误
找不到页面,一般是访问的路径不存在
3.5 执行原理
1、当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2、查找web.xml文件,是否有对应的
标签体内容。 3、如果有,则在找到对应的
全类名 4、tomcat会将字节码文件加载进内存,并且创建其对象
5、调用其方法
3.5 生命周期
1、Servlet中的生命周期: servlet类对象什么时候创建,什么时候调用什么方法,什么时候销毁。 2、Servlet程序的生命周期由tomcat服务器控制的。 3、Servlet生命周期的方法在Servlet接口中实现。 3.1 构造方法: 创建servlet对象的时候调用,默认情况下,第一次访问servlet的时候创建servlet对象 只调用1次。证明servlet对象在tomcat是单实例的。 3.2 init方法: 创建完servlet对象的时候调用,只调用1次。 3.3 service方法: 每次发出请求时调用,调用n次。 3.4 destroy方法: 停止服务器或者重新部署web项目,销毁servlet对象的时候调用,只调用1次。
3.6 自动加载
默认情况下,第一次访问servlet的时候创建servlet对象,如果servlet的构造方法或init方法中执行了比较多的逻辑代码,那么导致用户第一次访问sevrlet的时候比较慢,我们可以改变servlet创建对象的时机,在servlet的配置信息中,加上一个
标签,提前到加载web应用的时候创建,标签内数字如果是0或者正数则启动程序时创建,如果是负数,则访问时创建。 数字越小优先级越高。
3.7 多线程并发问题
1、注意: servlet对象在tomcat服务器是单实例多线程的。 2、因为servlet是多线程的,所以当多个servlet的线程同时访问了servlet的共享数据,如成员变量,可能会引发线程安全问题。 解决办法: 1)把使用到共享数据的代码块进行同步(使用synchronized关键字进行同步) 2)建议在servlet类中尽量不要使用成员变量。如果确实要使用成员,必须同步。而且尽量缩小同步代码块的范围。(哪里使用到了成员变量,就同步哪里!!),以避免因为同步而导致并发效率降低。
3.8 Servlet3.0
Servlet3.0 好处:
1、支持注解配置。可以不需要web.xml了。
2、步骤:
创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
定义一个类,实现Servlet接口
复写方法
在类上使用@WebServlet注解,进行配置 @WebServlet("/访问路径名")
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebServlet { String name() default "";//相当于 String[] value() default {};//代表urlPatterns()属性配置 String[] urlPatterns() default {};//相当于 int loadOnStartup() default -1;//相当于 WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default ""; }
name: Serlvet名字 (可选)
value: 配置url路径,可以配置多个
urlPatterns:配置url路径 ,和value作用一样,不能同时使用
loadOnStartup:配置Servlet的创建的时机,
3.9 Servlet的体系结构
Servlet -- 接口 | GenericServlet -- 抽象类 | HttpServlet -- 抽象类
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet:对http协议的一种封装,简化操作
定义类继承HttpServlet
复写doGet/doPost方法
3.10 Servlet访问路径相关配置
urlpartten:Servlet访问路径 1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/xxx","/yyy","/zzz"}) 2. 路径定义规则: 1. /xxx:路径匹配 2. /xxx/xxx:多层路径,目录结构 3. *.do:扩展名匹配
注意:url路径访问时,先找动态资源,再找静态资源