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

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

一、实验目的

(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的路径写错了,多写了一个“/”。

相关文章
|
6月前
|
缓存 安全 Java
《深入理解Spring》过滤器(Filter)——Web请求的第一道防线
Servlet过滤器是Java Web核心组件,可在请求进入容器时进行预处理与响应后处理,适用于日志、认证、安全、跨域等全局性功能,具有比Spring拦截器更早的执行时机和更广的覆盖范围。
|
缓存 移动开发 安全
Web安全-HTTP响应拆分(CRLF注入)漏洞
Web安全-HTTP响应拆分(CRLF注入)漏洞
1582 1
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
624 0
|
安全 Java 数据安全/隐私保护
springSecurity学习之springSecurity过滤web请求
通过配置 Spring Security 的过滤器链,开发者可以灵活地管理 Web 请求的安全性。理解核心过滤器的作用以及如何配置和组合这些过滤器,可以帮助开发者实现复杂的安全需求。通过具体的示例代码,可以清晰地了解 Spring Security 的配置方法和实践。
700 23
|
缓存 移动开发 安全
Web安全-HTTP响应拆分(CRLF注入)漏洞
Web安全-HTTP响应拆分(CRLF注入)漏洞
1075 8
|
SQL 存储 安全
Web安全-CSRF跨站请求伪造
Web安全-CSRF跨站请求伪造
627 4
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
1060 0
|
JSON 前端开发 Java
一文读Web开发 之接口后端接口、类与前端请求、拦截器编写
一文读Web开发 之接口后端接口、类与前端请求、拦截器编写
1758 6
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
254 3
|
存储 缓存 NoSQL
【性能飙升的秘密】FastAPI应用如何借助缓存技术实现极速响应?揭秘高效Web开发的制胜法宝!
【8月更文挑战第31天】FastAPI是一个高性能Web框架,利用Starlette和Pydantic实现高效API构建。本文介绍如何通过缓存提升FastAPI应用性能,包括使用`starlette-cache[redis]`实现Redis缓存,以及缓存一致性和缓存策略的注意事项。通过具体示例展示了缓存的配置与应用,帮助开发者构建更高效的Web应用。
1397 0

热门文章

最新文章