response

Spring MVC的文件上传

喜你入骨 提交于 2020-02-07 02:57:09
一、概述 文件上传时,http请求头Content-Type须为multipart/form-data,有两种实现方式: 1、基于FormData对象,该方式简单灵活 2、基于<form>表单元素,method设为POST,enctype设置为multipart/form-data,在form表单上提交 web容器收到该请求时,须根据请求头将字节流解析为文件对象,spring mvc 提供了MultipartResolver、MultipartFile两个接口用于支持文件上传功能 二、MultipartResolver & MultipartFile 1、MultipartResolver接口提供了文件解析功能,其定义如下: public interface MultipartResolver { boolean isMultipart(HttpServletRequest request); MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException; void cleanupMultipart(MultipartHttpServletRequest request); } Spring MVC使用Apache Commons

爬虫

风格不统一 提交于 2020-02-07 01:19:02
爬虫 什么是爬虫?就是伪造浏览器,下载网页源代码,再从源代码获取需要的数据,一般分为两步: 1、伪造浏览器下载网页(requests模块) 2、对网页的内容进行结构化处理(BeautifulSoup模块) requests模块 安装:pip install requests 下面是这个模块常用到的方法、属性 # 实例化对象,把所有的内容都封装到对象里 response = requests.get(url="https://XXXXXXX") # 获取状态码 print(response.status_code) # 获取文本内容, print(response.text) # 但此文本内容是乱码,因为默认用的是utf8,而此文本用的是gbk # 设置编码 response.encoding = 'gbk' print(response.text) # 获取二进制格式的文本内容 print(response.content) BeautifulSoup模块 安装:pip install BeautifulSoup4 这个模块是对下载的文本内容进行结构化处理的 常用的属性、方法如下: # 把文本传过去,然后用python自带的html解释器处理,进行结构化,返回的是顶级结构 soup = BeautifulSoup(response.text, 'html.parser') #

Node.js- Express框架

寵の児 提交于 2020-02-07 01:10:36
一、Express简介 1.Express是一个简洁而灵活的node.jsWeb应用框架,提供了一系列强大特性帮助你创建各种web应用,和丰富的http工具。 2.使用Express可以快速搭建一个完整功能的网站。 3.Express框架核心特性 1.1 可以设置中间件来响应HTTP请求 1.2 定义来路由表用于执行不同的HTTP请求动作 1.3 可以通过向模版传递参数来动态渲染HTML页面 二、安装Express 以上命令会将Express框架安装在当前目录的node_modules目录中,node_modules目录下会自动创建express目录。 以下几个重要的模块是需要与express框架一起安装的: 1. body-parser - node.js中间件,用于处理JSON,Raw,Text和URL编码的数据。 2. cookie-parser - 这就是一个解析cookie的工具。通过req.cookies可以去到传过来的cookie,并把他们转成对象。 3. multer - node.js中间件,用于处理enctype="multipart/form-data" (设置表单的MIME编码)的表单数据。 三、Express实例 执行结果为: 四、请求和响应 express应用使用回调函数的参数,request和response对象来处理请求和响应的数据。 app.get

CallServerInterceptor拦截器分析

