栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

【JavaWeb - 网页编程】七 HTTP 协议 与 Servlet 技术

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JavaWeb - 网页编程】七 HTTP 协议 与 Servlet 技术


第七章 HTTP 协议 与 Servlet 技术

创作日期:2021-12-26


7.1 HTTP 协议

        协议是指双方,或多方,相互约定,都需要遵守的规则,所谓 HTTP 协议,就是指客户端和服务器之间通信时,发送的数据需要遵守的规则,HTTP 协议中的数据又称之为报文

7.1.1 请求的 HTTP 协议格式:GET
  • 请求:客户端给服务器发送数据,分为 GET 请求与 POST 请求
  • 响应:服务器给客户端回传数据
  • GET 请求
    • 请求行
      • 请求的方式        GET
      • 请求的资源路径
      • 请求的协议的版本号 HTTP/1.1    
    • 请求行
      • 请求的方式        GET
      • 请求的资源路径
      • 请求的协议的版本号 HTTP/1.1    


7.1.2 请求的 HTTP 协议格式:POST
  • POST 请求
    • 请求行
      • 请求的方式        GET
      • 请求的资源路径
      • 请求的协议的版本号 HTTP/1.1    
    • 请求行
      • 请求的方式        GET
      • 请求的资源路径
      • 请求的协议的版本号 HTTP/1.1    
    • 请求头 客户端发送服务器的数据 (头和体之间要有空行隔开)


7.1.3 常用请求头的说明
  • Accept:表示客户端可以接收的数据类型
  • Accept-Languege:表示客户端可以接收的语言类型
  • User-Agent:表示客户端浏览器的信息
  • Host:表示请求时的服务器 ip 和端口号

7.1.4 请求分类
  • GET 请求
    • 地址栏输入地址回车
    • iframe 标签引入 html 页面
    • img 标签引入图片
    • Script 标签引入 js 文件
    • link 标签引入 css 文件
    • a 标签
    • from 标签 menthod = get
  • POST 请求
    • from 标签 menthod = post

7.1.5 响应的 HTTP 协议格式
  • 响应行
    • 响应的协议和版本号          HTTP/1.1    
    • 响应状态码                        200
    • 响应状态描述符                 ok
  • 响应头 key : value 不同的响应头,有其不同含义
  • 响应体 服务器回传给客户端的数据(头和体之间要有空行隔开)


7.1.6 常用的响应码说明
  • 200 表示请求成功
  • 302 表示请求重定向
  • 404 表示请求服务器已经收到了,但是数据不存在(请求地址错误)
  • 500 表示服务器已经收到请求了,但是服务器内部错误(代码错误)
7.1.7 MIME 类型说明

        MIME 是 HTTP 协议中数据类型,全称是“Multipurpose Internet Mail Extensions” 多功能 Internet 邮件扩充服务,格式是“大类型/小类型”,并与某一种文件的扩展名相对应

  • 常见的 MIME 类型:


7.2 HttpServletRequest 类 7.2.1 HttpServletRequest 类的作用

        每当请求进入 Tpmcat 服务器时,Tomcat 服务器就会把请求的 HTTP 协议信息解析进行封装到 Request 对象中,然后传递到 service 方法( doGet 和 doPost )中,我们可以通过 HttpServletRequest  对象,获取到所有请求的信息


7.2.2 HttpServletRequest 类的常用方法
  • getRequestURI()             获取请求的资源路径
  • getRequestURL()            获取请求的统一资源定位符(绝对路径)
  • getRemoteHost()             获取客户端的 ip 地址
  • getHeader()                      获取请求头
  • getParameter()                 获取请求的参数
  • getParameterValues()      获取请求的参数(多个值的时候使用)
  • getMethod()                       获取请求的方式 GET 或 POST
  • setAttribute(key,value)     设置域数据
  • getAttribute(key)               获取域数据




    
    
        
        HelloServlet
        
        com.example.Tomcat_web.HelloServlet
    

    
    
        
        HelloServlet
        
        /helloServlet
    




    
    HelloServlet


