Web 服务器
Web服务器是一类软件程序,将开发好的前端或者后端代码,运行在此类软件中,就可以供人访问。
Tomcat
web服务器是一种软件程序,将开发好的前端或者后端代码,运行在这种程序中,就可以供人访问。
Tomcat就是web服务器的一种,由Apache 软件基金会提供,开源、免费、易上手
Tomcat安装
资料中已经提供好绿色解压版,直接解压即安装,要求安装目录==没有中文,没有空格==
启动和停止
如果控制台出现中文,则修改conf/logging.properties文件中的
java.util.logging.ConsoleHandler.encoding = GBK
(字符集由UTF-8修改成了GBK)浏览器访问: http://localhost:8080 (localhost指的是本机地址,8080是tomcat的默认访问端口号) ,显示如下页面
在启动过程中可能会遇问题1:
窗口一闪而过,原因是JAVA_HOME环境变量未正确配置,需要在环境变量中配置下
如果电脑环境变量中含有两个以 Catalina-* 开头的变量,也需要删掉
在启动过程中可能会遇问题2:
启动过程中窗口退出,查看logs显示Address already in use: JVM_Bind,原因是端口占用,需调整tomcat端口
修改Tomcat安装目录/conf/server.xml文件中的三个端口号8005 8080 8009]
注意: 修改的端口号在1025~65535之间 (65535为最大端口号, 0~1024:系统预留的端口号)
可以在CMD窗口输入命令
netstat -ano | findstr "8080" 来查看占用端口的进程
项目部署
项目部署指的是如何将我们自己开发好的项目部署到tomcat中,然后对外提供访问。
创建一个本地项目,然后复制到tomcat的webapps目录下
IDEA项目部署
本小节我们学习如何利用idea开发一个项目,并把它部署到tomcat中运行
创建模块
注意:今天创建的是maven的web工程
编写代码
在项目中创建HTML页面
配置模板
我们需要在Idea中配置一个Tomcat的模板,这样以后使用tomcat就不用每次都重新配置了,==这个步骤只需要做一次==
部署项目
将编写的项目部署到Tomcat服务器
启动测试
在idea中启动tomcat,测试项目
windows常用命令
查看全部端口信息
netstat -ano
查看端口 62290 信息
netstat -ano | findstr "62290"
强制关闭进程 pid 16356
taskkill /F /pid 16356
HTTP协议
请求 行 头 体
响应 行 头 体
介绍
* HTTP (Hyper Text Transfer Protocol) 超文本传输协议,是互联网上应用最为广泛的一种网络协议。
作用:
规范浏览器和服务器之间通信时传输数据的格式
特点:
基于TCP协议:面向连接,安全
基于请求-响应模型的:一次请求对应一次响应
HTTP协议是无状态的协议:每次请求-响应都是独立的,不相互记录数据,目的是为提高效率
无论是请求还是响应都包含三部分:行、头、体
以Chrome浏览器为例,使用F12打开开发者模式,选择NetWork选项卡,然后通过网络访问页面
HTTP请求
请求行
* GET /mock/169327/emp/list?username=heima HTTP/1.1
请求行由三部分组成:请求方式 请求路径 请求协议/版本。
请求方式有很多, 我们需要关注两种: get 和 post
get: 请求参数在地址栏显示,不太安全; 请求参数大小有限制; 没有消息体
post:请求参数没有在地址栏显示,而是在请求体显示,相对安全; 请求参数大小没有限制; 有消息体
请求头
* Connection: keep-alive
请求头格式是键值对 键:值
User-Agent: 浏览器告诉服务器端,客户端操作系统和浏览器版本信息,借助它可以处理浏览器的兼容性问题
请求体
* username=heima
格式 参数名=参数值&参数名=参数值
注意 get方式没有请求体,post方式有请求体
HTTP响应
HTTP的响应也是由行、头、体构成的。
响应行
* HTTP/1.1 200 OK
响应行由三部分组成: 协议/版本 响应码 响应描述
常见响应状态码:由服务器告诉浏览器,本次响应状态
200:操作成功
404:请求路径没有对应资源
500: 服务器错误
响应头
* Content-Type: text/html;charset=utf-8
请求头格式是键值对 键:值
Content-Type:服务器告诉浏览器,响应体的数据类型和编码方式
响应体
* 服务器返回的具体内容
Servlet
简介
Servlet: Server Applet,翻译为运行在服务端的Java小程序,是sun公司提供一套规范( 接口 ),用来定义我们的代码怎么写才能被tomcat识别。
本质:接口,一个类想要被tomcat正确识别,那么这个类就必须直接或间接的实现Servlet接口。
任务:接收请求,处理请求,返回响应。
入门案例
需求:使用一个Servlet完成一个功能,接收浏览器请求,在服务器控制台打印出访问时间的同时将时间写回浏览器。
导入依赖
<dependencies>
<!--servlet依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
编写servlet
@WebServlet("/访问路径") 注意必须以/开头
部署测试
常见报错
1. The servlets named [annoServlet] and [annoServlet2] are both mapped to the url-pattern [/annoServlet] which is not permitted 两个servlet的路径重复 2. Invalid url-pattern [annoServlet] in servlet mapping servlet路径不是/开头的
请求和响应
介绍
下图是tomcat的执行流程图
Request获取请求
请求行
* 请求行例子: GET /requestLine?username=zhangsan&password=123 HTTP/1.1 * 重要方法: 1. String getMethod():获取请求方式: GET 2. StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/requestLine 3. String getRequestURI():获取URI(统一资源标识符): /requestLine 4. String getQueryString():获取请求参数(GET方式): username=zhangsan&password=123
请求头
* 请求头例子: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/78.0.3904.108 Safari/537.36 * 重要方法: String getHeader(String name) 以String的形式返回指定请求头的值
请求参数
这里的请求参数指的是通过
请求行传递的参数(get)
和通过请求体传递的参数(post)
* 请求参数的位置: get请求: URL上 post请求: 请求体中 * 请求参数例子: name=张三&age=18&hobby=抽烟&hobby=喝酒 * 重要方法: 1. String getParameter(String name) 根据参数名获得参数值(单个) 2. String[] getParameterValues(String name) 根据参数名获得参数值(数组) 3. Map<String, String []> getParameterMap() 获得所有的参数,封装到Map集合
中文乱码处理
* 在请求参数传递过程中,会出现中文乱码的问题 * get请求: tomcat8及以上的版本已经解决 (UTF-8) * post请求:需要手动解决 乱码原因:浏览器编码(UTF-8) ------ 服务器解码(ISO-8859-1) 解决方案:修改服务器的解码方式为UTF-8即可 代码: request.setCharacterEncoding("UTF-8");
Response返回响应
* 响应行 响应行格式例子: HTTP/1.1 200 HTTP/1.1 302 设置响应行: void setStatus(int sc) * 响应头 响应头格式例子: Content-Type:text/html;charset=utf-8 设置响应头: void setHeader(String name, String value) * 响应体 通过response获取输出流 字符流:PrintWriter getWriter() 字节流:ServletOutputStream getOutputStream() 注意:在同一个servlet中,不能同时使用字节流和字符流
* 使用字符流输出内容到浏览器 PrintWriter writer = response.getWriter(); writer.write("字符串"); * 统一设置服务器和浏览器编码格式 resp.setHeader("content-type","text/html;charset=utf-8") 了解 resp.setContentType("text/html;charset=utf-8") 推荐
登录案例
思路分析
环境准备
创建数据
create database tomcat;
use tomcat;
create table emp(
id int primary key auto_increment comment '主键',
username varchar(30) unique comment '用户名',
password varchar(32) comment '密码'
);
insert into emp values(null,'张三','123456'),(null,'李四','123');
添加依赖
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
添加配置文件和工具类
复制资料中得配置文件和工具类