行业门户网站案例分析/品牌网络推广外包

行业门户网站案例分析,品牌网络推广外包,网站短信验证码怎么做,客户信息管理请求重定向 一个 web 资源收到客户端请求后,通知客户端去访问另外一个 web 资源,这称之为请求重定向。 使用response对象提供的sendRedirect()方法,可以将网页重定向到另一个页面。SendRedirect()方法的语法格式: response.send…

请求重定向

一个 web 资源收到客户端请求后,通知客户端去访问另外一个 web 资源,这称之为请求重定向。
使用response对象提供的sendRedirect()方法,可以将网页重定向到另一个页面。SendRedirect()方法的语法格式:

response.sendRedirect("aa.jsp");//重定向
// 参数path指的是目标的路径,这个路径可以是相对的,也可以是不同主机的其他URL地址。

该方法把响应连同状态码和新的网页位置发送回浏览器。您也可以通过把 setStatus() 和 setHeader() 方法一起使用来达到同样的效果:

resp.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
//设置302状态码,等同于response.setStatus(302);resp.setHeader("Location", “path");

请求转发

一个 web 资源收到客户端请求后,通知服务器去调用另外一个 web 资源进行处理,这称之为请求转发。
在 Servlet 中实现请求转发的两种方式:
1、通过ServletContext实现请求转发。

this.getServletContext().getRequestDispatcher("/xxx.jsp").forward(request, response);

2、通过request实现请求转发:

request.getRequestDispatcher("/xxx.jsp").forward(request, response);

request对象同时也是一个域对象(Map容器),开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。

请求重定向与转发区别

求重定向与转发的区别主要从以下5点进行了阐述:

1、转发使用的是getRequestDispatcher()方法,重定向使用的是sendRedirect();
2、转发:浏览器URL的地址栏不变,重定向:浏览器URL的地址栏改变;
3、转发是服务器行为,重定向是客户端行为;
4、转发是浏览器只做了一次访问请求,重定向是浏览器做了至少两次的访问请求;
5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失 (request范围)。

Cookie原理及应用

Cookie在HTTP中通常是用来辨别用户身份,进行会话跟踪而储存在用户本地终端上的数据,一般会加密处理,由用户客户端计算机暂时或永久保存的信息。其结构就是一个键和一个值构成的。随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。
Cookie是由服务器创建,然后通过响应发送给客户端的键值对。客户端会保存Cookie,并会标注出Cookie的来源。当客户端向服务器发出请求时会把Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端。
在这里插入图片描述

Cookie机制:

Cookie机制采用的在客户端保持HTTP状态信息的方案。
Cookie会在浏览器访问web服务器某个资源时,web服务器在http响应过程中,消息头中附带传送给浏览器的一个文本文件。一旦web浏览器保存了某个cookie,那么它在以后每次访问web服务器时,都会在HTTP请求中将这个cookie回传给web服务器。
一个cookie只能标识一种信息,它至少有一个标识该信息的名称(NAME)和设置值(VALUE)。
一个web站点可以给一个web浏览器发送多个cookie,一个web浏览器也可存储多个web站点提供的cookie。
cookie 大小上限为4kb。
一个服务器最多在客户端浏览器上保存20个cookie;一个浏览器最多保存3000个cookie。
注意:不同浏览器间是不共享cookie

cookie使用示例
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();Cookie[] cookies = request.getCookies(); // 获取浏览器访问访问服务器时传递过来的cookie数组// 如果用户是第一次访问,那么得到的cookies将是nullif (cookies != null) {out.write("您上次访问的时间是:");for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];if (cookie.getName().equals("lastAccessTime")) {Long lastAccessTime = Long.parseLong(cookie.getValue());Date date = new Date(lastAccessTime);out.write(date.toLocaleString());}}} else {out.write("这是您第一次访问本站!");}    // 用户访问过之后重新设置用户的访问时间,存储到cookie中,然后发送到客户端浏览器Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis() + "");// 将cookie对象添加到response对象中,这样服务器在输出response对象中的内容时就会把cookie也输出到客户端浏览器response.addCookie(cookie);}

在上面的例子中,在程序代码中并没有使用setMaxAge方法设置cookie的有效期,所以当关闭浏览器之后,cookie就失效了,要想在关闭了浏览器之后,cookie依然有效,那么在创建cookie时,就要为cookie设置一个有效期。如下所示:

cookie.setMaxAge(24*60*60);  //以秒为单位
Cookie 的生命

Cookie 的生命就是Cookie在客户端的有效时间,可以通过setMaxAge(int)来设置Cookie的有效时间。以秒为单位,不设置则默认为关闭窗口时Cookie结束。
cookie. setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。
cookie.setMaxAge(60*60):表示cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时;
cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。

