Servlet理论+实践入门
一、JavaWeb基础知识1. 软件架构a. C/S架构b. B/S架构浏览器Web服务器
2. 资源分类a. 静态资源b. 动态资源
3. 网络通信三要素
二、Tomcat环境配置1. 启动与关闭2. 常见错误问题3. 部署Web项目a. Web项目目录结构b. Tomcat部署web项目i. 直接放在webapps目录下ii. 配置conf/server.xml文件iii.在conf/Catalina/localhost创建xml文件
三、Servlet1. 概念2. Servlet入门示例3. Servlet执行原理4. Servlet生命周期a. 创建:执行init方法Servlet的创建时机?Servlet是单例还是多例?
b. 提供服务c. 被销毁
5. Servlet 3.0注解示例6. IntelliJ IDEA集成Tomcata. web项目的自动部署b. 工作空间目录和web项目目录c. 断点调试:使用DEBUG启动
一、JavaWeb基础知识
1. 软件架构
a. C/S架构
客户端/服务器
b. B/S架构
浏览器
浏览器:浏览器负责解析资源
Web服务器
优点:
客户端零维护服务器更新实时可见
服务器:安装了服务器软件的计算机。服务器软件:接收用户请求,处理请求,返回响应。
在web服务器软件中,可以部署web项目,让用户通过浏览器访问这些项目,故也称为web容器。 web服务器可以帮我们处理繁琐的应用层协议,将报文中有用的信息提取并封装到对象中,方便程序员使用。
常见的JavaWeb服务器软件:
WebLogic:Oracle公司的大型JavaEE服务器软件,收费WebSphere:IBM公司的大型JavaEE服务器软件,收费JBOSS:JBOSS公司的大型JavaEE服务器软件,收费Tomcat:Apache基金组织,中小型JavaEE服务器,仅支持少量JavaEE规范(Servlet、JSP)、开源免费。
JavaEE:Java语言在企业级开发中使用的一套设计思想、软件架构、13项大的技术规范(Servlet、EJB、JMS等)。 JavaEE最核心的组件就是基于Servlet标准的Web服务器,开发者编写的应用程序是基于Servlet API并运行在Web服务器内部的。
2. 资源分类
a. 静态资源
所有用户访问得到同样的结果。 如:HTML、CSS、JavaScript等。
b. 动态资源
每次访问同样的URL,得到的结果可能不一样,是服务器动态生成后以静态资源方式返回的。 如:Servlet/JSP、PHP、ASP等。
3. 网络通信三要素
IP地址(可以由域名进行DNS转换后得到)端口号:16位整数,范围0~65535网络协议
运输层协议:TCP、UDP应用层协议:HTTP、FTP等。
二、Tomcat环境配置
1. 启动与关闭
bin/startup.sh bin/shutdown.sh
2. 常见错误问题
黑窗口一闪而过 解决:正确配置JAVA_HOME环境变量启动报错 解决:找到占用了端口的进程,kill之;或修改Tomcat绑定的端口号(HTTP默认为80):打开conf/server.xml <Connector port=“8080” protocol=“HTTP/1.1” connectionTimeout=“20000” redirectPort=“8445” />
3. 部署Web项目
a. Web项目目录结构
/root
/WEB-INF —— 该目录下静态资源不能被浏览器直接访问
web.xml —— web项目配置文件/classes —— 放置字节码文件/lib —— 放置依赖JAR包 index.html…其他静态资源
b. Tomcat部署web项目
i. 直接放在webapps目录下
项目访问路径和虚拟目录是一致的简化部署:将项目打成war包,再将war包放在webapps目录下,war包会自动解压缩。
ii. 配置conf/server.xml文件
<Host>
<Context docBase="D:\hello" path="/hehe">
<!--docBase:项目存放路径,path:映射的虚拟访问目录-->
</Host>
iii.在conf/Catalina/localhost创建xml文件
在文件中编写<Context docBase=“D:\hello” />
三、Servlet
1. 概念
Servlet:服务器端小程序狭义的Servlet是指Java语言实现的一个接口规范,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
2. Servlet入门示例
创建JavaEE项目,勾选Web Application定义一个类,实现Servlet接口中的Service方法 public class ServletDemo implements Servlet在web.xml中配置Servlet访问路径映射
<servlet>
<servlet-name>hello
</servlet-name>
<servlet-class>HelloWorld
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello
</servlet-name>
<url-pattern>/servlets/HelloWorld
</url-pattern>
</servlet-mapping>
3. Servlet执行原理
Tomcat解析收到的请求,获取URL路径根据web.xml文件,查看是否有<url-pattern>对应映射的Servlet如果有,找到全类名,并加载该类的字节码文件到内存,创建Servlet单例对象,调用其方法。
4. Servlet生命周期
a. 创建:执行init方法
Servlet的创建时机?
默认情况下,懒加载,第一次访问时Servlet被加载和创建配置Servlet的创建时机(懒汉/饿汉):
<servlet>
<servlet-name>hello
</servlet-name>
<servlet-class>HelloWorld
</servlet-class>
<load-on-startup>1
</load-on-startup>
</servlet>
Servlet是单例还是多例?
Servlet的init方法只执行一次,说明是单例的。 注意,多个用户同时访问可能存在线程安全问题,所以尽量不要使用成员变量。
b. 提供服务
每次访问Servlet时,Service方法都会被调用一次。
c. 被销毁
服务器关闭时执行destroy方法,只执行一次。
服务器正常关闭时,执行Servlet的销毁方法。destroy方法在Servlet被销毁前执行,通常用于释放资源
5. Servlet 3.0注解示例
创建JavaEE项目,勾选Web Application,但是不用web.xml定义一个类,实现Servlet接口,重写service()方法 public class ServletDemo implements Servlet在类上使用@WebServlet注解
@Target({ElementType
.TYPE
})
@Retention(RetentionPolicy
.RUNTIME
)
@Documented
public @
interface WebServlet {
String
name() default "";
String
[] value() default {};
String
[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam
[] initParams() default {};
boolean asyncSupported() default false;
......
}
6. IntelliJ IDEA集成Tomcat
a. web项目的自动部署
IDEA为每个web项目单独创建一份配置目录。
/Users/simplekang/Library/Caches/JetBrains/IntelliJIdea2020.1/tomcat/Tomcat_9_0_38_ServletTest
方式:带参启动Tomcat。配置CATALINA_BASE等参数,将配置文件重定向至IDEA创建的配置目录(见第三种配置方式)。在xml文件中,配置虚拟目录,以及映射docBase为IDEA的项目out目录等。
<Context path="/ServletTest_war_exploded" docBase="/Users/simplekang/IdeaProjects/Test/ServletTest/out/artifacts/ServletTest_war_exploded" />
b. 工作空间目录和web项目目录
工作空间目录 /Users/simplekang/IdeaProjects/Test/ServletTest
工作空间目录中的src和web目录,最终编译后合并进入out目录 最终映射到(真正部署)的web项目目录 工作空间目录/out/artifacts/ServletTest_war_exploded
c. 断点调试:使用DEBUG启动