1.Tomcat服务器的 目录结构
-bin (存放启动和关闭Tomcat的脚本文件)
-conf (存放Tomcat服务器的各种配置文件)
-lib (存放Tomcat服务器的支持jar包)
-logs (存放Tomcat的日志文件)
-temp (存放Tomcat运行时产生的临时文件)
-webapps (web应用所在的目录,即外界访问的web资源的存放目录)
-work (Tomcat的工作目录)
-LICENSE
-NOTICE
-RELEASE-NOTES
-RUNNING.txt
2.Servlet : Server 与 Applet 的缩写,是服务端程序的意思。使用java语言编写的服务器端程序,可以生成动态的web 页 ,Servlet 主要运行在服务器端,并由服务器调用执行,是一种按照Servlet 标准来开发的类。其本质也是java类,但要遵循Servlet 规范进行编写,没有main()方法,类的创建,使用,销毁都由Servlet 容器进行管理和调用(如Tomcat).
3.Servlet和http协议紧密联系,可以处理http协议相关的所有内容,常见的提供Servlet功能的服务器有: Tomcat, Jetty,WebLogic Server, WebSphere , JBoss,Apache等等。
4.Servlet的基础实现
package com.StartSL;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Vodka
* @date 2021/08//22:15
*/
//注解@WebServlet的常用方式
//@WebServlet("/SLTest")
//@WebServlet(name="Vodka",value={"/SLTOne" ,"/SLTTwo"})
@WebServlet(name="Vodka",urlPatterns={"/One","/Two"})
public class ServletTest extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res){
//控制台输出
System.out.println("恭喜您成功连接服务器!");
try{
//通过数据流输出到浏览器
res.getWriter().write("Congratulation!");
}catch(Exception e){
e.printStackTrace();
}
}
}
实现Servlet的其他几种方式
方式一
@WebServlet(urlPatterns = {"/One","/Two"})
public class ServletImpl extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("继承抽象类HttpServlet的基类GenericServlet,实现Servlet");
}
}
方式二: 实现Servlet 接口
@WebServlet(urlPatterns = {"/One","/Two"})
public class ServletImpl 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("重写service!");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
方式三:继承HttpServlet抽象类,并重写service()方法
方式四:继承HttpServlet抽象类,重写doGet,doPost方法
public class ServletImpl extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
5.Servlet的生命周期
Servlet没有main()方法,不能独立运行,它的运行完全由Servlet引擎来控制和调度。所谓生命周期,指的是servlet容器何时创建servlet实例,何时调用其方法进行请求处理,何时销毁实例的整个过程。
-实例和初始化时机:
当请求到达容器时,容器查找该servlet对象是否存在,如果不存在,则会创建实例进行初始化。
-就绪/调用/服务阶段:
有请求到达容器,容器调用servlet对象的service()方法,处理请求的方法在整个生命周期中可以被多次调用,HttpServlet的service ()方法则会根据请求方式来调用doGet()或doPost()方法。但是,这两个do方法默认情况下会抛出异常,需要子类去override。
-销毁时机:
容器关闭时(应用程序停止时),会将程序中的Servlet实例进行销毁。
-容器会在特定时期自动调用观察Servlet生命周期的三个方法,不用用户手动调用。
//生命周期:servlet类加载--> 实例化 --> 服务 --> 销毁
//init 方法,在Servlet实例创建之后执行
public void init(ServletConfig config) throws ServletException{
System.out.println("实例创建了。。。");
}
//service方法,每次有请求到达某个Servlet方法时执行,用来处理请求
protected void service(HttpServletRequest req , HttpServletResponse res) throws ServletException , IOException{
System.out.println("实例销毁了。。。");
}
//destroy方法,Servlet实例销毁时执行
public void destroy(){
System.out.println("实例销毁了。。。");
}
1.Web Client 向 Servlet 容器(Tomcat) 发出Http请求。
2.Servlet 容器接收Web Client 的请求。
3.Servlet 容器创建一个HttpServletRequest 对象,将Web Client 请求的信息封装到这个对象中
4.Servlet容器创建一个HttpServletResponse 对象
5.Servlet容器调用HttpServlet对象 service 方法, 把Request与Response 作为参数,传递给HttpServlet
6.HttpServlet 调用 HttpServletRequest 对象的有关方法,获取Http请求信息