删除Cookie

设置cookie.setMaxAge(0),生命等于0是一个特殊的值,它表示cookie被作废。

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");Cookie[] cookies = request.getCookies();for (Cookie cookie : cookies) {if (cookie.getName().equals("author")) {cookie.setMaxAge(0);response.addCookie(cookie);}}}
Cookie中存取中文

Cookie 不允许存储中文,如果要在 Cookie 中存储中文,那么必须使用 URLEncoder 类里面的 encode(String s, String enc) 方法进行中文转码,例如:

Cookie cookie = new Cookie("userName", URLEncoder.encode("软通动力", "UTF-8"));
response.addCookie(cookie);

获取 Cookie 中的中文数据时,再使用URLDecoder类里面的decode(String s, String enc) 进行解码,例如:

URLDecoder.decode(cookies[i].getValue(), "UTF-8");

Session原理及应用

会话管理,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
Servlet中可以把一个会话内需要共享的数据保存到HttSession对象中。四大域对象:PageContext、ServletRequest、HttpSession、ServletContext。
Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。
如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
在这里插入图片描述

首次使用session时,服务器端要创建session,session是保存在服务器端,数据是保存在session中,sessionId通过Cookie发送给客户端,且只在浏览器本次会话中存在,也就是说如果用户关闭了浏览器,那么这个Cookie就丢失。
客户端再次访问服务器时,在请求中会带上sessionId,服务器会通过sessionId找到对应的session,而无需再创建新的session。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
Session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修改。
Session的超时时间也可以在web.xml中修改。另外,通过调用Session的invalidate()方法可以使Session失效。

session使用实例
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");// 使用request对象的getSession()获取session,如果session不存在则创建一个HttpSession session = request.getSession();// 将数据存储到session中session.setAttribute("data", "isoftstone");// 获取session的IdString sessionId = session.getId();// 判断session是不是新创建的if (session.isNew()) {response.getWriter().print("session创建成功,session的id是:" + sessionId);} else {response.getWriter().print("服务器已经存在该session了,session的id是:" + sessionId);}}
删除session

删除Session的原理,其实就是让Session在服务器端失效,我们设置Session 失效的时间,是为了确保在用户长时间不与服务器交互的情况下,可以自动退出登录。这里将介绍三种设置 Session 失效的方法:

1、通过java代码设置

session.setMaxInactiveInterval(30*60;//以秒为单位

2、通过项目的web.xml设置

<session-config><session-timeout>10</session-timeout>
</session-config>

3、通过web容器设置 (Tomcat)
在apache-tomcat-10.1.34\conf\web.xml 中配置session-config信息
注意:如果上述三个地方如果都设置了,有个优先级的问题,从高到低:(1)>(2)>(3)

session和Cookie的区别

1、cookie数据存放在客户的浏览器硬盘上,session数据放在服务器内存上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、Session一旦浏览器关闭,session就失效,cookie设置有效期后,浏览器关闭,不会失效。
5、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

文件上传下载

文件上传实例

jsp页面

<%--file.jsp--%>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head><title>文件上传</title>
</head>
<body>
<form action="fileServlet" enctype="multipart/form-data" method="post"><p>上传文件1<input type="file" name="file1"></p><p>上传文件2<input type="file" name="file2"></p><button>ok</button>
</form>
</body>
</html>

成功跳转页面

<%--success.jsp,上传成功跳转页面--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head><title>success</title>
</head>
<body>
<body>
<%=request.getAttribute("message") %>
</body>
</body>
</html>
基于 @MultipartConfig 注解实现文件上传

从 Servlet 3.0 开始已经提供了基于 @MultipartConfig 注解实现文件上传,而且使用也非常简单。为此,HttpServletRequest 提供了两个方法用于从请求中解析出上传的文件:
Part getPart(String name) // 单文件
Collection getParts() // 多文件

前者用于获取请求中给定 name 的文件,后者用于获取所有的文件。
每一个文件用一个javax.servlet.http.Part 对象来表示。该接口提供了处理文件的简易方法,比如 write()、delete() 等。至此,结合 HttpServletRequest 和 Part 来保存上传的文件变得非常简单,如下所示:

@WebServlet(name ="fileServlet" ,urlPatterns = "/fileServlet")
@MultipartConfig
public class FileServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try{request.setCharacterEncoding("utf-8");Collection<Part> parts = request.getParts();for (Part part : parts) {String filename = part.getSubmittedFileName();String path = request.getServletContext().getRealPath("/file/") + filename;part.write(path);}request.setAttribute("message", "文件上传成功!");}catch (Exception e){request.setAttribute("message", "上传失败,原因:"+e.getMessage());}// 跳转到 message.jspgetServletContext().getRequestDispatcher("/success.jsp").forward(request, response);}
}

