1.IDEA会为每一个tomcat部署的项目单独建立一份配置文件
- 查看控制台的log:
Using CATALINA_BASE: "C:\Users\Eric.IntelliJIdea2019.3\system\tomcat_Java9_web_codespace"
- 工作空间项目 和 tomcat部署的web项目
- tomcat真正访问的是“tomcat部署的web项目”,"tomcat部署的web项目"对应着"工作空间项目" 的web目录下的所有资源
- WEB-INF目录下的资源不能被浏览器直接访问。
- 断点调试:使用"小虫子"启动 dubug 启动
Servlet:
概念
- 步骤
- 执行原理
- 生命周期
- Servlet3.0 注解配置
// @WebServlet("/demo4")
//@WebServlet({"/d4","/dd4","/ddd4"}) //同时配置多个servlet路径
//@WebServlet("/protal/demo4")多层路径
//@WebServlet("/start/*")
//@WebServlet("*.do") //扩展名匹配
- Servlet的体系结构
Servlet -- 接口
|
GenericServlet -- 抽象类
|
HttpServlet -- 抽象类
- GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象, 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
- HttpServlet:对http协议的一种封装,简化操作, 使用步骤 1、定义类继承HttpServlet,2、复写doGet/doPost方法
HTTP:
概念:Hyper Text Transfer Protocol 超文本传输协议
传输协议:定义了,客户端和服务器端通信时,发送数据的格式
-
特点:
- 基于TCP/IP的高级协议
- 默认端口号:80
- 基于请求/响应模型的:一次请求对应一次响应
- 无状态的:每次请求之间相互独立,不能交互数据
-
历史版本:
- 1.0:每一次请求响应都会建立新的连接
- 1.1:复用连接
请求消息数据格式
请求行
请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1-
请求方式:
HTTP协议有7中请求方式,常用的有2种- GET:
请求参数在请求行中,在url后。
请求的url长度有限制的
不太安全 - POST:
请求参数在请求体中
请求的url长度没有限制的
相对安全
- GET:
Request
1.request对象和response对象的原理
request和response对象是由服务器创建的。我们来使用它们
request对象是来获取请求消息,response对象是来设置响应消息
- request对象继承体系结构:
ServletRequest -- 接口
| 继承
HttpServletRequest -- 接口
req.get...
// 获取里面的请求方式:GET
String method = req.getMethod();
System.out.println("method"+method);//GET
// 获取虚拟目录
String contextPath = req.getContextPath();
System.out.println("contextPath"+contextPath);///day02_servlet_class_war_exploded
// 获取Servlet路径
String servletPath = req.getServletPath();
System.out.println("servletPath"+servletPath);///requestDemo1
// 获取get方式请求参数
String queryString = req.getQueryString();
System.out.println("queryString"+queryString);//null
// 获取URI URL
String requestURI = req.getRequestURI();
System.out.println("requestURI"+requestURI);///day02_servlet_class_war_exploded/requestDemo1
StringBuffer requestURL = req.getRequestURL();
System.out.println("requestURL"+requestURL);// http://localhost/day02_servlet_class_war_exploded/requestDemo1
// 获取协议版本
String protocol = req.getProtocol();
System.out.println("protocol"+protocol);//HTTP/1.1
// 获取客户机IP地址
String remoteAddr = req.getRemoteAddr();
System.out.println("remoteAddr"+remoteAddr);//0:0:0:0:0:0:0:1
// 演示获取请求头数据
Enumeration<String> headerNames = req.getHeaderNames();
// 遍历
while(headerNames.hasMoreElements()){
String name = headerNames.nextElement();
// 根据名字获取请求头值
String value = req.getHeader(name);
System.out.println(name+"======>"+value);
}
String header = req.getHeader("use-agent");
if (header.contains("Chrome")){
System.out.println("你用的是谷歌");
}else if (header.contains("Firefox")){
System.out.println("你用的是火狐");
}