javaweb入门(5)-- 详细了解http协议3

Oracle/MySQL/SQLServer 数据类型:从长度、精度、标度到跨库迁移的实战避坑指南 本文深入解析Oracle、MySQL、SQLServer三大数据库的数据类型差异,涵盖长度、精度、标度等核心概念,并提供跨库迁移的实战避坑指南。通过详细的类型对比、迁移方案和常见问题解决方案,帮助开发者高效完成数据库迁移,确保数据准确性和一致性。 阅读详情

由于javaweb开发需要详细了解http协议中http响应的相关知识,所以,通过以下实例,对http://blog.youkuaiyun.com/java4found/article/details/8752130所描述的http响应头的作用进行深入学习。


1、用location响应头进行浏览器重定向。

     新建web工程httptest,并新建一个servlet,内容如下:

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

public class HttpTestServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 302状态码与location合用,实现重定向功能
		response.setStatus(302);
		response.setHeader("location", "http://www.baidu.com");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}
将工程部署到tomcat服务器中,访问:打开浏览器访问http://localhost:8080/httptest/Servlet/HttpTestServlet

重定向的过程:浏览器向服务器请求资源,服务器反馈数据告诉浏览器要重定向至另一个地址,浏览器向新地址发起新的请求,所在资源服务器反回用户所请求的数据。


2、用content-type响应头告诉浏览器以图片的形式打开接收到的数据。

     在项目的WebRoot新建images目录并放入一张图片。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HttpTestServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setHeader("content-type", "image/jpeg");
		// 获取向浏览器输出数据的输出流
		OutputStream out = response.getOutputStream();

		// 读取图片文件,写入到out中
		InputStream inStream = this.getServletContext().getResourceAsStream("/images/java.jpg");
		byte[] buf = new byte[1024];
		int len = 0;
		while ((len = inStream.read(buf)) != -1) {
			out.write(buf, 0, len);
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}
将工程部署到tomcat服务器中,访问:打开浏览器访问http://localhost:8080/httptest/Servlet/HttpTestServlet

可以看到浏览器将以图片的形式显示图片数据。


3、refresh响应头实现浏览器定时刷新。

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

public class HttpTestServlet extends HttpServlet {
	int i= 0 ;
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setHeader("Content-type", "text/html;charset=utf-8");
		
		//使用refresh响应头实现自动刷新
		response.setHeader("refresh", "3");
		//response.setHeader("refresh", "3;url=http://www.baidu.com");     //3s后刷新到百度
		
		i++;
		response.getOutputStream().write(("您第"+i+"次访问").getBytes("utf-8"));
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}

4、用content-disposition响应头来控制浏览器以下载的方式打开数据。

