[ Servlet 服务器]

目录

[一. web概述](#一. web概述)

[1. 定义:](#1. 定义:)

[2. web开发环境搭建](#2. web开发环境搭建)

[(1). 获取Tomcat安装程序包](#(1). 获取Tomcat安装程序包)

[(2). 安装JDK](#(2). 安装JDK)

[(3). Tomcat 修改端口号](#(3). Tomcat 修改端口号)

[3. 创建web项目(*)](#3. 创建web项目(*))

[二. servlet 概述](#二. servlet 概述)

[1. 定义:](#1. 定义:)

[2. Servlet的作用:](#2. Servlet的作用:)

[三. http 请求](#三. http 请求)

[1. HTTP 定义:](#1. HTTP 定义:)

[2. HTTP 请求](#2. HTTP 请求)

[(1). 定义:](#(1). 定义:)

[(2). 请求行 请求头 请求体](#(2). 请求行 请求头 请求体)

[(3). http两种请求方式](#(3). http两种请求方式)

[(4). 常用方法](#(4). 常用方法)

[3. 响应](#3. 响应)

[1. 定义:](#1. 定义:)

[2. 状态码:](#2. 状态码:)

[四. 过滤器](#四. 过滤器)

[1. 定义:](#1. 定义:)


一. web概述

1. 定义:

Web服务器是指驻留于因特网上某种类型计算机的程序. 可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览; 它相当于一个容器,作为中间件连接用户与程序

WEB服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、 WebLogic、Jboss等

在我们的电脑上安装一款Apache 的开源服务器Tomcat,Tomcat支持运行Java EE程序

在小型的应用系统或者有特殊需要的系统中,该服务器支持全部JSP以及Servlet规范

2. web开发环境搭建

Tomcat官网 Apache Tomcat® - Welcome!

(1). 获取Tomcat安装程序包

tar.gz文件: Linux操作系统下的安装版本

zip文件 : Windows系统下的压缩版本

(2). 安装JDK

● 设置JAVA_HOME环境变量

● 设置PATH环境变量

● 安装Tomcat

● 解压tomcat压缩文件

(3). Tomcat 修改端口号

地址: D:\development\apache-tomcat-9.0.43\conf

更改server.xml中的端口

server.xml是Tomcat的主配置文件

提供Tomcat组件的初始配置,tomcat启动的时候执行这些初始化设置。

修改此文件后,需要重新启动tomcat. 如果此文件修改错误,则tomcat不能正常启动

3. 创建web项目(*)

之后会更新完善,大家记得催更

二. servlet 概述

1. 定义:

servlet = service + applet , 是用Java编写的服务器端的 程序 . java EE(servlet程序)运行在服务器中, 服务器负责调用Java程序, 进行前后端交互

2. Servlet的作用:

  1. 接收用户发送的请求数据

  2. 调用其他的java程序来处理请求

  3. 根据处理结果,将结果响应给客户端

三. http 请求

1. HTTP 定义:

HTTP(HyperText Transfer Protocol)超文本传输协议 (应用层的协议) , 以简捷、快速的方式,适用于分布式超媒体信息系统 . 基于TCP/IP通信协议来传递数据.

**超文本传输协议:**服务器传输超文本到本地浏览器的传送协议,是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程

2. HTTP 请求

(1). 定义:

客户端连上服务器后,向服务器请求 web资源,称为客户端向服务器发送了一个http 请求

(2). 请求行 请求头 请求体

一次http请求包含 请求行 请求头 请求体.

请求行和请求头由浏览器自己发送, 客户端向服务器发送的数据在请求体中

请求行: 请求地址 请求方式,http版本

请求头: 请求中放一些客户端的环境信息

请求体: post发送的请求在请求体中

(3). http两种请求方式

get请求: 一般从服务器获取数据(发送少量数据,获取大量数据)

数据只能拼接在地址的后面,会在地址栏显示出来 例如超链接

post请求:一般主要是向服务器提交数据(表单)

向后端发送大量数据 数据在请求体中,发送的数量没有限制,还可以提交文件,数据不会在地址栏里显示

java 复制代码
package org.example.webserver;

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

//servlet是服务器
@WebServlet(urlPatterns = "/hello")//配置前段访问的地址
public class HelloServlet extends HttpServlet {
    private String message;

    public void init() {
        message = "Hello World!";
    }
    /*服务器会把请求中所有的数据封装到HttpServletRequest对象中,需要请求中的数据,
    直接从对象中获取,用HttpServletRespons对象,向客户端做出响应

     doGet和doPost中封装了HttpServletRequest, 表示请求对象;
                        HttpServletResponse,表示响应对象 */
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {

        System.out.println(req.getMethod());
        System.out.println("后端接收到了前端 的请求");
        System.out.println(req.getParameter("name"));//获取请求中, 自己发送的数据

        //获取请求头中的数据
        System.out.println(req.getRemoteAddr());//客户端的ip
        System.out.println(req.getRemotePort());//客户端的端口
        System.out.println(req.getHeader("user-agent"));
        System.out.println(req.getHeader("accept-language"));

        //jdbc
        //mybatis
        //响应
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //post请求中文解码方式和前端编码方式不一致, 所以中文会乱码
        req.setCharacterEncoding("utf-8");//设置 请求 中的数据解码格式
        String name = req.getParameter("name");//获取参数
        String password=req.getParameter("password");

        //设置响应内容的编码方式, 需要在获得PrintWriter之前设置
        resp.setContentType("text/html;charset=utf-8");//设置 响应头,为响应的内容设置编码格式
        PrintWriter printWriter =resp.getWriter();//获得打印输出字符流, 以流的形式向前端做出响应

        //各种逻辑处理,与数据交互
        if (name.equals("张三")&&password.equals("111")){//向客户响应体端做出响应
            printWriter.write("<h1>登录成功</h1>");//响应体 响应内容
        }else{
            printWriter.write("<h1>账号或密码错误</h1>");//响应体
        }
    }
}
(4). 常用方法

● getParameter(name) String 通过name获得值

● request.setCharacterEncoding(编码格式) 处理post请求中文乱码

● getMethod() 得到客户机请求方式

● getScheme() 请求协议

● getRemoteAddr() 返回发出请求的客户机的IP地址

● getServerName() 服务器名(ip或域名)

● getServerPort() 服务器端口

3. 响应

1. 定义:

一个http响应表示服务器向客户端回送的数据,包括 响应行,响应头,响应体

**响应行:**包含了http协议版本,以及用于描述服务器对请求的处理结果。

HTTP/1.1 (协议版本) 200(状态吗) OK(状态码描述)

响应头: 用于描述服务器的基本信息,以及数据描述

Server Apache-Coyote/1.1

Content-Type text/html;charset=UTF-8

Content-Length 0

Date Wed, 13 Sep 2017 02:26:07 GMT

响应体: 服务器向客户端浏览器回送的正文

2. 状态码:

http响应状态码:
200: 表示请求成功,后端处理没有问题,响应成功
404: 表示请求的资源不存在,请求路径中项目名,servlet地址写错了
ip和端口 没有问题,但是后端找不到项目
500: 服务器 内部出错了( 即 java代码出错)

四. 过滤器

1. 定义:

在请求到达servlet程序前,可以让请求进入过滤器中,进行一些处理(字符集编码设置,用户登录是否失效)

java 复制代码
package org.example.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/*过滤器:
     在请求到达servlet程序前,可以让请求进入过滤器中,进行一些处理
     (字符集编码设置,用户登录是否失效)
*/
@WebFilter(urlPatterns = "/*")//配置哪些请求可以进入到此过滤器
public class EncodFilter implements Filter {

    //执行过滤操作的方法
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        System.out.println("编码过滤器");

        //设置编码格式,防止乱码
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");

        //让请求离开过滤器,继续相互执行,后一个可能是目标Servlet,还可能是下一个过滤器
        filterChain.doFilter(servletRequest,servletResponse);
    }
}
相关推荐
东心十15 分钟前
Win11安装WSL、Docker Desktop
运维·docker·容器
chenglin0161 小时前
ES_数据存储知识
java·服务器·elasticsearch
奔跑草-1 小时前
【服务器】Apache Superset功能、部署与体验
运维·服务器·apache·powerbi·superset
提笔惊蚂蚁2 小时前
终端VS命令解释器(Linux & Windows)
linux·运维·windows
tb_first3 小时前
k8sday13数据存储(1.5/2)
linux·运维·服务器·云原生·容器·kubernetes
搬码临时工3 小时前
通过自定义域名访问内网的web服务和tcp应用:内网ip到局域网外域名访问过程
服务器·tcp/ip·php
小红帽2.04 小时前
从ioutil到os:Golang在线客服聊天系统文件读取的迁移实践
服务器·开发语言·golang
wanhengidc5 小时前
造成云手机闪退的原因有哪些?
服务器·网络·安全·智能手机·媒体
phoenix09817 小时前
Linux入门DAY29
linux·运维