こ雲淡風輕ζ 提交于 2020-02-06 20:21:29
首先看调用接口intercept @Override public Response intercept(Chain chain) throws IOException { RealInterceptorChain realChain = (RealInterceptorChain) chain; //获取HttpCodec HttpCodec httpCodec = realChain.httpStream(); StreamAllocation streamAllocation = realChain.streamAllocation(); RealConnection connection = (RealConnection) realChain.connection(); Request request = realChain.request(); long sentRequestMillis = System.currentTimeMillis(); realChain.eventListener().requestHeadersStart(realChain.call()); //// 发送状态行和头部数据到服务端 httpCodec.writeRequestHeaders(request); realChain.eventListener()

防止表单重复提交

情到浓时终转凉″ 提交于 2020-02-06 17:10:06
情况一:网络延迟,在网络延迟时间内,频繁的提交表单 解决方案: 只能提交一次,监控表单的提交事件,通过一个boolean类型的变量来区分已经点击过还是没有点击,如果已经点击过,表单就不提交,没有点击过再提交 //创建一个变量 false代表没有点击过,true代表已经点击过 var flag=false; function formSubmit() { if(!flag){ //取反值为false //提交过一次,修改标识 flag=true; return true; }else { return false; } } 这样提交过一次后就会一直进else块,return false; 情况二:重新加载或者后退页面 解决方案: 在加载页面的时候,创建一个Token令牌(当作一个标识) ,保存到session当中,然后在表单提交的时候将令牌一起提交 后台Servlet去判断session当中的令牌和表单提交的令牌是否相等,如果相等代表正常提交(并且将session清空),如果不相等,代表非正常提交 表单: <form action="FormServlet" onsubmit="return formSubmit()" method="post"> <%--页面加载时将生成的令牌保存在这个隐藏域中--%> <input type="hidden" id="hiddenToken"

web框架之environment处理

試著忘記壹切 提交于 2020-02-06 16:59:36
从现在开始,我们将一步步完成一个WSGI的WEB框架,从而了解WEB框架的内部机制。 WSGI请求environ处理 WSGI服务器程序会帮我们处理HTTP请求报文,但是提供的environ还是一个用起来不方便的字典。 http://127.0.0.1:9999/python/index.html?id=1234&name=tom ('SERVER_PROTOCOL', 'HTTP/1.1') ('wsgi.url_scheme', 'http') ('HTTP_HOST', '127.0.0.1:9999') ('SERVER_PORT', '9999') ('REMOTE_ADDR', '127.0.0.1') ('REQUEST_METHOD', 'GET') ('CONTENT_TYPE', 'text/plain') ('PATH_INFO', '/python/index.html') ('QUERY_STRING', 'id=1234&name=tom') ('HTTP_USER_AGENT', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.0 Chrome/55.0.2883.75 Safari/537.36') QUERY_STRING 查询字符串的解析

ASP.NET上传文件

妖精的绣舞 提交于 2020-02-06 10:01:32
  上传下载这些东西太经常用到了,总结一下好了。 思路:利用.NET提供的丰富的控件库里的控件:fileUpLoad,文件选择框,然后放置一个确定按钮,操作上传文件,在该确定按钮里做操作:验证文件类型,重写文件名,保存,然后删除同名文件。下载的话:找到文件所在地址,获得服务器所在的物理路径,设置输出类型,指定编码格式,添加到输出流,然后实现下载。 上传:前台页面存在两个控件:fileUpLoad和一个按钮: <asp:FileUpload ID="fuImg" runat="server" CssClass="border" Width="160px" /> <asp:Button ID="BtnEditOK" runat="server" Text=" 完成保存 " OnClick="BtnEditOK_Click" /> 后台代码: protected void BtnEditOK_Click(object sender, EventArgs e) { string[] extens = new string[] { ".jpeg", ".bmp", ".png", ".gif", ".jpg" }; //如果有文件 if (fuFile.HasFile) { string fileName = fuImg.FileName; string ext = Path

同步调用WebService和异步调用WebService

冷暖自知 提交于 2020-02-06 03:51:05
一、异步调用 asynchronous call(异步调用):一个可以无需等待被调用函数的返回值就让操作继续进行的方法 举例:   异步调用就是你 喊 你朋友吃饭 ,你朋友说知道了 ,待会忙完去找你 ,你就去做别的了。   同步调用就是你 喊 你朋友吃饭 ,你朋友在忙 ,你就一直在那等,等你朋友忙完了 ,你们一起去。 二、同步调用异步调用比较 同步调用:   异步调用:   三、jax-ws的同步和异步   在旧的基于JAX-RPC的webservice编程model中,是不支持异步的service 调用的,在最新的Jax-ws webservice 编程model中,加入了对webservice的异步调用的支持。   首先我来讲一下它的原理,大家不要以为在异步的调用下,从client到server 之间的soap message 流也是异步的,其实不是,Soap/Http 协议在同步跟异步的调用下是一样的,都是客户端的service在运行时打开一个connectin,发送请求,然后接收返回,这些都在同一个connection中。这种方式对我们有什么影响呢?从客户端程序的角度来讲,没有影响,客户端的编程模型是由WSDL中的messages跟port types 来定义的,只要这些东西没有改变,request 跟response是不是在同一个Tcp/ip 的session

Django首页显示用户名

二次信任 提交于 2020-02-05 05:39:43
Django首页显示用户名 实现效果图: 编写前端页面: <tr v-if="username"> <td>当前登录用户:[[username]]</td> <td><a href="/logout/">注销</a></td> </tr> <tr v-else="username"> <td><a href="/login/">登录</a></td> <td><a href="/register/">注册</a></td> </tr> vue中需要绑定的变量:[[ username ]] 实现原理: 用户登录之后,保持登录状态,随后在cookie中添加登录信息。 页面重定向到首页时,vue读取cookie。若cookie有用户名信息,则显示已登录状态,若没有,则显示未登录状态。 配置路由: from django.conf.urls import url from . import views urlpatterns = [ url('^$', views.IndexView.as_view()), ] 编写视图函数: from django.shortcuts import render from django.views import View class IndexView(View): def get(self, request): return render

Node.js(1)-helloworld

南楼画角 提交于 2020-02-05 05:06:29
1.Node.Js 环境准备 下载地址: node.js http://nodejs.org/download/ vs.net集成开发环境: Node.js Tools for Visual Studio - Home http://nodejstools.codeplex.com/ 以windows为例,安装完后会在系统PATH环境变量里面初始化默认程序路径, 在命令行cmd 输入: node ex.js 执行 2.Helloworld 打开记事本创建d:\nodejs\helloworld.js var http=require('http'); http.createServer(function(request,response){ response.writeHead(200,{'Content-Type':'text/plain'}); response.end('hello world\n'); }).listen(8101); console.log('server running at http://localhost:8101' ); 运行命令行: 切换到 D:\nodejs 执行 node helloworld.js 会提示: server running at http://localhost:8101 在浏览器 输入 http://localhost