目录
WEB相关概念
软件架构:
1.C/S架构:客户端/服务器端
2.B/S架构:浏览器/服务器端
资源分类:
1.静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源。如html,css,JavaScript。静态可以直接被浏览器解析。
2.动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。如servlet/jsp,php。动态资源被访问后,需要先转换为静态资源,再返回给浏览器(响应)。
网络通信三要素:
IP:电子设备(计算机)在网络中的唯一标识。
端口:计算机上的某个指定应用程序的唯一标识。0~65536之间。
传输协议:规定了数据传输的规则。(可以看作服务器和浏览器交流要用一种语言,即遵循相同的规则,协议)
基础协议:
1.tcp:安全协议,三次握手,速度较慢
2.udp:不安全协议,速度快
WEB服务器软件
服务器:安装了服务器软件的计算机
服务器软件:接收用户的请求,处理请求,做出响应
WEB服务器软件
1.让用户通过浏览器访问,接收用户的请求,处理 请求,做出响应。
2.在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目。
3.web服务器又称为web容器,因为动态资源在web容器中才可以运行。
常见的WEB服务器软件:
1.webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费。
2.webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费。
3.JBOSS:JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费。
4.Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的javaee规范。
JAVAEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范。
Servlet
概念:server applet运行在服务器端的小程序
1.servlet就是一个接口,定义了java类被浏览器访问到(tomcat识别)的规则
2.将来我们自定义一个类,实现servlet接口,复写方法。
注:我们写的实现逻辑的java类不需要使用Main方法运行,tomcat来执行它。
servlet快速入门
步骤:
1.创建一个javaee项目
2.定义一个类,实现servlet接口中的抽象方法
3.配置servlet
为什么需要配置servlet呢?
用户通过Url来访问动态资源,所以我们需要将我们动态资源中的类映射为一个资源路径。
查看api文档:
在web.xml中配置servlet:
注意:是在根标签里边配置的
<servlet>
<servlet-name>demo01</servlet-name>
<!--相当于给类起了别名-->
<servlet-class>web.servlet.ServletDemo01</servlet-class>
<!--这里需要填入被映射类的全类名-->
</servlet>
<servlet-mapping>
<servlet-name>demo01</servlet-name>
<url-pattern>/demo1</url-pattern>
<!-- /demo1是类(别名demo01)映射为资源路径的路径名字-->
</servlet-mapping>
实现逻辑的类:
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo01 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//提供服务的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet");//会在控制台输出
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
servlet原理
执行原理:
1.当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2.查找web.xml文件,是否有对应的<url-pattern>标签体内容
3.如果有,则在找到对应的<servlet-class>全类名
4.tomcat会将字节码文件加载进内存,并且创建其对象
5.调用其方法
Servlet生命周期
servlet接口中的方法:
public void init()方法:在Servlet被创建时执行,只会执行一次。
public service()方法:提供服务的方法,每一次servlet被访问时,被执行,执行多次
public void destory()方法:在服务器正常关闭时执行,只会执行一次。
public ServletConfig getServletConfig():获取servletConfig对象。
ServletConfig:Servlet的配置对象。
public String getServletInfo():获取Servlet的相关信息。
servlet的生命周期:
1.被创建:执行init方法,只执行一次,说明servlet在内存中只存在一个对象,即servlet是单例的。通常用于创建资源。
注意:多个用户同时访问时,可能存在线程安全问题(有的线程对数据进行修改,导致数据错乱)
解决方案:尽量不要在servlet中定义成员变量,局部变量不能共享。即使定义了成员变量,但是不要赋值及修改。
2.提供服务:执行service方法,执行多次。即每一次访问Servlet时,Service方法都会被调用一次。
3.被销毁:执行destroy方法,只执行一次。服务器被正常关闭时,才会执行该方法。servlet被销毁前执行destory方法,通常用于释放资源
Servlet被创建
创建时间:
默认情况下,第一次访问时,Servlet被创建
可以配置执行Servlet的创建时机
指定创建时间:在<servlet>标签下配置。
<servlet>
<servlet-name>demo02</servlet-name>
<!--相当于给类起了别名-->
<servlet-class>web.servlet.ServletDemo02</servlet-class>
<!--这里需要填入被映射类的全类名-->
<!-- 指定Servlet的创建时机-->
<!-- 1.第一次访问时,创建。
<load-on-startup>的值为负数,默认为负数-->
<!-- 2.在服务器启动时,创建。
<load-on-startup>的值为0或正整数
-->
<load-on-startup>-1</load-on-startup>
</servlet>
Servlet注解配置
servlet3.0支持注解配置。可以不需要web.xml配置。
步骤:
1.创建JavaEE项目,选择servlet
3.0以上的版本,可以不创建web.xml
2.定义一个类,实现servlet接口,复写方法。
3.在类上使用@webServlet("类对应的资源路径名")注解,进行配置。
虚拟目录:URL上的项目路径
Servlet体系结构
查看API文档寻找servlet的继承关系:
三者的关系:
GenericServlet: 继承该类时,只需要实现service方法即可,其他的方法该类默认已经空实现只将service设置为静态方法。想要实现其他方法手动添加即可。
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo04")
public class ServletDemo04 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("只需要实现service方法哦");
}
}