精华内容
下载资源
问答
  • 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动静分离配置Nginx本地访问测试 Nginx动静分离 ...动静分离,通过中间件将动态请求和静态请求进行分离,分离资源减少不必要的请求消耗,减少请求延迟。 优点:动态分离后及时动...

    Nginx动静分离

    ip 服务器 功能
    192.168.1.17 Nginx Server 处理请求
    47.97.195.105(公网IP)
    192.168.1.16
    Proxy 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. 动态请求

    在这里插入图片描述

    - 静态请求

    在这里插入图片描述

    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&lt;PermissionResult&gt; ...

    最简单动态请求权限仅需四步

    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:09
    Android 6.0 动态请求权限描述:*Android 应用在访问额外的资源或信息时,需要请求相应权限。根据权限的敏感性,系统可能会自动授予权限,或者由用户对请求进行许可。Android6.0及以上应用除了在清单文件中声明权限...
  • 在处理了核心任务之后,我们会发现有些请求并不是都是静态的,那么我们就需要进行实现处理动态请求的要求,如下面代码是我们请求的解决方式,我们只需在HttpRequestImpl实现类中,将如下代码实现具体的判断过程 ...
  • JavaWeb 为a标签添加动态请求参数

    千次阅读 2015-09-23 18:21:14
    JavaWeb 为a标签添加动态请求参数
  • element tree点击动态请求数据

    千次阅读 2019-02-21 11:54:12
    element tree点击动态请求数据 用element 做树结构的时候发现如果要一次性加载所有数据 会很卡,所以就想点击一级菜单加载,我们的最多只有二级,所以我判断是只有二级。如果需要子节点,一定要让后端传children哦 ...
  • Android动态请求权限的工具类 Android 6.0(SDK 23)以上才需要用到动态权限。 之前已经写过好多次关于Android动态权限的文章,但是后期发现每次都要进行复制粘贴,还要修改, 还不如写一个自己的工具类,那就...
  • 简单说明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:02
    android自从更新到6.0之后应用的某些敏感权限变成了动态请求权限 (Dangerous permissions),具体需要动态请求的权限有 CALENDAR READ_CALENDAR, WRITE_CALENDAR CAMERA CAMERA C
  • 动态请求权限无请求弹窗问题

    千次阅读 2019-07-26 11:47:01
    最近在做公司项目的时候,存入相片功能没实现,看了一下发现是没有写入权限,然后我就进行了动态申请权限,发现并没有出现请求权限弹框,我看了下manifest中有写权限, 然后我猜想是我的姿势不对,然后我就换用...
  • vue动态请求数据后swiper不能滑动(失效) 做个笔记: 引入swiper后,起初是静态资源,我把初始化函数放在mounted里面是可以的。当、但时当用了请求获取资源后,这个初始化就不生效了,我的请求是放在created生命...
  • 动态请求权限 权限窗口一闪而过问题记录 起因 最近写demo时,踩了个坑,手动写AndroidManifest.xml中的权限时疏忽了,排查了半天才发现自己给自己挖了坑。 具体原因 写权限时后面不小心留了个空格,如 &amp;lt;...
  • 当浏览器发起一次动态请求,并从服务端返回一个页面时,浏览器会做以下解析: 1、加载DOM结构 2、如找到静态文件引用-加载静态文件(css/image/js.....) 此时,浏览器会对获取到的静态文件资源路径再次发起请求,请求...
  • PHP+FastCGI+Nginx动态请求处理配置

    千次阅读 2014-08-07 10:32:31
     CGI的英文全称为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...
  • 因为笔者之前的游戏需要分享图片,会请求外部储存,第一...如果我们实在想要分享图片或者需要这个权限,那么我们可以不让它在启动的时候弹出,而是点击分享的时候弹出权限(动态请求权限) 首先,屏蔽权限弹窗,AndroidMan...
  • 缓存的作用,一次动态请求经过哪些缓存,浏览器缓存,Webserver缓存,PHP缓存,MySql缓存,分布式缓存,页面缓存smarty
  • 目前做的项目里面有个二维码是动态加载出来的,最初使用vue双向绑定src实现了src能自动请求图片。 html <img :src="src"> js data:{ src:'' }, mounted: function(){ this.src = 'xxxxx/xxxxx/xxx?phoneNum...
  • 在微信小程序中使用echarts动态请求数据更新,不会出现白块 先说说注意点,请求数据后使用this.setState()的回调函数调用setBrOption,不然会出现变量未定义的问题,找了许久bug才终于找到。 在onLoad中进行绑定的时...
  • 代码: ``` 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 ...
  • 欢迎关注”生信修炼手册”!对于静态网页,我们只需要访问对应的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 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,464
精华内容 12,585
关键字:

动态请求