目录
🏳️🌈一、HTTP协议
1. 概念:超文本传输协议
2. 作用:规范了客户端(浏览器)和服务器的数据交互格式
3. 特点
1. 简单快速:客户端向服务器请求服务时,仅通过键值对来传输请求方法和路径
2. 灵活:允许传输任意类型的数据对象,正在传输的类型由Content-Type标记(例如图片,文本)
3. 持续连接:处理完客户端的一个请求时候,服务器不立马关闭,而是在指定的时间之后才关闭
4. 无状态:如果第二次请求中需要用到第一次请求的数据,那么必须在请求第一次的数据
🍁 二、交互流程
1. 连接:客户端和服务器端建立连接
2. 请求:客户端发送请求数据到服务器端
3. 响应:服务器端接收到请求后进行处理,将处理结果返回响应客户端
4. 关闭:关闭客户端和服务器端连接(HTTP1.1版本之后不会立即关闭)
🍁 三、请求
1. 请求格式
1. 请求行:请求方式、请求地址和HTTP协议版本
2. 请求头:消息报头,附加信息,不包括核心数据
3. 空行:请求头和请求实体之间的必须有空行
4. 请求实体:核心数据,非必须
2. 请求方式
1. GET请求(没有请求实体):请求数据以?的形式拼接在请求头中,URL中有具体的请求数据,不安全,由于浏览器对URL的长度有限制,所以适合数据量小的传输
2. POST请求:请求数据字请求实体中发送,URL中没有具体的请求数据,安全,适合数据量大的传输
🍁四、响应
1. 响应格式
1. 响应行:HTTP版本、状态码和状态消息
2. 响应头:消息报头,附加信息
3. 空行:响应头和响应实体之间必须存在空行
4. 响应实体:服务器返回给客户端的数据
2. 状态码
1. 200:客户端请求成功
2. 400:客户端请求有语法错误,不能被服务器所理解
3. 403:服务器收到请求,但是拒绝服务
4. 404:请求资源不存在(URL错误)
5. 500:服务器发生不可预期的错误
6. 503:服务器不能处理当前客户端的请求,一段时间后恢复正常
🏳️🌈二:Tomcat服务器
一、概述
1. 概念:Tomcat 服务器是一个免费的开源的轻量级Web 应用服务器(Java编写的),是开发和调试JSP 程序的首选。
2. 作用:能够根据客户端的请求来启动并运行我们编写的数据逻辑代码。
二、安装
1. 下载
1. Tomcat官网
2. 点击左侧Download下对应的版本
3. 下载压缩包(zip)
4. 解压即可
2. 目录介绍
1. bin:存放tomcat的命令,以.sh结尾的(linux命令),以.bat结尾的(windows命令)
1. startup:启动Tomcat
2. shutdown:关闭Tomcat
2. conf:存放tomcat的一些配置文件
1. server.xml:设置端口、域名或IP、默认加载的项目及请求编码
2. web.xml:文件类型设置
3. context.xml:配置数据源
4. tomcat-users.xml:管理tomcat的用户与权限
3. lib:存放tomcat运行需要加载的jar包
4. log:存放tomcat在运行过程中产生的日志文件
5. webapps:存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序
6. work:存放tomcat在运行时的编译后文件
三、检测安装
1. 双击bin目录下的startup文件,不要关闭
2. 在浏览器URL中输入:localhost:8080
3. 如果跳转到tomcat推荐页面则安装成功
三:Servlet
一、概述
1. 概念:Servlet是指任何实现了这个Servlet接口的类,Servlet运行于支持Java的应用服务器中,Servlet只用来扩展基于HTTP协议的Web服务器。
2. 作用 :交互式地浏览和修改数据,动态生成网页。
2. 使用
1. 创建普通的Java类继承HttpServlet
2. 覆写service方法
3. 在service方法中书写逻辑代码
4. 在webRoot下的WEB-INF文件夹下的web.xml文件中配置servlet的别名
二、访问流程和生命周期
1. 访问流程
1. 客户端输入URL(服务器地址:端口号/虚拟项目名/servlet的别名)发起请求到服务器
2. 服务器解析请求URL地址中的URI信息(虚拟项目名/servlet的别名)
3. 按照虚拟项目名在webapps目录下找到对应的项目文件
4. 按照servlet的别名(url-pattern)在项目下的web.xml中检索对应的servlet
5. 运行servlet-class中的所对应的servlet
2. 生命周期
1. 从第一次加载进内存(调用)到服务器关闭
2. 在web.xml中配置了load-on-startup,生命周期为从服务器的启动到服务器的关闭
3. doGet、doPost、service方法的区别
1. service方法:可以处理get/post方式的请求,如果servlet中有service方法,会优先调用service方法对请求进行处理。如果service方法中调用了父类的service方法,那么在此service执行完成之后会再次执行对应请求的处理方法,如果不存在会报405错误,一般情况下不会调用。
2. doGet方法:只能处理get方式的请求
3. doPos方法: 只能处理post的请求方式
三、request对象
1. 概述
1. 概念: 封装了所有请求信息,由服务器创建并作为实参传递给处理请求的servlet的service方法。
2. 作用:解决了一次请求内的数据共享问题
3. 作用域:一次请求内
2. 获取请求行数据
1. 获取请求方式:String method = req.getMethod();
2. 获取请求URL:String url = req.getRequestURl();
3. 获取请求URI: String uri = req.getRequestURI();
4. 获取请求协议:String scheme = req.getScheme();
3. 获取请求头数据
1. 获取指定的请求头数据:String header = req.getHeader("键名");
2. 获取所有请求头键的枚举
Enumeration e = req.getHeaderNames();
while(e.hasMoreElements) {
String name = (String) e.nextElement();
String value = req.getHeader(name);
System.out.println(name + ":" + value);
}
4. 获取用户数据
1. 获取指定的用户数据:String name = req.getParameter("键名");
2. 获取同键不同值的用户数据(多选): String[] values = req.getParameterValues("键名");
5. 设置请求编码格式:req.setCharacterEncoding("")
6. 请求转发
1. 作用:多个servlet联动操作处理请求。
2. 特点:一次请求(只有一个request对象),地址栏信息不改变。
3. 使用: req.getRequestDispatcher("jsp路径").forward(req, resp);
return;
7. 数据的存储和获取(存储优先于获取)
1. 存储:req.setAttribute(Object name, Object value);
2. 获取:req.getAttribute(Object obj);
四、response对象
1. 概述
1. 概念:封装了所有响应信息,由服务器创建并作为实参传递给要处理请求的servlet的service方法
2. 作用:将服务器的信息响应给浏览器
2. 设置响应编码格式:resp.setContentType("text/html;charset=utf-8");
3. 设置响应状态码:sendError(int sc, String msg);
4. 设置响应头
1. 同键会覆盖:setHeader(“键名”, “键值”);
2. 同键不覆盖:addHeader(“键名”, “键值”);
5. 设置响应实体
1. 响应字符串或HTML页面:resp.getWrite().write("");
2. 请求重定向:resp.sendRedirect("uri");
6. 请求重定向
1. 作用:解决表单重复提交并将不能处理的请求交给其他servlet处理。
2. 特点:多次请求(多个request对象),地址栏信息改变。
3. 使用:resp.sendRedirect("uri");