1、直接将项目放到webapps目录下即可
/hello:项目的访问路径–>虚拟目录
简化部署:将项目打成一个war包,在将war包放置到webapps目录下
war包会自动解压缩
2、配置conf/server.xml文件
在标签中配置
docbase:项目存放的路径 path:虚拟目录
3、在confCatalinalocalhost创建任意名称的xml文件。在文件中编写
静态项目和动态项目虚拟目录:xml文件的名称
目录结构
Java动态项目的目录结构
---项目的根目录 ---WEB-INF目录: ---web.xml:web项目的核心配置文件 ---classes目录:放置字节码文件的目录 ---lib目录:放置依赖的jar包将Tomcat集成到IDEA中,并创建Java EE 项目,部署项目
概念:运行在服务器端的小程序
Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则
将来我们自定义一个类,实现Servlet接口,复写方法
1、创建一个JavaEE项目
2、定义一个类,实现servlet接口
3、实现接口中的抽象方法
4、配置Servlet
我们需要使用浏览器通过URL来访问新创建的Java类,就需要将Java类在web.xml文件中映射成为对应的资源路径,也可理解为URL后面加的东西。
package com.example.day06_tomcat;
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("zgDaren!");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
web.xml
demo1 com.example.day06_tomcat.ServletDemo01 demo1 /demo01
问题:当我们定义了一个Java类,但我们并没有创建对象,我们也没有调用方法,自己就被执行了
servlet执行原理1、当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径(demo01)
2、查找web.xml文件,是否有对应的
3、如果有,则在找到对应的
4、tomcat会将字节码文件加载进内存,并且创建其对象
5、调用其方法
1、被创建:执行init方法 ,只执行一次
Servlet什么时候被创建?
指定Servlet的创建时机,在web.xml文件中的
第一次被访问时创建
在服务器启动时加载
Servlet的init方法只执行一次,说明一个servlet在内存中只存在一个对象,servlet是单例的
多个用户同时访问时,可能会存在线程安全问题所以尽量不在servlet中定义成员变量,可在service中定义,即使定义了成员变量,也不要修改获取值
2、提供服务:执行service方法,执行多次
每次访问servlet时,service方法都会被调用一次
3、被销毁:执行destroy方法,只执行一次
servlet被销毁时执行,服务器正常关闭,servlet被销毁
只有正常关闭时,才会执行destory方法
destroy方法在servlet销毁之前执行,释放资源
package com.example.day06_tomcat;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo02 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init...");
}
@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() {
}
}
web.xml
servlet注解配置demo1 com.example.day06_tomcat.ServletDemo01 demo1 /demo1 demo2 com.example.day06_tomcat.ServletDemo02 5 demo2 /demo2
1、创建一个JavaEE项目,选择servlet的版本在3.0以上,可以不创建web.xml
2、定义一个类,实现servlet接口
3、实现接口中的抽象方法
4、在类上使用@webServlet注解,进行配置
@WebServlet("资源路径")
@WebServlet(urlPatterns = "/demo")
@WebServlet("/demo")
package cn.zg.servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
//@WebServlet(urlPatterns = "/demo")
@WebServlet("/demo")
public class ServletDemo 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("Servlet4.0来了...");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
== 切换项目时,一定要先关闭tomcat服务器,设置好后在重新启动,不然就会出现端口被占用的情况,如果端口被占用则在cmd窗口中netstat -aon|findstr 1099 命令查看到该1099端口的PID,然后结束进程==
IDEA与tomcat相关配置1、IDEA会为每一个tomcat部署的项目单独建立一份配置文件
在项目中启动tomcat服务器后,查看控制台log:Using CATALINA_base: “C:Users64359AppDataLocalJetBrainsIntelliJIdea2020.3tomcataf080da0-49e3-4185-a2c8-ba394708d02c”
2、工作空间项目和tomcat部署的web项目
tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目”对应着“工作空间项目”的web目录下的所有资源
WEB-INF目录下的资源不能被浏览器直接访问。
3、断点调试,使用“dubug”启动
Servlet–接口
GenericServlet–抽象类
HttpServlet–抽象类
GenericServlet:将servlet接口中其他方法做了默认空实现,只将service()方法作为抽象
将来定义servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet:对http协议的封装和实现,简化操作
定义类继承HttpServlet
复写doGet/doPost方法
package cn.zz.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost...");
}
}
在webapp目录下新建login.html,用来检测post方法
Title
Servlet相关配置
一、urlpartten:Servlet访问路径
1、一个Servlet可以定义多个访问路径:@WebServlet({"/d4","/dd4","/ddd4"})
2、路径定义规则:
a、/xxx
b、/xxx/xxx:多层目录结构
c、*.do:但是前面一定不要写/
概念:Hyper Text Transfer Protocol 超文本传输协议
传输协议:定义了,客户端和服务器端通信时,发送数据的格式
特点:基于TCP/IP的高级协议
默认端口号:80
基于请求/响应模型的:一次请求对应一次响应
无状态的:每次请求之间相互独立,不能交互数据
历史版本:1.0:每次请求响应都会建立新的连接
1.1:复用连接
请求方式 请求url 请求协议/版本
GET/login.html HTTP/1.1
请求方式:HTTP协议有7种请求方式,常用的有2种
GET:1、请求参数在请求行中,在url后
2、请求的url长度有限制
3、不太安全
POST:1、请求参数在请求体中
2、请求的url长度没有限制
3、相对安全
请求头名称:请求头值
常见的请求头:
1、Host:请求的主机
2、User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
可以在服务器端获取该头信息,解决浏览器的兼容性问题
3、Accept:告诉服务器浏览器可以解析啥文件
4、Accept-Language:支持的语言环境
5、Accept-Encoing:可接收的语言格式
6、Referer:http://localhost/login.html
告诉服务器“我”从哪里来
防盗链:
统计工作:
7、Connection:keep-alive(表示可以一直被复用)
3、请求空行
空行:就是用于分隔post请求的请求头和请求体的
4、请求体(请求正文)
get无请求体,post有请求体,封装post请求消息的请求体的