1、需要检测文件的上传格式为:enctype="multipart/form-data“
2、需要判断path路径是否存在

文件下载实例

jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>文件下载</title>
</head>
<body><a href="downLoadServlet?fileName=filename.png">下载 文件:filename.png</a>
</body></html>

servlet内容

@WebServlet("/downLoadServlet")
public class DownLoadServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{// 1.获取要下载的文件的绝对路径String realPath = this.getServletContext().getRealPath("/file/");// 2.获取要下载的文件名String fileName = request.getParameter("fileName");// 3.设置content-disposition响应头控制浏览器以下载的形式打开文件response.setHeader("content-disposition", "attachment;filename=" + fileName);//response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // 处理文件名中文乱码// 4.获取要下载的文件输入流InputStream in = new FileInputStream(realPath + fileName);int len = 0;// 5.创建数据缓冲区byte[] buffer = new byte[1024];// 6.通过response对象获取OutputStream流OutputStream out = response.getOutputStream();// 7.将FileInputStream流写入到buffer缓冲区while ((len = in.read(buffer)) > 0) {// 8.使用OutputStream将缓冲区的数据输出到客户端浏览器out.write(buffer, 0, len);}in.close();}
}

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

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

相关文章

信息安全访问控制、抗攻击技术、安全体系和评估(高软42)

系列文章目录 信息安全访问控制、抗攻击技术、安全体系和评估 文章目录 系列文章目录前言一、信息安全技术1.访问控制2.抗攻击技术 二、欺骗技术1.ARP欺骗2.DNS欺骗3.IP欺骗 三、抗攻击技术1.端口扫描2.强化TCP/IP堆栈 四、保证体系和评估1.保证体系2.安全风险管理 五、真题在…

mysql的Innodb最大支持的索引长度是多少,以及索引长度怎么计算

今天正好有空&#xff0c;来讲个之前粉丝经常问的一个知识&#xff0c;就是mysql的Innodb最大支持的索引长度是多少&#xff1f;以及索引长度怎么计算&#xff1f; 一、mysql的innodb引擎&#xff0c;创建索引最大支持的长度是多少字节&#xff1f; 不墨迹&#xff0c;直接说…

SpringBoot过滤器(Filter)的使用:Filter接口、FilterRegistrationBean类配置、@WebFilter注释

