[Web程序设计]实验: 请求与响应

news2024/11/18 5:53:06

一、实验目的

(1)掌握浏览器请求时数据的传递和获取。

(2)掌握服务端响应时数据的传递及获取。

二、实验内容

(1)编写一个类,该类能够实现在访问完Servlet后,还能在浏览器地址栏中显示出index.jsp路径;

(2)请编写一个类,该类使用HttpServletRequest对象的getHeader("referer")方法实现下载资源防盗链的功能。

三、实验要求

(1)掌握HttpServletRequest对象及其应用

(2)掌握HttpServletResponse对象及其应用

(3)掌握请求转发及请求重定向的实现

(4)掌握如何解决中文乱码问题

(1)做好预习,明确实验目的

(2)对试验过程认真记录,分析错误原因

(3)总结操作步骤

四、实验步骤与结果(包含程序代码及运行截图)

(1)编写一个类,该类能够实现在访问完Servlet后,还能在浏览器地址栏中显示出index.jsp路径

创建一个IndexServlet类,继承HttpServlet类,重写里面的doPost方法,在web.xml里面配置url请求路径,使用HttpServletResponse对象提供的重定向sendRedirect方法跳转至index.jsp页面。使用HttpServletRequest、HttpServletRequest对象的setCharacterEncoding方法,处理获取、相应数据的编码,避免乱码。

类的代码及截图:

package com.servlert;

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 IndexServlet extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //编码
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        //重定向
        resp.sendRedirect("index.jsp");
            

}
}

 运行效果:

在浏览器的输入栏输入

http://localhost:8086/myservlet_war_exploded/indexServlet链接,跳转至index.jsp页面,前后的运行效果图如下。

 点击回车键后,进入index.jsp页面的界面截图。

 (2)请编写一个类,该类使用HttpServletRequest对象的getHeader("referer")方法实现下载资源防盗链的功能。

创建一个DownManagerServlet类,继承HttpServlet类,重写里面的doPost方法,在web.xml里面配置url请求路径。

类的代码及截图:

package com.servlert;

import javafx.print.Printer;

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

public class DownManagerServlet extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //编码
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        PrintWriter out=resp.getWriter();
        //获取referer头的值
        String referer = req.getHeader("referer");
        //获取访问地址
        String sitePart = "http://"+req.getServerName();
        //获取referer头是否为空,这个头的首地址是否以sitePart开始的
        if(referer!=null&&referer.startsWith(sitePart)){
            //处理正在下载的请求
            out.print("dealing download~");
        }else{
            //非法下载请求跳转到down.html页面
            RequestDispatcher rd = req.getRequestDispatcher("/down.html");
            rd.forward(req,resp);
        }
    }
}

 页面的代码及截图:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" content="text/html;UTF-8">    <title>download</title>
</head>
<body>
    <a href="DownManagerServlet">
        download
    </a></body>
</html>

 运行效果截图:

第一次访问:

 第二次访问:

 五、实验反思

(1)创建web项目后,创建IndexServlet类,继承HttpServlet,重写里面的doPost或者doGet方法时,HttpServlet找不到,通过排查、查询发现没有导入servlet-api.jar架构。

(2)访问自己定义的Servlet的url,访问不到,发现自己没有在web.xml中

配置url路径,在里面配置好后就可以了。

(3)在down.html里面的a链接加href的链接,点击后发现不对,没反应,发现自己把url的路径写错了,多写了一个“/”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/681995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OSPF快速收敛之FRR

一、实验 OSPF IP FRR&#xff08;Fast ReRoute&#xff0c;快速重路由&#xff09; OSPF IP FRR是动态IP FRR&#xff0c;利用LFA&#xff08;Loop-Free Alternates&#xff09;算法预先计算出备份路径&#xff0c;保存在转发表中&#xff0c;以备在故障时将流量快速切换到备…

编码规范之命名规范

前言&#xff1a; \textcolor{Green}{前言&#xff1a;} 前言&#xff1a; &#x1f49e;这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 &#x1f49e;从这个专栏里面可以迅速获得Go的知识 今天的笔记是昨天的补充&#xff0c;对编码规范中的命名规范进行总结。主要…

管理类联考——逻辑——知识篇——形式逻辑——六、假言——haimian

假言 考点分析 假言 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量106312461345 定义分类 假言命题是断定一全事物情况的存在是另一个事物情况存在的条件的命题&#xff0c;又称条件命题。假言命题可以分为三类&#xff1a;充分条件假言命题、必要…

WPF开发txt阅读器19:加载json格式的配置文件

文章目录 系统参数字典加载参数自动加载配置文件 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录&#x1f48e;快捷键翻页字体控件绑定&#x1f48e;前景/背景颜色书籍管理系统&#x1f48e;用树形图管理书籍语音播放&#x1f48e;播放进…

大数据从0到1的完美落地之Flume模型

Flume的模型 数据模型 - 单一数据模型 - 多数据流模型 复制代码 单一数据模型 在单个 Agent 内由单个 Source, Channel, Sink 建立一个单一的数据流模型&#xff0c;如下图所示&#xff0c;整个数据流为 Web Server --> Source --> Channel --> Sink --> HDFS。…

ViewModel进阶 | 使用SavedState实现数据复用的另一种方式

