【Day07-Servlet&HTTP】

Web 服务器 

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

Tomcat

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

Tomcat就是web服务器的一种,由Apache 软件基金会提供,开源、免费、易上手

Tomcat安装

资料中已经提供好绿色解压版,直接解压即安装,要求安装目录==没有中文,没有空格==

启动和停止

  1. 如果控制台出现中文,则修改conf/logging.properties文件中的java.util.logging.ConsoleHandler.encoding = GBK (字符集由UTF-8修改成了GBK)

  2. 浏览器访问: 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>

添加配置文件和工具类

复制资料中得配置文件和工具类

代码开发

创建实体类

创建LoginServlet

创建EmpMapper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值