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