前言&#xff1a;金风玉露一相逢&#xff0c;便胜人间无数。 前言 本文需要有上一篇文章基础&#xff0c;如果不了解的可以先看看《由浅入深&#xff0c;ViewModel配置变更的复用详解》 前面我们了解到&#xff0c;ViewModel 它只能做到因为配置变更页面被销毁而导致重建数据…

ModaHub AI模型开源社区:向量数据库Milvus向量索引是什么?

目录 向量索引 索引创建机制 数据段建索引 用户主动创建索引 闲时建索引 索引概览 FLAT IVF_FLAT IVF_SQ8 IVF_SQ8H IVF_PQ RNSG HNSW ANNOY 选择索引 常见问题 参考文献 向量索引 向量索引&#xff08;vector index&#xff09;是指通过某种数学模型&#xf…

软路由系统 --- OpenWrt网络配置(LAN口、WAN口)

这里使用的 OpenWrt 是一台虚拟机安装的. 配置LAN口IP等信息 编辑修改网络配置文件 rootOpenWrt:~# vi /etc/config/network config interface lanoption type bridgeoption ifname eth0option proto staticoption ipaddr 192.168.100.4option netmask 255.255.255.0option i…

Servlet(下篇)

哥几个来学 Servlet 啦 ~~ 这个是 Servlet&#xff08;上篇&#xff09;的链接&#xff0c; (2条消息) Servlet &#xff08;上篇&#xff09;_小枫 ~的博客-CSDN博客https://blog.csdn.net/m0_64247824/article/details/131229873主要讲了 Servlet的定义、Servlet的部署方式、…

【总结】网页状态码——200正常、302重定向、304客户端有缓存、400浏览器请求传参异常、404未找到、405方法不允许、500服务器异常

目录 200正常500异常--服务器异常Java代码400异常----传参相关的异常get方法长度限制400异常&#xff0c;加了RequestParam(value "name") 必须传值400异常&#xff0c;后端类型是Integer&#xff0c;前端传的是string&#xff0c;转换失败400异常&#xff0c;日期格…

一文带你学习“国密算法”

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

ES6--一

1、ES6之includes()方法 Array.prototype.includes方法返回一个布尔值&#xff0c;表示某个数组是否包含给定的值&#xff0c;与字符串的includes方法类似。 一般常用这种写法 : [1,2,3].includes(2) 表示2在不在 前面的数组里 项目里 参数 1&#xff09;第一个参数是要…

VUE L 计算监视属性 ⑥

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs计算属性 C o m p u t e d Computed Computed监视属性 W a t c h Watch Watch总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;…

SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)

文章目录 0. 引入依赖1. 实例创建与关闭2. 创建索引3. 测试索引库存在不存在4. 删除索引库5. 遍历导入数据6. 批量导入数据&#xff08;推荐&#xff09; RestHighLevelClient 是 Elasticsearch 官方提供的Java高级客户端&#xff0c;用于与Elasticsearch集群进行交互和执行各种…

基于Java+Swing实现中国象棋游戏

基于JavaSwing实现中国象棋游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 前言 中国象棋是起源于中国的一种棋&#xff0c;属于二人对抗性游戏的一种&#xff0c;在中国有着悠久的历史。由于用具简单&#xff0c;趣味性强&#xff0c;成为流行极为广泛的棋艺活动。 …

操作系统之死锁详解

本文已收录于专栏 《自考》 目录 背景介绍死锁的前提死锁的概念死锁的分类死锁的产生原因条件 死锁的解决预防避免检测与恢复 死锁的实现总结提升 背景介绍 最近一直在做操作系统的测试题&#xff0c;在做题的过程中发现有很多地方涉及到了关于死锁的知识点。今天就回归课本来自…

机器学习——手写数据集的介绍以及案例讲解

系列文章目录 机器学习聚类——DBSCAN&#xff08;Density-based spatial clustering of applications with noise&#xff0c;基于密度的聚类算法&#xff09; 机器学习集成学习——Adaboost分离器算法 机器学习聚类算法——BIRCH算法、DBSCAN算法、OPTICS算法 机器学习的…

“交通·未来”第27期:基于随机效应机器学习的多区域居民出行模式选择分析...

2020年6月份&#xff0c;公众号正式推出了“交通未来”系列线上公益学术活动等你来~&#xff0c; 2023年&#xff0c;新起航新征程&#xff0c;我们继续前行~ 6月24日下午15:30&#xff0c;我们将迎来活动的第27期。 1、讲座主题 基于随机效应机器学习的多区域居民出行模式选择…

工作三--知识点

1、split 切割字符串 2、includes 而不是写成 if&#xff08;useContext pm_global_teamrole_project_manager || pm_global_teamrole_task_manager || pm_global_teamrole_task_parent_manager&#xff09; 因为 的 优先级 高于 ||&#xff0c;这样写 只能 前面的&…

大数据学习(3)

大数据学习&#xff08;3&#xff09; 1 Hive-SQL-DML语句1.1 Hive SQL Load 加载数据语句1.1.1 Load功能1.1.2 Load语法规则1.1.3 Load 语法实验1.1.3.1 Load Data From Local FS1.1.3.2 Load Data From HDFS1.1.3.3 Overwrite选项 1.2 Hive SQL Insert 插入数据语句1.3 Hive …