-
android动态请求权限
2018-09-29 09:39:39* 动态请求权限 */ private void requestPermission() { //动态请求权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAG...../** * 动态请求权限 */ private void requestPermission() { //动态请求权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { requestPermissions( new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_READ_EXTERNAL_STORAGE_PERMISSIONS); requestPermissions( new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_WRITE_EXTERNAL_STORAGE); } } }
-
Nginx负载均衡之动态请求与静态请求分离
2018-11-25 00:53:23文章目录Nginx动静分离配置Nginx本地访问测试 Nginx动静分离 ...动静分离,通过中间件将动态请求和静态请求进行分离,分离资源减少不必要的请求消耗,减少请求延迟。 优点:动态分离后及时动...Nginx动静分离
ip 服务器 功能 192.168.1.17 Nginx Server 处理请求 47.97.195.105(公网IP)
192.168.1.16Proxy Server 调度请求 动静分离,通过中间件将动态请求和静态请求进行分离,分离资源减少不必要的请求消耗,减少请求延迟。
优点:动态分离后及时动态服务不可用,但静态资源不会受到影响
配置Nginx
- 利用
Tomcat
服务器处理动态请求
# 准备tomcat [root@proxy /tmp]$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.13/bin/apache-tomcat-9.0.13.tar.gz [root@proxy /tmp]$ scp apache-tomcat-9.0.13.tar.gz root@nginx:/tmp [root@nginx /tmp]$ mkdir /soft/app [root@nginx /tmp]$ tar xf apache-tomcat-9.0.13.tar.gz -C /soft/app/ [root@nginx /etc/nginx/conf.d]$ yum install -y java [root@nginx /soft/app/apache-tomcat-9.0.13/bin]# ./startup.sh Using CATALINA_BASE: /soft/code/apache-tomcat-9.0.13 Using CATALINA_HOME: /soft/code/apache-tomcat-9.0.13 Using CATALINA_TMPDIR: /soft/code/apache-tomcat-9.0.13/temp Using JRE_HOME: /usr Using CLASSPATH: /soft/code/apache-tomcat-9.0.13/bin/bootstrap.jar:/soft/code/apache-tomcat-9.0.13/bin/tomcat-juli.jar Tomcat started. [root@mysql-slave /soft/code/apache-tomcat-9.0.13/bin]#
- 利用
Nginx
处理静态请求
# Nginx(192.168.1.17)服务器配置 [root@nginx /etc/nginx]$ vim conf.d/static.conf server { listen 80; # server_name 47.97.195.105; root /usr/share/nginx/html; index index.html; location / { index index.html; } location ~* .*\.(jpg|png|gif)$ { gzip on; root /usr/share/nginx/html; } } # 静态资源站点 [root@nginx /usr/share/nginx/html]# ls 1.jpg 2.jpg 50x.html index.html # 动态资源站点 [root@nginx /soft/code/apache-tomcat-9.0.13/webapps/ROOT]# vi java.jsp [root@nginx /soft/app/apache-tomcat-9.0.13/webapps/ROOT]$ vi java.jsp <%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.*"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP在页面显示实时时间</title> </head> <body> <% Date d = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String now = df.format(d); %> 我是动态当前时间:<%=now %> <br> </body>
- Nginx反向代理调度请求
# proxy(192.168.1.16)负载均衡器配置 [root@proxy /etc/nginx/conf.d]# vim proxy.conf upstream java_api { server 192.168.1.17:8080; } upstream static { server 192.168.1.17; } server { listen 80; server_name 47.97.195.105; location / { gzip on; proxy_pass http://static; include /etc/nginx/conf.d/proxy_params; } location ~ \.jsp$ { proxy_pass http://java_api; include /etc/nginx/conf.d/proxy_params; } } [root@nginx /etc/nginx/conf.d]$ vim proxy_params proxy_redirect default; # 默认情况下,NGINX在代理请求中重新定义两个头字段“Host”和“Connection” proxy_set_header Host $http_host; # 远程的IP proxy_set_header X-Real-IP $remote_addr; # 远程的IP传递到X-Forwarded-For里,后端服务器获取X-Forwarded-For就可知道谁通过代理请求的 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 要防止将头字段传递给代理服务器,可将其设置为空字符串 proxy_set_header Accept-Encoding ""; # 修改配置后检查配置信息是否正确 [root@nginx /etc/nginx]$ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@nginx /etc/nginx]$ nginx -s reload # 重新加载配置
本地访问测试
[root@localhost ~]# curl -I http://47.97.195.105/index.html HTTP/1.1 200 OK Server: nginx/1.14.1 Date: Sat, 24 Nov 2018 16:20:23 GMT Content-Type: text/html Content-Length: 36 Connection: keep-alive Last-Modified: Sat, 24 Nov 2018 16:00:27 GMT ETag: "5bf9759b-24" Accept-Ranges: bytes [root@localhost ~]# curl -I http://47.97.195.105/java.jsp HTTP/1.1 200 Server: nginx/1.14.1 Date: Sat, 24 Nov 2018 16:21:19 GMT Content-Type: text/html;charset=UTF-8 Connection: keep-alive Set-Cookie: JSESSIONID=28A6F6FB1C1E26139FD4726C6433CAE2; Path=/; HttpOnly [root@localhost /usr/share/nginx/html]# # 此时动态和静态资源都可以访问
1. 动态请求
- 静态请求
- 模拟动态服务故障时
# 停止Tomcat服务器,此时动态请求无法访问 [root@mysql-slave /soft/code/apache-tomcat-9.0.13/bin]# ./shutdown.sh Using CATALINA_BASE: /soft/code/apache-tomcat-9.0.13 Using CATALINA_HOME: /soft/code/apache-tomcat-9.0.13 Using CATALINA_TMPDIR: /soft/code/apache-tomcat-9.0.13/temp Using JRE_HOME: /usr Using CLASSPATH: /soft/code/apache-tomcat-9.0.13/bin/bootstrap.jar:/soft/code/apache-tomcat-9.0.13/bin/tomcat-juli.jar [root@mysql-slave /soft/code/apache-tomcat-9.0.13/bin]#
1. 动态请求已无法访问
- 静态请求仍然可以访问
- 利用
-
简易动态请求权限
2018-06-13 18:09:57最简单动态请求权限仅需四步1.创建Class文件 PermissionReq类 如下public class PermissionReq { private static int sRequestCode = 0; private static SparseArray<PermissionResult> ...最简单动态请求权限仅需四步
1.创建Class文件 PermissionReq类 如下
public class PermissionReq { private static int sRequestCode = 0; private static SparseArray<PermissionResult> sResultArray = new SparseArray<>(); private Object mObject; private String[] mPermissions; private PermissionResult mResult; private PermissionReq(Object object) { mObject = object; } public static PermissionReq with(@NonNull Activity activity) { return new PermissionReq(activity); } public static PermissionReq with(@NonNull Fragment fragment) { return new PermissionReq(fragment); } public PermissionReq permissions(@NonNull String... permissions) { mPermissions = permissions; return this; } public PermissionReq result(@Nullable PermissionResult result) { mResult = result; return this; } public void request() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { if (mResult != null) { mResult.onGranted(); } return; } Activity activity = getActivity(mObject); if (activity == null) { throw new IllegalArgumentException(mObject.getClass().getName() + " is not supported"); } List<String> deniedPermissionList = getDeniedPermissions(activity, mPermissions); if (deniedPermissionList.isEmpty()) { if (mResult != null) { mResult.onGranted(); } return; } int requestCode = genRequestCode(); String[] deniedPermissions = deniedPermissionList.toArray(new String[deniedPermissionList.size()]); requestPermissions(mObject, deniedPermissions, requestCode); sResultArray.put(requestCode, mResult); } public static void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { PermissionResult result = sResultArray.get(requestCode); if (result == null) { return; } sResultArray.remove(requestCode); for (int grantResult : grantResults) { if (grantResult != PackageManager.PERMISSION_GRANTED) { result.onDenied(); return; } } result.onGranted(); } @TargetApi(Build.VERSION_CODES.M) private static void requestPermissions(Object object, String[] permissions, int requestCode) { if (object instanceof Activity) { ((Activity) object).requestPermissions(permissions, requestCode); } else if (object instanceof Fragment) { ((Fragment) object).requestPermissions(permissions, requestCode); } } private static List<String> getDeniedPermissions(Context context, String[] permissions) { List<String> deniedPermissionList = new ArrayList<>(); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { deniedPermissionList.add(permission); } } return deniedPermissionList; } private static Activity getActivity(Object object) { if (object != null) { if (object instanceof Activity) { return (Activity) object; } else if (object instanceof Fragment) { return ((Fragment) object).getActivity(); } } return null; } private static int genRequestCode() { return ++sRequestCode; } }
2.创建接口文件
public interface PermissionResult { void onGranted(); void onDenied(); }
3.在请求的Activity中
private void getPermission() { PermissionReq.with(xxxxActivity.this).permissions(Manifest.permission.ACCESS_COARSE_LOCATION,//定位权限等权限 Manifest.permission.ACCESS_FINE_LOCATION) .result(new PermissionResult() { @Override public void onGranted() { //请求成功 } @Override public void onDenied() { //请求失败 } }) .request(); }
4.重写onRequestPermissionsResult 如下
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); PermissionReq.onRequestPermissionsResult(requestCode, permissions, grantResults); }
-
静态请求和动态请求
2020-05-27 15:16:46静态请求 简单的来说就是html页面的请求。 具体的请求历程: 用户访问一个.html的文件 服务器端接收到请求,该请求到达服务器的内核空间,因为tcp/ip协议工作在内核空间;到达内核空间后,发现访问的是80端口的套...静态请求
简单的来说就是html页面的请求。
具体的请求历程:- 用户访问一个.html的文件
- 服务器端接收到请求,该请求到达服务器的内核空间,因为tcp/ip协议工作在内核空间;到达内核空间后,发现访问的是80端口的套接字,通过路由和相关解码,请求被转到服务器的用户空间,也就是转到了web服务上;
- 请求到达用户空间后,发现请求的是一个文件,然后继续把请求转到内核空间,内核空间通过内核在磁盘上获取对应文件;
- 请求在内核空间获取到对应文件后,把文件返回至用户空间即web服务;
- 请求结果到达用户空间的web服务上后,把结果再通过套接字回到内核空间;
- 内核空间把结果通过网络tcp/ip协议栈返回至客户端。
动态请求
简单来说是.php、.net、.jsp等请求
- 用户发起访问http://www.abc.com/index.php
- 服务器端接收到请求,该请求到达服务器的内核空间,因为tcp/ip协议工作在内核空间;到达内核空间后,发现访问的是80端口的套接字,通过路由和相关解码,请求被转到服务器的用户空间,也就是转到了web服务上;
- 请求到达用户空间后,发现请求的是一个动态页面,然后根据相关协议调用php解释器程序;
- 请求到达php解释器中,把请求转至内核空间从磁盘上获取对应文件;
- 获取到文件后,请求到达用户空间的解释器中执行一遍;
- 解释器把执行结果返回至web服务上,然后解释器进程自行销毁;
- 请求结果到达用户空间的web服务上后,把结果再通过套接字回到内核空间;
- 内核空间把结果通过网络tcp/ip协议栈返回至客户端。
-
Android 6.0 动态请求权限
2016-12-06 08:45:09Android 6.0 动态请求权限描述:*Android 应用在访问额外的资源或信息时,需要请求相应权限。根据权限的敏感性,系统可能会自动授予权限,或者由用户对请求进行许可。Android6.0及以上应用除了在清单文件中声明权限... -
自己的web服务器项目-静态请求和动态请求处理(二)
2016-09-10 13:26:29在处理了核心任务之后,我们会发现有些请求并不是都是静态的,那么我们就需要进行实现处理动态请求的要求,如下面代码是我们请求的解决方式,我们只需在HttpRequestImpl实现类中,将如下代码实现具体的判断过程 ... -
JavaWeb 为a标签添加动态请求参数
2015-09-23 18:21:14JavaWeb 为a标签添加动态请求参数 -
element tree点击动态请求数据
2019-02-21 11:54:12element tree点击动态请求数据 用element 做树结构的时候发现如果要一次性加载所有数据 会很卡,所以就想点击一级菜单加载,我们的最多只有二级,所以我判断是只有二级。如果需要子节点,一定要让后端传children哦 ... -
Android动态请求权限的工具类(可请求多个,并且功能完善)
2018-06-07 22:28:18Android动态请求权限的工具类 Android 6.0(SDK 23)以上才需要用到动态权限。 之前已经写过好多次关于Android动态权限的文章,但是后期发现每次都要进行复制粘贴,还要修改, 还不如写一个自己的工具类,那就... -
简单说明CGI和动态请求是什么
2019-03-19 20:52:36简单说明CGI和动态请求是什么 1. CGI是什么 CGI是common gateway interface的缩写,大家都译作通用网关接口,但很不幸,我们无法见名知意。 我们知道,web服务器所处理的内容都是静态的,要想处理动态内容,需要依赖... -
Android 6.0开始动态请求权限
2016-05-10 21:41:01转载请注明来源: ...动态请求权限从Android 6.0(API 23)开始,允许用户在应用运行时决定是否允许权限,而不是在应用安装的时候。这种方法简化了应用的安装过程,因为用户在安装或更新应用的时候不需要允许权限。 -
android 实现兼容6.0与5.0动态请求权限
2016-09-13 09:30:02android自从更新到6.0之后应用的某些敏感权限变成了动态请求权限 (Dangerous permissions),具体需要动态请求的权限有 CALENDAR READ_CALENDAR, WRITE_CALENDAR CAMERA CAMERA C -
动态请求权限无请求弹窗问题
2019-07-26 11:47:01最近在做公司项目的时候,存入相片功能没实现,看了一下发现是没有写入权限,然后我就进行了动态申请权限,发现并没有出现请求权限弹框,我看了下manifest中有写权限, 然后我猜想是我的姿势不对,然后我就换用... -
vue动态请求数据后swiper不能滑动(失效)
2018-12-28 12:55:16vue动态请求数据后swiper不能滑动(失效) 做个笔记: 引入swiper后,起初是静态资源,我把初始化函数放在mounted里面是可以的。当、但时当用了请求获取资源后,这个初始化就不生效了,我的请求是放在created生命... -
动态请求权限 权限窗口一闪而过问题记录
2018-11-21 10:42:27动态请求权限 权限窗口一闪而过问题记录 起因 最近写demo时,踩了个坑,手动写AndroidManifest.xml中的权限时疏忽了,排查了半天才发现自己给自己挖了坑。 具体原因 写权限时后面不小心留了个空格,如 &lt;... -
随笔:浏览器解析动态请求返回页面过程分析
2017-09-13 18:39:12当浏览器发起一次动态请求,并从服务端返回一个页面时,浏览器会做以下解析: 1、加载DOM结构 2、如找到静态文件引用-加载静态文件(css/image/js.....) 此时,浏览器会对获取到的静态文件资源路径再次发起请求,请求... -
PHP+FastCGI+Nginx动态请求处理配置
2014-08-07 10:32:31CGI的英文全称为Common Gateway Interface(公共网关接口),是Nginx和动态脚本程序的桥梁,Nginx通过FastCGI接口将动态请求发送给FastCGI,FastCGI中的Wrapper进程生成一个线程,将请求交给脚本解释程序执行,然后 -
vue设置动态请求地址
2019-01-11 10:44:45思路:使前端请求接口地址简单化 上代码:在vuex中设置总的接口地址,然后在生产和开发环境下配置不同的地址 export const configUrl = { url: process.env.API_HOST, ws: process.env.API_WS... -
unity+android权限--打开应用不弹权限,动态请求权限
2019-06-29 10:43:00因为笔者之前的游戏需要分享图片,会请求外部储存,第一...如果我们实在想要分享图片或者需要这个权限,那么我们可以不让它在启动的时候弹出,而是点击分享的时候弹出权限(动态请求权限) 首先,屏蔽权限弹窗,AndroidMan... -
关于缓存_一次动态请求经过哪些缓存ppt
2015-04-06 14:49:29缓存的作用,一次动态请求经过哪些缓存,浏览器缓存,Webserver缓存,PHP缓存,MySql缓存,分布式缓存,页面缓存smarty -
img使用src动态请求图片,同时需要设置请求头header的问题
2020-03-22 16:16:37目前做的项目里面有个二维码是动态加载出来的,最初使用vue双向绑定src实现了src能自动请求图片。 html <img :src="src"> js data:{ src:'' }, mounted: function(){ this.src = 'xxxxx/xxxxx/xxx?phoneNum... -
微信小程序使用echarts动态请求数据本人亲测不卡,以及解决字体大小不一致问题
2019-07-27 23:23:08在微信小程序中使用echarts动态请求数据更新,不会出现白块 先说说注意点,请求数据后使用this.setState()的回调函数调用setBrOption,不然会出现变量未定义的问题,找了许久bug才终于找到。 在onLoad中进行绑定的时... -
关于android动态请求权限的问题?
2019-06-11 20:00:14代码: ``` if (ActivityCompat.checkSelfPermission(sActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) !...回调的grantResults参数里面永远是-1,而且没有弹出提示请求权限的窗口,请问是为什么? -
安卓,悬浮窗权限动态请求
2019-07-12 17:41:31示例: AndroidManifest.xml中: <!-- 悬浮窗所需权限 --> <uses-permission android:name="android.permission....在应用悬浮窗展示前,进行悬浮窗权限请求。 package com.ltpay.activity; import ... -
动态网页常用的两种数据加载方式ajax和js动态请求
2020-10-26 20:12:00欢迎关注”生信修炼手册”!对于静态网页,我们只需要访问对应的URL就可以获得全部的数据了,动态网页则没有这么简单。比如以下网站http://q.10jqka.com.cn/zjhhy/d... -
js动态请求后台下载文件
2018-01-29 16:32:13// 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑 xhr.onload = function () { // 请求完成 if (this.status === 200) { // 返回200 var blob = this.response; var reader = new ...
收藏数
31,464
精华内容
12,585