Tomcat

前言

一个小白的学习历程,用自己的的亲身经历为各位还未步入职场的朋友们先探探路。qvq


Tomcat

注意:这是Tomcat篇

一、Web服务器–Tomcat

1.1Web服务器

Web服务器是一类软件程序,将开发好的前端或者后端代码,运行在此类软件中,就可以供人访问。

Tomcat

概念: Tomcat是Apache 软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet等少量JavaEE规范。

JavaEE:Java Enterprise Edition,Java企业版,指Java企业级开发的技术规范总和。

Tomcat 也被称为Web容器、Servlet容器,Servlet程序需要依赖于Tomcat才能运行 。

官网:https://tomcat.apache.org/

1.2项目部署

Tomcat-项目部署

  1. 在本地磁盘创建一个目录,作为项目开发目录。
  2. 在目录下创建一个index.html作为项目文件。
  3. 在index.html中编写内容。
  4. 将整个项目目录复制到Tomcat的webapps目录下。
  5. 启动tomcat软件。
  6. 通过浏览器访问项目。

IDEA开发项目部署到Tomcat

  1. 在Idea中创建一个web版本的maven模块。
  2. 在模块中进行代码开发。
  3. 将开发好的项目部署到Tomcat。
  4. 在Idea中启动Tomcat进行测试。

二、HTTP协议

2.1概述

概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间传输数据的格式。

特点:

  1. 基于TCP协议:面向连接,安全。
  2. 基于请求-响应模型的:一次请求对应一次响应。
  3. HTTP协议是无状态的协议:每次请求-响应都是独立的,不相互记录数据,目的是为提高效率。
  4. 无论是请求还是响应都包含三部分:行、头、体。

2.2请求

2.2.1请求行

  • GET /mock/169327/emp/list?username=heima HTTP/1.1

请求行由三部分组成:请求方式 请求路径 请求协议/版本

请求方式有很多, 我们需要关注两种: get 和 post

get: 请求参数在地址栏显示,不太安全; 请求参数大小有限制; 没有消息体

post:请求参数没有在地址栏显示,而是在请求体显示,相对安全; 请求参数大小没有限制; 有消息体

2.2.2请求头

  • Connection: keep-alive

请求头格式是键值对 键:值

User-Agent: 浏览器告诉服务器端,客户端操作系统和浏览器版本信息,借助它可以处理浏览器的兼容性问题

2.2.3请求体

  • username=heima

格式 参数名=参数值&参数名=参数值

注意 get方式没有请求体,post方式有请求体

2.3HTTP响应

2.3.1响应行

  • HTTP/1.1 200 OK

响应行由三部分组成: 协议/版本 响应码 响应描述

常见响应状态码:由服务器告诉浏览器,本次响应状态

200:成功

304:读取了缓存

400:请求参数有问题 一般是格式有问题

401:没有权限

403:被拒绝

404:找不到资源

500:内部服务器错误

2.3.2响应头

  • Content-Type: text/html;charset=utf-8

请求头格式是键值对 键:值

Content-Type:服务器告诉浏览器,响应体的数据类型和编码方式

2.3.3响应体

  • 服务器返回的具体内容

2.4小结

  1. 不管是请求还是响应都包含三部分内容: 行 头 体
  2. 请求方面要关注的是:请求方式 请求URL地址 请求参数
  3. 响应方面要关注的是:响应的状态码 响应回来的数据

三、Servlet

3.1简介

Servlet: Server Applet,是sun公司提供一套规范( 接口 ),用来定义我们的代码怎么写才能被tomcat识别。

本质:接口,一个类想要被tomcat正确识别,那么这个类就必须直接或间接的实现Servlet接口。

任务:接收请求,处理请求,返回响应。

3.2编写servlet

@WebServlet(“/访问路径”) 注意必须以/开头

四、请求和响应

4.1介绍

4.1介绍

4.2Request获取请求

4.2.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

4.2.2请求头

String getHeader(String name) 以String的形式返回指定请求头的值

4.2.3请求参数

请求参数的位置:

get请求: URL上

post请求: 请求体中

请求参数例子:

name=张三&age=18&hobby=抽烟&hobby=喝酒

重要方法:

  1. String getParameter(String name) 根据参数名获得参数值(单个)
  2. String[] getParameterValues(String name) 根据参数名获得参数值(数组)
  3. Map<String, String []> getParameterMap() 获得所有的参数,封装到Map集合

4.2.4中文乱码处理

在请求参数传递过程中,会出现中文乱码的问题

get请求: tomcat8及以上的版本已经解决 (UTF-8)

post请求:需要手动解决

乱码原因:浏览器编码(UTF-8) ------ 服务器解码(ISO-8859-1)

解决方案:修改服务器的解码方式为UTF-8即可

代码: request.setCharacterEncoding(“UTF-8”);

4.3Response返回响应

4.3.1响应行

响应行格式例子:
HTTP/1.1 200
HTTP/1.1 302
设置响应行:
void setStatus(int sc)

4.3.2响应头

响应头格式例子:
Content-Type:text/html;charset=utf-8
设置响应头:
void setHeader(String name, String value)

4.3.3响应体

通过response获取输出流
字符流:PrintWriter getWriter()
字节流:ServletOutputStream getOutputStream()
注意:在同一个servlet中,不能同时使用字节流和字符流

4.3.4使用字符流输出内容到浏览器

PrintWriter writer = response.getWriter();
writer.write("字符串");

4.3.5统一设置服务器和浏览器编码格式

//了解
resp.setHeader("content-type","text/html;charset=utf-8")  
//推荐 
resp.setContentType("text/html;charset=utf-8")             	

五、三层架构

表示层(web):主要接收前端发送的请求,并响应数据

业务层(service): 负责处理具体的业务逻辑

持久层(dao): 负责对数据库进行增删改查操作
五、三层架构

六、面向接口编程

面向接口编程就是在开发程序之前先定义接口,然后开发人员再按照接口定义好的方法去写实现类

这样做的好处在于使用接口层进行解耦合,使得servlet和service层之间不再相互影响

七、前后端分离

7.1开发模式

7.1.1混合开发

前端人员开发的代码和后端人员开发的代码在同一个项目中,一起打包部署
7.1.1混合开发

7.1.2前后台分离开发

目前企业开发的主流,市场占有率70%以上,这种开发模式的特点如下:

前端人员开发前端程序,前端程序单独部署到前端服务器上。

后端人员开开发后端程序,后端程序单独部署到后端服务器上。
7.1.2前后台分离开发
前后端分离开发具体流程:

  1. 产品经理对客户提出的需求进行需求分析,产生原型图+需求文档
  2. 项目经理根据原型图和需求文档编写接口文档
  3. 前后端程序员根据接口文档并行开发程序,产出前后端代码,并完成自己的单元测试
  4. 前后端人员在一起进行联调测试

7.2前端部署

Nginx是一款轻量级的Web服务器,可以把我们大前端程序放到里面运行,默认端口是80

  1. 将nginx提供的软件解压缩。
  2. 启动Nginx。
  3. 拷贝静态资源
  4. 在浏览器访问localhost:80,查看效果
  5. 修改index.html中的路径
  6. 关闭Nginx
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值