以第2个实例的图片为例,用content-disposition响应头告诉浏览器以下载的方式下载这张图片。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HttpTestServlet extends HttpServlet {
	int i = 0;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setHeader("content-disposition", "attachment;filename=java.jpg");

		InputStream inStream = this.getServletContext().getResourceAsStream(
				"/images/java.jpg");
		OutputStream out = response.getOutputStream();
		byte[] buf = new byte[1024];
		int len = 0;
		while ((len = inStream.read(buf)) != -1) {
			out.write(buf, 0, len);
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}



     

MySQL、Oracle、SQL Server与达梦数据库:SQL语法差异与跨平台开发的挑战 本文深入分析了MySQL、Oracle、SQL Server和达梦数据库在SQL语法上的主要差异,涵盖了数据类型、字符串连接、分页查询、日期处理以及子查询与连接等方面。这些差异在跨平台开发中可能带来兼容性和性能优化等挑战。为解决这些问题,文章建议使用ORM框架、抽象数据库层或数据库中间件等技术手段,以统一接口并隐藏数据库间的差异。通过了解和应用这些解决方案,开发人员可以更高效地进行跨平台数据库迁移和多数据库平台支持,确保应用程序在不同数据库环境中的顺利运行。 阅读详情

相关推荐

oracle利用函数实现oracle表生成mysql建表DDL

目录一、应用背景二、功能实现 一、应用背景 数据的迁移在工作中经常用到,尤其是不同类型的数据库建表语法不一致,下面通过oracle函数,输出mysql建表DDL。 二、功能实现 1、代码 create or replace function fn_crea_tab_oracle2mysql ( i_owner in string, i_table_name in string, i_number_default_type

shammy_feng的博客 778

OkHttp3发送http请求在Java中的使用方法

最近在使用OkHttp3开发的时候,出现了一些问题,记录总结一下Http的get请求和post请求的使用方法和问题解决!

笑看风云路的博客 1740

从MySQL/Oracle迁移到达梦数据库,我用这个图形化工具省了80%的时间

本文详细介绍了如何使用达梦数据库的图形化迁移工具(DTS)从MySQL/Oracle高效迁移数据,节省80%的时间。通过实战指南,包括迁移前的准备工作、工具核心功能解析、高频问题解决方案及迁移后验证优化,帮助用户快速完成数据库国产化迁移。

weixin_29310631的博客 213

Java实现http3.0

HTTP 3.0是用于Web应用程序的新版本的超文本传输协议(HTTP),它是基于QUIC协议的。QUIC是一种传输层协议,旨在提供快速,可靠和安全的数据传输。 在Java中实现HTTP 3.0,您可以使用Jetty的HTTP/3模块。这是一个Java库,它支持基于QUIC协议的HTTP 3.0通信。要使用Jetty的HTTP/3模块,您需要在Maven依赖关系中包含以下内容: <depen...

weixin_35756624的博客 2118

数据库时间查询全解析:MySQL、Oracle、SQL Server核心函数与时区处理

在数据库开发与运维中,时间处理是基础却至关重要的技术环节。其核心原理在于数据库系统通过内置函数获取操作系统时间,并结合时区设置进行转换。精确的时间戳对于确保数据一致性、支持分布式事务和实现数据版本控制具有关键价值,广泛应用于订单系统、日志记录、数据同步等场景。时区处理机制和时间精度是其中的核心挑战,不同数据库方言如MySQL的NOW()、Oracle的SYSTIMESTAMP、SQL Server的SYSDATETIMEOFFSET()在行为上存在显著差异。理解这些差异能帮助开发者避免跨时区数据不一致、主从

weixin_33901926的博客 548

Oracle毫秒时间戳转北京时间:原理、方案与常见坑

Unix时间戳是系统间交换时间数据的通用格式,通常以毫秒数表示自1970年UTC起的累计值。在Oracle数据库中,将毫秒时间戳转换为北京时间并非简单除以1000,而是需要同时处理UTC与东八区的时区偏移以及毫秒精度保留。理解NUMTODSINTERVAL、TIMESTAMP等基础函数的运作原理,有助于避开结果差8小时、毫秒丢失等典型问题。这一转换能力在数据迁移、物联网上报、BI报表等场景中至关重要,能够保证跨系统时间一致性。本文从底层机制讲起,针对不同Oracle版本给出可直接运行的SQL写法,帮助开发者

weixin_31421613的博客 131

java okhttp3 工具类,超简单的okhttp封装工具类(上)

前言:提及访问网络,很自然的会用到okHttp,虽然okhttp已经封装的比较完善,调用也比较方便,但对于向我这样比较懒的人,okhttp的调用还是略显复杂,每次都要写同样重复的代码,简直不能忍受,那就封装以下一句话调用完毕,岂不快哉。。。废话不多说,请抓稳扶好,老司机,走起。。。1234重要的事情提一提:看不懂的文章最后有完整代码,看看完整版应该就没问题了。okHttp使用流程没有什么是一张图说...

weixin_35370032的博客 1565

Oracle Sequence序列详解:从原理到实战的高性能ID生成方案

在数据库设计中,唯一标识符的生成是核心基础技术之一,尤其在分布式和高并发场景下,高效、可靠的ID生成机制至关重要。其原理通常基于预分配、内存缓存和原子操作,以确保全局唯一性和高性能。这种技术价值在于解耦业务逻辑与数据存储,支持高吞吐量插入操作,同时保持事务安全。常见的应用场景包括订单号生成、交易流水号、用户ID分配以及多系统间的数据标识同步。本文聚焦Oracle数据库中的Sequence序列,深入解析其作为独立数字流水号生成器的设计哲学,探讨如何通过参数配置(如CACHE、ORDER)在性能与一致性间取得平

weixin_30902251的博客 359

Java封装OkHttp3工具类,真TM厉害!

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达关注公众号后台回复pay或mall获取实战项目资料+视频作者:如漩涡https://blog.youkuaiyun.com/mJava封装Ok...

这个时代,作为程序员可能要学习小程序 1686

UNION vs UNION ALL:语义选择决定SQL性能与准确性

UNION 和 UNION ALL 是 SQL 中最基础却最容易误用的集合操作符。它们的本质差异不在语法层面,而在于对数据语义的承诺:UNION 表达数学集合的唯一性约束,强制去重并隐含排序;UNION ALL 则是物理行堆叠,保留全部原始记录。这种语义差异直接触发数据库底层的 Hash Aggregate、Sort 等高开销算子,导致性能呈指数级分化——百万级数据下耗时可相差 25 倍以上。其技术价值体现在精准控制数据完整性、规避隐式类型转换与临时磁盘 IO 风险;典型应用场景包括多源订单合并(用 UNI

weixin_30470643的博客 569

Oracle数据库与PLSQL Developer安装配置全攻略:从下载到连接排查

关系型数据库是企业级应用的核心基础设施,Oracle以其高可用、高性能和安全性成为金融、电信等行业的首选。然而,本地开发环境的搭建往往让新手却步:安装包庞大、依赖复杂、客户端与图形化工具配置繁琐。理解数据库、客户端、开发工具三者的关系是解决问题的关键——数据库是引擎,Instant Client提供连接驱动,PLSQL Developer则作为操作界面。掌握环境变量(如TNS_ADMIN)与tnsnames.ora的配置原理,能有效规避ORA-12154、ORA-12514等高频错误。本文从Windows环

weixin_34038293的博客 480

(Java)高性能Http框架:OKHttp3的工具类OkHttp3Utils实现(可使用Http代理)

目录前言实现OkHttp3Utils(主类)ProxyDO(代理实体) 前言 网上的类似工具类已经很多了,自己优化了一些,希望大家多多给到意见 实现 OkHttp3Utils(主类) 说明一下几个特殊类,可以在实际使用过程中按需替换 SkynetUtils:封装了公司内部日志系统日志记录功能的实现类(记录日志) EnumSkynetCategoryPublicUtils(记录日志用) EnumS...

SuperWei的博客 4670

Oracle建表不是写语法,而是做架构决策

在关系型数据库中,建表操作本质是定义数据的物理存储、逻辑约束与访问契约。Oracle尤其典型——其CREATE TABLE语句深度耦合字符语义(如NLS_LENGTH_SEMANTICS)、存储参数(PCTFREE、TABLESPACE)、分区策略及安全机制(INHERIT PRIVILEGES),远超MySQL等数据库的简单结构定义。理解VARCHAR2长度单位是字节还是字符、DEFAULT ON NULL与普通DEFAULT的行为差异,直接决定身份证号是否被科学计数法截断、NULL状态字段是否意外失效。

weixin_42535461的博客 188

Oracle分页查询优化与实现方案详解

数据库分页查询是处理大数据量时的核心技术,通过合理分页可以显著提升查询性能和系统稳定性。Oracle数据库提供了多种分页实现方式,包括传统的ROWNUM伪列、ROW_NUMBER()分析函数以及12c引入的OFFSET-FETCH语法。在金融、电商等高并发场景中,优化分页查询能减少90%的内存占用并提升响应速度。关键技术包括索引设计、排序优化和缓存策略,结合ROWNUM与ROW_NUMBER()等方案,可以有效解决千万级数据的分页难题。本文通过实际案例,详解Oracle分页在企业级应用中的最佳实践。

weixin_29306875的博客 293

达梦Oracle数据库自动化生成InsertOrUpdate函数模板实践

在数据库开发与数据迁移领域,SQL自动化生成是提升开发效率的关键技术。其核心原理是通过程序读取数据库元数据(如表结构、字段信息),结合模板引擎动态生成标准化的SQL代码,从而将开发者从重复性劳动中解放出来。这项技术的价值在于显著减少手动编写CRUD操作代码的错误率,并确保代码风格的一致性。在数据同步、批量ETL处理及日常数据库维护等场景中尤为实用。本文聚焦于达梦与Oracle数据库环境,深入探讨如何构建一个能够自动生成InsertOrUpdate(Upsert)函数模板的代码生成器,并详细解析了基于MERG

weixin_30291791的博客 315

Oracle数据库核心架构、性能优化与高可用实战指南

数据库作为现代信息系统的核心,其架构设计与性能优化是保障业务连续性和数据一致性的基石。理解数据库的体系结构,包括内存管理、进程协作和存储机制,是进行高效运维和深度调优的前提。在众多企业级应用中,Oracle数据库凭借其成熟稳定的架构和丰富的功能集,尤其在处理高并发事务和海量数据分析方面展现出独特的技术价值。对于金融、电信等关键领域的核心系统,掌握Oracle的核心原理与实战技巧,能够有效提升系统稳定性与处理性能。本文聚焦于Oracle数据库的实战应用,深入解析其内存结构中的SGA与PGA、进程结构中的LGW

weixin_30876945的博客 432

Oracle DECODE函数深度解析:条件判断的高效语法糖与实战避坑指南

DECODE是Oracle数据库中专用于等值条件判断的内置函数,本质为CASE WHEN的早期替代方案,以函数式调用实现switch-case语义。其核心原理在于编译期确定性匹配与优化器深度内建支持,带来更短SQL长度、更低CPU开销及索引友好型执行计划。技术价值体现在数据清洗、状态映射、条件聚合等高频场景,尤其适合固定枚举值的快速分组与PL/SQL动态计算。本文聚焦DECODE的适用边界——仅支持等值判断(不支持>、BETWEEN、LIKE),详解其与NVL、SUM等函数的链式组合技巧,并揭示隐式类型转换

mxdxm8899的专栏 341

深度篇——图像处理的一些方法(一) 关于 图像处理的三个层次 与 selective search

返回主目录 返回 图像处理的一些方法 目录 下一章:深度篇——图像处理的一些方法(二)细说性能评估 IOU和 GIOU 目录内容 深度篇——图像处理的一些方法(一)关于图像处理的三个层次 与 selective search 深度篇——图像处理的一些方法(二)细说性能评估 IOU和 GIOU 深度篇——图像处理的一些方法(三)细说 HOG特征与bag-o...

天下所弃,不过其纪。世间事,在人,在志。 2917

从MySQL/Oracle迁移到达梦数据库?我用这个图形化工具,半天搞定数据同步(附详细步骤)

本文详细介绍了从MySQL/Oracle平滑迁移到达梦数据库的实战指南,重点分享了达梦自带的DTS数据迁移工具的高效使用方法。通过兼容性矩阵、硬件资源规划和迁移风险评估等准备工作,结合智能映射配置和批量作业调度方案,实现快速、准确的数据迁移。文章还提供了迁移后的关键验证步骤和企业级最佳实践,帮助用户顺利完成数据库迁移任务。

weixin_30832143的博客 400

Ansys Zemax与Speos协同设计:HUD系统从光学优化到驾驶模拟的全流程解析

本文详细解析了如何利用Ansys Zemax与Speos这对“黄金搭档”进行HUD系统的协同设计。流程始于Zemax进行核心光学架构与像差优化,奠定性能基础;随后将设计无缝导入Speos,通过HUD光学分析模块进行量化验证;最终在虚拟驾驶环境中进行沉浸式模拟,评估实际视觉体验与系统集成效果,实现从光学优化到驾驶模拟的全流程闭环。

weixin_29201933的博客 273

RTKLIB模糊度固定实战:三种模式对比与部分模糊度固定代码解析

本文深入解析RTKLIB中模糊度固定的三种核心模式(continuous、instantaneous、fix and hold),对比其性能与适用场景,并详细拆解了部分模糊度固定技术的源码实现。通过实战案例与代码级解析,为GNSS高精度定位开发者提供了在不同数据特性下提升固定成功率的优化思路与配置建议。

efc1234567的博客 473
上一篇: javaweb入门(4)-- 详细了解http协议2
下一篇: java三大框架struts+hibernate+spring学习总结
Sweeter
博客等级 码龄14年 81粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值