1、过滤器(Filter)的介绍 Spring Boot 的过滤器用于对数据进行过滤处理。通过 Spring Boot 的过滤器,程序开发人员不仅可以对用户通过 URL 地址发送的请求进行过滤处理(例如:过滤一些错误的请求或者请求中的敏感词等),而且可以对服务器返回的数据进行过滤处理(例如:压…

C++修炼之路:初识C++

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 引言 …

【STM32MP157系统移植】3.TF-A目录结构

bl1&#xff1a;部分一般不用TFA自带的&#xff0c;而是芯片内部的BOOTROM bl2&#xff1a;更像传统意义的TF-A&#xff0c;TF-A本身 bl31&#xff1a;是ARMV&#xff18;的EL3运行时固件 bl32&#xff1a;OPTEE或者TF-A提供的sp_min bl33&#xff1a;就是uboot 真正需要移…

OpenCV连续数字识别—可运行验证

前言 ​ 文章开始&#xff0c;瞎说一点其他的东西&#xff0c;真的是很离谱&#xff0c;找了至少两三个小时&#xff0c;就一个简单的需求&#xff1a; 1、利用OpenCV 在Windows进行抓图 2、利用OpenCV 进行连续数字的检测。 3、使用C&#xff0c;Qt 3、将检测的结果显示出来 …

shell的模拟实现 ─── linux第16课

在shell的命令行中输入命令,会有两种执行命令的途径 shell自己执行 shell创建子进程(fork ,exit ,waitpid,exec) ,子进程去执行 shell自己执行的命令是自建命令(bulit command) 子进程执行的是非自建命令 第一版只能维护命令行参数表创建子进程, 执行非内建命令 我们先创…

MySQL创建数据库和表,插入四大名著中的人物

一、登录数据库并创建数据库db_ck 二、创建表t_hero 表属性包括&#xff08;id&#xff0c;name&#xff0c;nickname&#xff0c;age&#xff0c;gender&#xff0c;address&#xff0c;weapon&#xff0c;types&#xff09; mysql> create table t_hero(-> id int,-…

静态网页的爬虫(以电影天堂为例)

一、电影天堂的网址&#xff08;url&#xff09; 电影天堂_免费电影_迅雷电影下载_电影天堂网最好的迅雷电影下载网&#xff0c;分享最新电影&#xff0c;高清电影、综艺、动漫、电视剧等下载&#xff01;https://dydytt.net/index.htm 我们要爬取这个页面上的内容 二、代码…

ROS云课三分钟-差动移动机器人导航报告如何撰写-及格边缘疯狂试探

提示词&#xff1a;基于如上所有案例并结合roslaunch teb_local_planner_tutorials robot_diff_drive_in_stage.launch和上面所有对话内容&#xff0c;设计一个差速移动机器人仿真实验&#xff0c;并完成报告的全文撰写。 差速移动机器人导航仿真实验报告 一、实验目的 验证 T…

ACE协议学习1

在多核系统或复杂SoC&#xff08;System on Chip&#xff09;中&#xff0c;不同处理器核心或IP&#xff08;Intellectual Property&#xff09;模块之间需要保持数据的一致性。常用的是ACE协议or CHI。 先对ACE协议进行学习 ACE协议&#xff08;Advanced Microcontroller Bu…

ajax之生成一个ajax的demo示例

目录 一. node.js和express ​二. 使用express创建后端服务 三. 创建前端 一. node.js和express ajax是前端在不刷新的情况下访问后端的技术&#xff0c;所以首先需要配置一个后端服务&#xff0c;可以使用node.js和express。 首先生成一个空项目&#xff0c;新建main目录…

远程登录客户端软件 CTerm 发布了 v4.0.0

有时候我们需要远程登录到 Linux/Unix 服务器&#xff0c;这方面使用最广泛的客户端软件是 PuTTY&#xff0c;不过它是全英文的&#xff0c;而且是单窗口的&#xff0c;有时候显得不那么方便。 CTerm (Clever Terminal) 是一个 Windows 平台下支持 Telnet 和 SSH 协议进行远程…

AFL++安装

学习fuzzing也几天了&#xff0c;今天记录AFL的安装及使用 一、实验环境 虚拟机&#xff1a;ubuntu20.04 当然也可以uname -a去看自己的版本号 二、AFL安装 1.先更新一下工具 sudo apt update2.安装AFL必要的一些依赖&#xff0c;例如编译工具&#xff08;如 build-essen…

【STM32】ADC功能-单通道多通道(学习笔记)

本章结合上一节内容复习更好理解【江协科技STM32】ADC数模转换器-学习笔记-CSDN博客 一、ADC单通道 接线图 ADC初始化 ①RCC开启时钟&#xff0c;包括ADC和GPIO的时钟&#xff0c;另外ADCCLK的分频器也要配置 ②配置GPIO,&#xff0c;把需要用的GPIO配置成模拟输入模式&am…

基于YOLO11深度学习的运动品牌LOGO检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

当前主流的大模型训练与推理框架的全面汇总

以下是当前主流的大模型训练与推理框架的全面汇总 以下是更新后包含 SGLang 的大模型训练与推理框架列表&#xff0c;并对分类和示例进行了优化&#xff1a; 一、通用深度学习推理框架 TensorRT-LLM 特点&#xff1a;NVIDIA推出的针对Transformer类模型的优化框架&#xff0c;支…

[数据分享第七弹]全球洪水相关数据集

洪水是一种常见的自然灾害&#xff0c;在全球范围内造成了极为严重的威胁。近年来&#xff0c;针对洪水事件的检测分析&#xff0c;以及对于洪水灾害和灾后恢复能力的研究日渐增多&#xff0c;也产生了众多洪水数据集。今天&#xff0c;我们一起来收集整理一下相关数据集。&…

Hive-数据倾斜优化

数据倾斜的原因 1&#xff09;key分布不均匀&#xff0c;本质上就是业务数据有可能会存在倾斜 2&#xff09;某些SQL语句本身就有数据倾斜 关键词 情形 后果 Join A、其中一个表较小&#xff0c;但是key集中; B、两张表都是大表&#xff0c;key不均 分发到…

RuleOS:区块链开发的“新引擎”,点燃Web3创新之火

RuleOS&#xff1a;区块链开发的“新引擎”&#xff0c;点燃Web3创新之火 在区块链技术的浪潮中&#xff0c;RuleOS宛如一台强劲的“新引擎”&#xff0c;为个人和企业开发去中心化应用&#xff08;DApp&#xff09;注入了前所未有的动力。它以独特的设计理念和强大的功能特性&…