快速掌握servlet技术-d1_1

本文详细介绍了HTTP协议的基础知识,包括请求行、消息头字段及其作用,如客户端如何通过这些字段告知服务器其偏好设置、身份信息及链接状态等。此外,还提供了如何通过Java代码获取请求消息头的具体示例。

学习web开发必须要学习http协议的 叫做超文本传输协议

先来看请求:

GET /APP HTTP/1.1 ---------------请求行

下面是消息头

Accept: text/html,image/* [告诉浏览器,客户端可以接受文本,网页等内容]

Accept-Charset: IOS-8859-1 [接受的字符编码格式]

Accept-Encoding:gzip,compress[可以接受gzip等压缩后的数据]

Accept-Lanaguage:en-us [浏览器支持的语言]

Host:www.baidu.com [要找的主机]

If-Modified-Since:Tue,11….[请求的文件本地存在,告诉服务器存在的时间,如果更新了就要]

Referer:www…. [告诉服务器我来自哪里]常用语 防止盗链

User-Agent:Mozilla/4.0 [使用的浏览器内核]

Cookie [cookie]

Connection:close/Keep-Alive[保持连接,发送完数据后补关闭连接]

Date:Tue.. [发送请求的时间]

Connection:Keep-Alive 代表保持长连接

空行

内容

下面代码分别获取客户端发送过来请求内容:

一个辅助类:

package com.codeguy.d1.protocol;

import javax.servlet.http.HttpServletRequest;

public class HttpHeader {
	public static String getHeader(String header,HttpServletRequest req){
		return req.getHeader(header); 
	}
} 

获取请求消息头内容:

package com.codeguy.d1.protocol;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Protocol extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		//这里弄个表单:
		String headers[] = {"Accept","Accept-Charset","Accept-Encoding","Accept-Lanaguage","Host","If-Modified-Since","Referer","User-Agent","Cookie","Connection","Date"};
		String headerNames[] = {"可接受内容: ","可接受字符集: ","可接受的压缩格式: ",
		"浏览器支持的语言: ","请求的主机名: ","本地存放文件的时间: ","客户端地址: ","浏览器内核: ","Cookie: ","链接方式: ","发送时间: "		
		};
		for(int i=0; i<headers.length; i++){
			out.println(headerNames[i]+HttpHeader.getHeader(headers[i], request));
			out.println("<br/>");
		}
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doGet(request, response);
	}

}


防止盗链测试:

 请求页面:

package com.codeguy.d1.protocol;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Link extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.println("<form method='post' action='/ServletStudy/PreventLink'>");
		out.println("<input type='submit' value='link'/>");
		out.println("</form>");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doGet(request, response);
	}

}
判断是否盗链:

package com.codeguy.d1.protocol;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PreventLink extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		String checkAddress = "localhost:8080/ServletStudy";
		String referer = request.getHeader("Referer");
		//这里判断条件不能写反啦 如果反啦就会出现使用NULL去调用indexof 发生Exception
		if(referer != null && "".equals(referer) && referer.indexOf(checkAddress) != -1){
			out.println("正确链接");
		}else{
			out.println(" 盗链");
		}
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doGet(request, response);
	}

}


这个是完整源码 python实现 Django 【python毕业设计】基于Python的天气预报(天气预测分析)(Django+sklearn机器学习+selenium爬虫)可视化系统.zip 源码+论文+sql脚本 完整版 数据库是mysql 本研究旨在开发一个基于Python的天气预报可视化系统,该系统结合了Django框架、sklearn机器学习库和Selenium爬虫技术,实现对天气数据的收集、分析和可视化。首先,我们使用Selenium爬虫技术从多个天气数据网站实时抓取气象数据,包括温度、湿度、气压、风速等多项指标。这些数据经过清洗和预处理后本研究旨在开发一个基于Python的天气预报可视化系统,该系统结合了Django框架、sklearn机器学习库和Selenium爬虫技术,实现对天气数据的收集、分析和可视化。首先,我们使用Selenium爬虫技术从多个天气数据网站实时抓取气象数据,包括温度、湿度、气压、风速等多项指标。这些数据经过清洗和预处理后,将其存储在后端数据库中,以供后续分析。 其次,采用s,将其存储在后端数据库中,以供后续分析。 其次,采用sklearn机器学习库构建预测模型,通过时间序列分析和回归方法,对未来天气情况进行预测。我们利用以往的数据训练模型,以提高预测的准确性。通过交叉验证和超参数优化等技术手段,我们优化了模型性能,确保其在实际应用中的有效性和可靠性。 最后,基于Django框架开发前端展示系统,实现天气预报的可视化。用户可以通过友好的界面查询实时天气信息和未来几天内的天气预测。系统还提供多种图表类型,包括折线图和柱状图,帮助用户直观理解天气变化趋势。 本研究的成果为天气预报领域提供了一种新的技术解决方案,不仅增强了数据获取和处理的效率,还提升了用户体验。未来,该系统能够扩展至其他气象相关的应用场景,为大众提供更加准确和及时的气象服务。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值