姓名:
密码:
性别:
爱好:足球 音乐 游戏
package com.example.Tomcat_web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "HelloServlet", value = "/HelloServlet")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int j = 1;
        //getRequestURI() 获取请求的资源路径 "URI =>/Tomcat_web/helloServlet"
        System.out.println("URI => " + request.getRequestURI());

        //getRequestURL() 获取请求的统一资源定位符(绝对路径) "URL =>http://localhost:8080/Tomcat_web/helloServlet"
        System.out.println("URL => " + request.getRequestURL());

        //getRemoteHost() 获取客户端的 ip 地址 "客户端 ip 地址 => 127.0.0.1"
        System.out.println("客户端 ip 地址 => " + request.getRemoteHost());

        //getHeader() 获取请求头 "请求头 User-Agent => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77"
        System.out.println("请求头 User-Agent => " + request.getHeader("User-Agent"));

        //getMethod() 获取请求的方式 GET 或 POST "请求的方式 => GET"
        System.out.println("请求的方式 => " + request.getMethod());

        //setAttribute(key,value) 设置域数据
        request.setAttribute("xfdq", "jsb");
        //getAttribute(key) 获取域数据 "xfdq => jsb "
        System.out.println("xfdq => " + request.getAttribute("xfdq"));

        //getParameter() 获取请求的参数 "姓名 => lmq8214, 密码 => 123, 性别 => girl"
        System.out.println("姓名 => " + request.getParameter("username")+"n密码 => " + request.getParameter("userpwd")+"n性别 => " +request.getParameter("sex"));

        //getParameterValues() 获取请求的参数(多个值的时候使用)"爱好1 => football  爱好2 => music  爱好3 => games"
        String[] hobbies = request.getParameterValues("hobby");
        for (Object i:hobbies) {
            System.out.print("爱好"+j+" => "+i+"  ");
            j++;
        }
        System.out.println("nget 请求");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        System.out.println("post 请求");
    }
}

7.3 HttpServletResponse 类 7.3.1 HttpServletResponse 类的作用

         HttpServletResponse 表示所有响应的信息,我们可以通过HttpServletResponse 对象设置返回给客户端的信息


7.3.2 两个输出流的说明
  • 两个流不能同时使用
    • 字节流:getOutputStream();         常用于下载(传递二进制数据)
    • 字符流:getWriter();                       常用于回传字符串
package com.example.Tomcat_web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "HelloServlet", value = "/HelloServlet")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解决回传数据 中文乱码问题
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Type","text/html;charset=UTF-8");
        //response.getOutputStream(); 获取字节流
        //response.getWriter(); 获取字符流 常用于回传字符串
        //往客户端回传 字符串 数据
        PrintWriter writer = response.getWriter();
        writer.write("HelloServlet !!!");
        writer.write("编程 !!!");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        System.out.println("post 请求");
    }
}

7.3.3 请求重定向

        请求重定向指客户端给服务器发送请求,然后服务器反馈给客户端新的访问地址(之前的地址可能已经被废弃)

  • 浏览器地址栏会发生变化
  • 两次请求,一次响应
  • 不共享 Request 域中数据
  • 不能访问 WEB-INF 下的资源
  • 可以访问工程外的资源




  
    
    
        Response1
        com.example.Tomcat_web.Response1
    
    
        Response1
        /response1
    
    
    
    
        Response2
        com.example.Tomcat_web.Response2
    
    
        Response2
        /response2
    

第一种重定向方法:

package com.example.Tomcat_web;
//Response1.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class Response1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Response1......");
        //设置响应状态码 302,表示重定向(地址已更换)
        response.setStatus(302);
        //设置响应头 说明新的地址
        response.setHeader("Location","http://localhost:8080/Tomcat_web/response2");
    }
}
package com.example.Tomcat_web;
//Response2.java
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Response2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("response2 is result!");
    }
}

第二种重定向方法:(在 Response1.java 中使用 sendRedirect() 方法)

package com.example.Tomcat_web;
//Response1.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class Response1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Response1......");
        //设置新的地址
        response.sendRedirect("http://localhost:8080/Tomcat_web/response2");
    }
}

上一节:

下一节:

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1036936.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号