JavaWeb——HTTP协议

HTTP协议介绍

1.什么是HTTP协议

HTTP(Hyper Text Transfer Protocol)协议是互联网上应用最为广泛的一种网络协议,常用于Web应用中,用于浏览器和Web服务器之间传输超文本内容。HTTP是一个基于客户端-服务器架构模型的协议,客户端发出请求,服务器回送响应。HTTP协议一般使用TCP作为传输层协议,HTTP的主要特点是简单、快速、灵活。HTTP协议的最新版本是HTTP2.0。

2.请求头

GET /myweb/index.html HTTP/1.1(请求行)
消息头
Accept-Encoding    gzip, deflate
Host    localhost:8080
User-Agent    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Accept    text/html, application/xhtml+xml, */*
Accept-Language    zh-CN

3.响应头 

HTTP/1.1 304 Not Modified(状态行)
消息头
ETag    W/"37-1368603309298"
Content-Type    text/html
Content-Length    37
Last-Modified    Wed, 15 May 2019 07:35:09 GMT

实例 (下载图片、防盗链、定时刷新、防止重复提交)

1.下载图片

1.1新建一个jsp页面,选择一张图片
<%--
  Created by IntelliJ IDEA.
  User: Asus
  Date: 2023/10/9
  Time: 11:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>下载</title>
</head>
<body>
    <img src="img/OIP-C.jpg"><br>
    <a href="DownloadConntroller?filename=img/OIP-C.jpg">下载</a>
</body>
</html>
1.2新建一个Servlet
package com.org.controller;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;

@WebServlet("/DownloadConntroller")
public class DownloadConntroller extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html:charset=utf-8");
        //获得资源名
        String filename = req.getParameter("filename");
        //获取绝对路径
        String realPath = this.getServletContext().getRealPath(filename);
        //截取资源名
        int i = realPath.lastIndexOf(File.separator);
        String substring = realPath.substring(i + 1);
        //设置下载
        resp.setHeader("content-disposition","attouchment;filename="+ URLEncoder.encode(substring,"utf-8"));
        FileInputStream in = new FileInputStream(realPath);
        OutputStream out = resp.getOutputStream();
        byte[] b = new byte[2*1024];
        int len = 0;
        while ((len=in.read(b))!=-1){
            out.write(b,0,len);
        }
    }
}
 1.3运行结果

下载完成打开文件

2.防盗链

2.1什么是防盗链

盗链是指在自己的页面上展示一些并不在自己服务器上的一些内容, 获取别人的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。 一般被盗链的都是图片、 音乐、视频、软件等资源。通过盗链的手段可以减轻自己服务器的负担

2.2java代码
//防止盗链
        String referer = resp.getHeader("referer");
        String server = "http://" + req.getServerName();
        if (referer!=null && referer.startsWith(server)){
            req.getRequestDispatcher("download.jsp").forward(req,resp);
        }

3.定时刷新

3.1网页定时刷新
<%--
  Created by IntelliJ IDEA.
  User: Asus
  Date: 2023/10/10
  Time: 10:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<style>
    #span1{
        color: mediumvioletred;
        font-size: 50px;
    }
</style>
<body>
    <div>
        注册成功
        <span id="span1">3</span>
        秒后跳转登录页面,如果没有跳转点击
        <a href="login.jsp">登录</a>
    </div>
</body>
<script>
    function fun() {
        //获得span
        var span1 = document.getElementById("span1");
        //获得span标签中的值
        var i = span1.innerHTML;
        if (i>0){
            i=i-1;
            span1.innerHTML=i;
        }

    }
    //定时器每秒调用一次
    window.setInterval("fun()",1000);
    <%
        //设置浏览器的属性
        response.setHeader("refresh","3;url=/formdemo/login1.jsp");
    %>
</script>
</html>
3.2运行结果

点击注册3秒后跳转到登录界面

4.防止重复提交

4.1模拟服务器卡顿
try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
4.2在网页中处理重复提交
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: Asus
  Date: 2023/9/21
  Time: 11:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    HashMap<String,String> error = (HashMap<String,String>)request.getAttribute("error");
    String register = request.getParameter("register");
%>
<div>
    <div style="width:100%;  text-align: center"><%=register==null?"":register%></div>
    <form action="UserController" method="post" onsubmit="fun()">
        <input type="hidden" value="register" name="userAction">
        <table border="1" cellpadding="0" cellspacing="0" width="50%" height="500px" align="center">
            <tr>
                <td colspan="2" align="center">用户注册</td>
            </tr>
            <tr>
                <td>用户名:</td>
                <td><input type="text" value="" name="username"></td>
                <%=error==null?"":error.get("username")==null?"":error.get("username")%>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" value="" name="password"></td>
                <%=error==null?"":error.get("password")==null?"":error.get("password")%>
            </tr>
            <%--<tr>--%>
                <%--<td>生日:</td>--%>
                <%--<td><input type="text" value="" name="birthday"></td>--%>
            <%--</tr>--%>
            <tr>
                <td>性别:</td>
                <td>
                    <input type="radio" value="男" name="gender">男
                    <input type="radio" value="女" name="gender">女
                </td>
            </tr>
            <tr>
                <td>爱好:</td>
                <td>
                    <input type="checkbox" value="篮球" name="hobby">篮球
                    <input type="checkbox" value="唱" name="hobby">唱
                    <input type="checkbox" value="跳" name="hobby">跳
                    <input type="checkbox" value="rap" name="hobby">rap
                </td>
            </tr>
            <tr>
                <td>地址:</td>
                <td>
                    <select name="address">
                        <option value="北京">北京</option>
                        <option value="四川">四川</option>
                        <option value="广州">广州</option>
                        <option value="上海">上海</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>备注:</td>
                <td>
                    <textarea cols="80" rows="20" name="remark">

                    </textarea>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="submit" value="注册" id="sub">
                    <input type="reset" value="重置">
                </td>
            </tr>
        </table>
    </form>
</div>
</body>
<script type="text/javascript">
    //处理重复提交
    var i=1;
    function fun() {
        var sub = document.getElementById("sub");
        if (i>1){
            sub.disable("disable");
            alert("请勿重复提交");
            return false;
        }
        i++;
    }
</script>
</html>
4.3运行结果

多次点击注册后弹出提示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值