• 关于

    js跳转到两个页面

    的搜索结果

问题

点击超链接后新页面没加载js

小旋风柴进 2019-12-01 20:28:05 1100 浏览量 回答数 1

问题

两个html页面引入同一个js文件,如何共享一个变量?

a123456678 2019-12-01 20:24:42 1621 浏览量 回答数 1

问题

用js/jq/html通过cookie解决一个进入页面的问题

小旋风柴进 2019-12-01 20:22:27 995 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

问题

我对jsp和ajax 一直存在的困惑.

a123456678 2019-12-01 20:22:29 1299 浏览量 回答数 1

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

问题

扫码登录api

赖麦赖 2019-12-01 21:17:26 6738 浏览量 回答数 6

回答

通过一个二维码完成多种第三方支付方式支付的需求: 商户打印一个静态的二维码,顾客用app(比如支付宝、微信、百度钱包)扫这个二维码后,进入商户的一个付款页面,输入金额后,完成支付。 其技术实现方式如下: 第一步:生成二维码 通常线下场景是一个门店一个二维码,因此生成二维码时最好加入门店id参数。可以方便使用统一门店编号定位到是哪个商户的交易,结算给哪个商户,收款成功后通知给哪个商户。一般建议生成二维码的url不要太长,长度越短则生成的二维码识别率越高。 第二步:扫码识别 用户扫码时,可能会有许多种软件来扫,但能够处理支付宝交易的却只有支付宝客户端。因此需要做识别扫码来源并在页面作出提示,引导用户用支付宝扫码。用户用app扫商户的二维码后,其实是用app浏览器打开到商户的页面, 商户页面通过识别浏览器header中的user-agent来判断是哪个app打开的。 常见App浏览器的user-agent 识别关键字: 支付宝: AlipayClient 微信: MicroMessenger 如果识别到不包含AlipayClient,则跳转到错误提示页面,引导用户用支付宝扫码。 支付宝扫码成功后,会将门店id提交到你的服务端,你可以存在session中或放在下一步你的授权回调地址参数中。 第三步:获取用户信息 扫码成功后,需要先获取到扫码用户的userid,不然下一步下单无法进行。 获取用户是使用支付宝的用户信息授权实现。 简单来说分为以下五步实现: 拼接你的授权地址,包含授权范围和回调地址 (授权范围用这个scope=auth_base,回调地址中你可以包含一些参数:如门店id); 让用户浏览器跳转到授权地址,授权后用户浏览器会请求你的redirect_uri回调地址; 授权后你的redirect_uri回调地址会收到auth_code参数; 你使用auth_code参数去换取user_id和access_token (access_token下单接口暂时使用不上,只需要使用user_id值); 使用access_token可以去获取用户授权信息(这一步开发者一般用不上,授权范围为scope=auth_user时使用,可以获取用户更多信息); 以上几个步骤可以参考【网页授权获取用户信息】。 拿到user_id后可以给下一步下单使用。 服务端拿到user_id后,user_id可以存session,也可以返回给用户页面隐藏域表单,并给用户页面显示付款页面。 第四步:下单 由于一码多付方案都是最简便方式,没有收银员输入金额的流程。 所以付款页面需要有输入框让用户填写付款金额,并提交表单发起付款。 目前已有了门店id,付款方userid,交易金额,开发者可以通过门店id在你的系统中查到配置的收款方账号信息。此时使用【统一收单交易创建接口】发起下单,下单成功后,支付宝会返回支付宝交易号,使用【JSAPI唤起收银台支付】让用户付款。 服务端将脚本和订单号组装好返回给用户浏览器,用户支付宝浏览器会自动执行js并唤起收银台,让用户选择付款渠道和输入密码,完成付款。 完成付款后,用户页面会跳转到支付宝统一的付款成功页面 第五步:获取收银结果 服务端获取用户的付款状态有两种方式: 1、轮训查询 服务端发起下单后就异步子线程向支付宝发起【交易查询】请求,每隔5秒查一次,查1-2分钟,一旦查到付款成功则终止,如果超时了还未付款,则发起【交易撤销】请求,避免用户在离店之后付款产生单边账纠纷。 2、异步通知 下单时,根据文档在交易创建接口中传递notify_url公共参数,则付款成功后支付宝会给这个notify_url地址发起回调付款结果。 获取异步通知付款结果可以参考【扫码支付异步通知说明】文档。 第六步:通知收银台服务端获取到付款成功的结果后,需要通知收银员(直接让用户拿手机付款结果给收银员看是有风险的,如:用户拿付款成功的截图欺骗收银员,或用户付款成功但商户未入账。)。 最简单的方式是调用短信接口通知这个门店的收银员。如果你之前没有自建短信发送渠道,可以参考使用 阿里大于短信通知方案

保持可爱mmm 2020-05-06 09:24:54 0 浏览量 回答数 0

回答

Reoss跨域请教。。。知道的朋友帮下忙,谢谢 没人知道么? ------------------------- 回2楼千鸟的帖子 就是公共读 ------------------------- Reoss跨域请教。。。知道的朋友帮下忙,谢谢 你可以理解成为是一个静态网站,只是这个静态网站有两部分,一部分是flash,一部分是html5.当电脑访问的时候,自动识别跳转到flash版本,当为支持html5的设备时,跳转到html5的页面。 我是把首html文件,放在了阿里云ECS上,里面的flash和image、js等文件都放了oss上。当电脑访问(flash)的时候,一切正常,当为手机或平板的时候,提示是文件不允许被读取。。。。 我试过在两台不同的阿里云ECS服务器上的两个不同 域名的站点,实现HTML5跨域调用,设置http头为《 Access-Control-Allow-Origin》,调用一切正常,同样的程序搬到oss上,谷歌的开发人员工具现实: [font=Consolas, 'Lucida Console', monospace]No 'Access-Control-Allow-Origin' header is present on the requested resource.。。。。 [font=Consolas, 'Lucida Console', monospace]这就是需要oss api手册上5.6的那些东西了。。。 [font=Consolas, 'Lucida Console', monospace] [font=Consolas, 'Lucida Console', monospace] [font=Consolas, 'Lucida Console', monospace]只是不知道手册上的api应该怎么用 ------------------------- Reoss跨域请教。。。知道的朋友帮下忙,谢谢 没人知道么?

春秋互动 2019-12-02 00:03:18 0 浏览量 回答数 0

问题

form表单上传图片-提交给php方法,成功后想返回前台一些值,但前台始终无法获取到参数值。

小旋风柴进 2019-12-01 20:10:11 1564 浏览量 回答数 1

回答

$ 我们经常使用向 $ 内传入一个字符串的方式来选择或生成 DOM 元素,但如果这个字符串是来自用户输入的话,那么这种方式就是有风险的。 先看一个 DEMO: http://jsbin.com/duwuzonife/1/edit?html,js,output $("<img src='' onerror='alert();'>"); 当用户输入的字符串是像这样的时,虽然这个 <img> 元素不会马上被插入到网页的 DOM 中,但这个 DOM 元素已经被创建了,并且暂存在内存里。而对于 <img> 元素,只要设置了它的 src 属性,浏览器就会马上请求 src 属性所指向的资源。我们也可以利用这个特性做图片的预加载。在上面的示例代码中,创建元素的同时,也设置了它的属性,包括 src 属性和 onerror 事件监听器,所以浏览器会马上请求图片资源,显然请求不到,随机触发 onerror 的回调函数,也就执行了 JavaScript 代码。 推荐阅读 $ 的官方文档: http://api.jquery.com/jQuery/ 类似的其他方法 .after() .append() .appendTo() .before() .html() .insertAfter() .insertBefore() .prepend() .prependTo() .replaceAll() .replaceWith() .unwrap() .wrap() .wrapAll() .wrapInner() .prepend() 以上这些方法不仅创建 DOM 元素,并且会马上插入到页面的 DOM 树中。如果使用 <script> 标签插入了内联 JS 会立即执行。 不安全的输入来源 document.URL * document.location.pathname * document.location.href * document.location.search * document.location.hash document.referrer * window.name document.cookie document 的大多数属性都可以通过全局的 window 对象访问到。加 * 的属性返回的时编码 (urlencode) 后的字符串,需要解码才可能造成威胁。 不安全的操作 把可以被用户编辑的字符串,用在以下场景中,都是有隐患的。总体来说,任何把字符串作为可执行的代码的操作,都是不安全的。 1.通过字符串创建函数 (1)eval (2)new Function (3)setTimeout/setInterval 2.跳转页面 location.replace/location.assign 修改 <script> 标签的 src 属性 修改事件监听器 总结 如果发生在用 jQuery 时被 DOM-XSS 攻击的情况,大多是因为忽视了两个东西: 1. 在给$传参数时,对参数来源的把控。 2. 用户的输入途径不只有表单,还有地址栏,还可以通过开发者工具直接修改 DOM ,或者直接在控制台执行 JS 代码。 答案来源网络,供参考,希望对您有帮助

问问小秘 2019-12-02 03:05:01 0 浏览量 回答数 0

回答

概述 App() 代表顶层应用,管理所有页面和全局数据,以及提供生命周期回调等。它 也是一个构造方法,生成 App 实例。 一个小程序就是一个 App 实例。 每个小程序顶层一般包含三个文件。  app.json:应用配置  app.js:应用逻辑  app.acss:应用样式(可选) 简单示例 一个简单的 app.json 代码如下: "pages": [ "pages/index/index", "pages/logs/logs" ], "window": { "defaultTitle": "Demo" } } 这段代码配置指定小程序包含两个页面(index 和 logs),以及应用窗口的默认 标题设置为 “Demo”。 一个简单的 app.js 代码如下: onLaunch(options) { // 第一次打开 }, onShow(options) { // 小程序启动,或从后台被重新打开 }, onHide() { // 小程序从前台进入后台 }, onError(msg) { // 小程序发生脚本错误或 API 调用出现报错 console.log(msg); }, globalData: { // 全局数据 name: 'alipay', }, }); 26 app.json 全局配置 app.json 用于对小程序进行全局配置,设置页面文件的路径、窗口表现、多 tab 等。 以下是一个基本配置示例: "pages": [ "pages/index/index", "pages/logs/index" ], "window": { "defaultTitle": "Demo" } } 完整配置项如下: 属性 类型 是否必填 描述 pages Array 是 设置页面路径 window Object 否 设置默认页面的窗 口表现 tabBar Object 否 设置底部 tabbar 的表现 pages app.json 中的 pages 为数组属性,数组中每一项都是字符串,用于指定小程序 的页面。在小程序中新增或删除页面,都需要对 pages 数组进行修改。 pages 数组的每一项代表对应页面的路径信息,其中,第一项代表小程序的首 页。 页面路径不需要写任何后缀,框架会自动去加载同名的 .json、.js、.axml、.acss 文件。举例来说,如果开发目录为: │ ├──index │ │ ├── index.json │ │ ├── index.js │ │ ├── index.axml │ │ └── index.acss │ ├──logs │ │ ├── logs.json │ │ ├── logs.js │ │ └── logs.axml ├── app.json ├── app.js └── app.acss app.json 中应当如下配置: { "pages":[ "pages/index/index", "pages/logs/logs" ] } window window 用于设置小程序的状态栏、导航条、标题、窗口背景色等。 示例代码: { "window":{ "defaultTitle": "支付宝接口功能演示" } } 属性 类型 是否必 填 描述 最低版本 defaultTitle String 否 页面默认标题 - pullRefresh String 否 是否允许下拉刷新。默认 NO, 备注:下拉刷新生效的 前提是 allowsBounceVertical 值 为 YES allowsBounceV ertical String 否 是否允许向下拉拽。默认 YES, 支持 YES / NO 28 transparentTitl e String 否 导航栏透明设置。默认 none,支持 always 一直透 明 / auto 滑动自适应 / none 不透明 titlePenetrate String 否 是否允许导航栏点击穿透。 默认 NO,支持 YES / NO showTitleLoadi ng String 否 是否进入时显示导航栏的 loading。默认 NO,支持 YES / NO titleImage String 否 导航栏图片地址 - titleBarColor HexCol or 否 导航栏背景色,十六进制颜 色值(0-255) - backgroundCol or HexCol or 否 页面的背景色,十六进制颜 色值(0-255) - backgroundIm ageColor HexCol or 否 下拉露出显示的背景图底 色,十六进制颜色值(0- 255) - backgroundIm ageUrl String 否 下拉露出显示的背景图链接 - gestureBack String 否 iOS 用,是否支持手势返 回。默认 NO,支持 YES / NO enableScrollBa r Boolea n 否 Android 用,是否显示 WebView 滚动条。默认 YES,支持 YES / NO onReachBotto mDistance Number 否 页面上拉触底时触发时距离 页面底部的距离,单位为 px。相关文档页面事件处理 函数 1.19.0 ,目前 iOS 在 page.json 下设 置无效,只能全 局设置。 29 tabBar 如果你的小程序是一个多 tab 应用(客户端窗口的底部栏可以切换页面),那么 可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页 面。 注意:  通过页面跳转(my.navigateTo)或者页面重定向(my.redirectTo)所到达的页面,即使 它是定义在 tabBar 配置中的页面,也不会显示底部的 tab 栏。  tabBar 的第一个页面必须是首页。 tabBar 配置项有以下: 属性 类型 是否必填 描述 textColor HexColor 否 文字颜色 selectedColor HexColor 否 选中文字颜色 backgroundColor HexColor 否 背景色 items Array 是 每个 tab 配置 每个 item 配置: 属性 类型 是否必填 描述 pagePath String 是 设置页面路径 name String 是 名称 icon String 否 平常图标路径 activeIcon String 否 高亮图标路径 icon 图标推荐大小为 60×60 px 大小,系统会对传入的非推荐尺寸的图片进行非 等比拉伸或缩放。 示例代码: "tabBar": { 30 "textColor": "#dddddd", "selectedColor": "#49a9ee", "backgroundColor": "#ffffff", "items": [ { "pagePath": "pages/index/index", "name": "首页" }, { "pagePath": "pages/logs/logs", "name": "日志" } ] } } app.acss 全局样式 app.acss 作为全局样式,作用于当前小程序的所有页面。 ACSS 是一套样式语言,用于描述 AXML 的组件样式,决定 AXML 的组件的显 示效果。 为适应广大前端开发者,ACSS 和 CSS 规则完全一致,100% 可以用。同时为更 适合开发小程序,对 CSS 进行了扩充。 ACSS 支持 px,rpx,vh,vw 等单位。 rpx rpx(responsive pixel)可以根据屏幕宽度进行自适应,规定屏幕宽为 750rpx。以 Apple iPhone6 为例,屏幕宽度为 375px,共有 750 个物理像 素,则 750rpx = 375px = 750 物理像素,1rpx = 0.5px = 1 物理像素。 设备 rpx 换算 px(屏幕宽度 / 750) px 换算 rpx(750 / 屏幕宽 度) iPhone5 1rpx = 0.42px 1px = 2.34rpx iPhone6 1rpx = 0.5px 1px = 2rpx iPhone6 Plus 1rpx = 0.552px 1px = 1.81rpx 样式导入 使用 @import 语句可以导入外联样式表,@import 后需要加上外联样式表相对 路径,用;表示结束。 示例代码: .sm-button { padding: 5px; } /** app.acss **/ @import "./button.acss"; .md-button { padding: 15px; } 导入路径支持从 node_modules 目录载入第三方模块,例如 page.acss: @import "./button.acss"; /相对路径/ 32 @import "/button.acss"; /项目绝对路径/ @import "third-party/page.acss"; /第三方 npm 包路径/ 内联样式 组件上支持使用 style、class 属性来控制样式。 style 属性 用于接收动态样式,样式在运行时会进行解析。行内样式不支持!important 优先 级规则。 class 属性 用于接收静态样式,属性值是样式规则中类选择器名(样式类名)的集合,样式类 名不需要带上.,多个类名间以空格分隔。请静态样式写进 class 中,避免将静态 样式写进 style 中,以免影响渲染速度。 选择器 同 CSS3 保持一致。 注意:  .a-, .am- 开头的类选择器为系统组件占用,不可使用。  不支持属性选择器。 全局样式与局部样式  app.acss 中的样式为全局样式,作用于每一个页面。  页面文件夹内的 .acss 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 app.acss 中相同的选择器。 本地资源引用 ACSS 文件里的本地资源引用请使用绝对路径的方式,不支持相对路径引用。例 如: /* 支持 / background-image: url('/images/ant.png'); / 不支持 */ background-image: url('./images/ant.png'); 33 app.js 注册小程序 App(object: Object) App() 用于注册小程序,接受一个 Object 作为属性,用来配置小程序的生命周 期等。 App() 必须在 app.js 中调用,必须调用且只能调用一次。 object 属性说明 属性 类型 描述 触发时机 onLaunch Function 生命周期回调:监 听小程序初始化 当小程序初始化完 成时触发,全局只 触发一次 onShow Function 生命周期回调:监 听小程序显示 当小程序启动,或 从后台进入前台显 示时触发 onHide Function 生命周期回调:监 听小程序隐藏 当当前页面被隐藏 时触发,例如跳 转、按下设备 Home 键离开 onError Function 监听小程序错误 当小程序发生 js 错误时触发 onShareAppMessage Function 全局分享配置 - 前台/后台定义:  小程序用户点击右上角关闭,或者按下设备 Home 键离开支付宝时,小程序并不会直接销 毁,而是进入后台。  当用户再次进入支付宝或再次打开小程序时,小程序会从后台进入前台。  只有当小程序进入后台 5 分钟后,或占用系统资源过高,才会被真正销毁。 onLaunch(object: Object) 及 onShow(object: Object) object 属性说明: 属性 类型 描述 34 query Object 当前小程序的 query,从启动参数的 query 字段解析而来 scene number 启动小程序的 场景值 path string 当前小程序的页面地址,从启动参数 page 字段解析而来,page 忽略时默认为首页 referrerInfo Object 来源信息 比如,启动小程序的 schema url 如下: alipays://platformapi/startapp?appId=1999&query=number%3D1&page=x%2Fy%2 Fz  小程序首次启动时,onLaunch 方法可获取 query、path 属性值。  小程序在后台被用 schema 打开,也可从 onShow 方法中获取 query、path 属性值。 App({ onLaunch(options) { // 第一次打开 console.log(options.query); // {number:1} console.log(options.path); // x/y/z }, onShow(options) { // 从后台被 schema 重新打开 console.log(options.query); // {number:1} console.log(options.path); // x/y/z }, }); referrerInfo 子属性说明: 属性 类型 描述 最低版本 appId string 来源小程序 - sourceServiceId string 来源插件,当处于插件运行模式时可见 1.11.0 35 extraData Object 来源小程序传过来的数据。 - 注意:  不要在 onShow 中进行 redirectTo 或 navigateTo 等操作页面栈的行为。  不要在 onLaunch 里调用 getCurrentPages(),因为此时 page 还未生成。 onHide() 小程序从前台进入后台时触发 onHide() 。 示例代码: App({ onHide() { // 进入后台时 console.log('app hide'); }, }); onError(error: String) 小程序发生脚本错误时触发。 示例代码: App({ onError(error) { // 小程序执行出错时 console.log(error); }, }); onShareAppMessage(object: Object) 全局分享配置。当页面未设置 page.onShareAppMessage 时,调用分享会执行 全局的分享设置,具体见 分享 。 globalData 全局数据 App() 中可以设置全局数据 globalData。 示例代码: // app.js App({ globalData: 1 }); getApp 方法 小程序提供了全局的 getApp() 方法,可获取当前小程序实例,一般用于在子页 面中获取顶层应用。 var app = getApp(); console.log(app.globalData); // 获取 globalData 使用过程中,请注意以下几点:  App() 函数中不可以调用 getApp(),可使用 this 可以获取当前小程序实例。  通过 getApp() 获取实例后,请勿私自调用生命周期回调函数。  请区分全局变量及页面局部变量,比如: // app.js App({ //定义全局变量 globalData,在整个 App 中有效 globalData: 1 }); // a.js // 定义页面局部变量 localValue,只在 a.js 有效 var localValue = 'a'; // 获取 app 实例 var app = getApp(); // 拿到全局数据,并改变它 app.globalData++; // b.js // 定义页面局部变量 localValue,只在 b.js 有效 var localValue = 'b'; // 如果 a.js 先运行,globalData 会返回 2 console.log(getApp().globalData); a.js 和 b.js 两个文件中都声明了变量 localValue,但并不会互相影响,因为各 个文件声明的局部变量和函数只在当前文件下有效。 内容来源:https://developer.aliyun.com/article/756818?spm=a2c6h.12873581.0.dArticle756818.26162b70Su1GZy&groupCode=tech_library

KaFei 2020-04-27 13:54:36 0 浏览量 回答数 0

回答

页面的<a> 是动态生成的. function parseJSON2(data) { var jsonData = JSON.parse( decode64(data.dat)); $.each(jsonData, function(indx, item) { //var content = "<p><a href='/1.1/doGetCityInfoAction.do?method=doGetCityInfo&param="+encode64(JSON.stringify(item))+"'>"+indx+". "+item.name+","+item.distr_name+","+item.code var content = "<p><a href='#'>"+indx+". "+item.name+","+item.distr_name+","+item.code +","+item.distr_code+","+item.post_code+"</a></p>"; //alert(content); //$('table').append(tabContent); $(content).appendTo('#distList');   } 希望点击 每个超链接时候, 执行一个js function(), 可是jQuery做不了 下面这2段代码, 都是不行的. --------------1----------------- /* 点击事件会在超链接跳转前发生 */    $("a").click(function(){     alert(1);        return false;    }); --------------2----------------- $(" a ").each(function(){          alert(1); }); ===== 请教高手, 具体的代码,如需要,请给我发邮件.... ###### --------------1----------------- /* 点击事件会在超链接跳转前发生 */    $("a").click(function(){     alert(1);        return false;    }); --------------2----------------- $(" a ").each(function(){          alert(1); }); ===== 这两段代码要写在你上面发起ajax的闭包内。否则jquery无法识别、 放到$(content).appendTo('#distList'); 后面就可以了! 而且不要用a标签选择器,这样会污染全局,你采用class 来选择比较好点 ###### 你这个操作方法类似google无刷新页面跳转。主要是看点击[getDistInfo]按钮,返回的数据。 1:返回的数据,使用jsp生成返回html数据,(去掉html,head,body)只保留div信息。 2:在这个jsp中写链接的js代码。 另注意,使用<a href="javascript:void(0)"></a>将连接功能失效。 ######因为你下面a标签绑定的click事件是单独的。。把click换成live。试试###### 根据 大家的帮助, 我重新测试了一下, 是闭包的原因,  谢谢你们的支持!!!! ######多谢啦!!!!

kun坤 2020-05-29 13:10:15 0 浏览量 回答数 0

问题

前端小白入门HTML基础 【新手百问合集】

马铭芳 2019-12-01 20:09:03 2532 浏览量 回答数 4

回答

首先是 DNS 查询,如果这一步做了智能 DNS 解析的话,会提供访问速度最快的 IP 地址回来。 DNS DNS 的作用就是通过域名查询到具体的 IP。 因为 IP 存在数字和英文的组合(IPv6),很不利于人类记忆,所以就出现了域名。你可以把域名看成是某个 IP 的别名,DNS 就是去查询这个别名的真正名称是什么。 在 TCP 握手之前就已经进行了 DNS 查询,这个查询是操作系统自己做的。当你在浏览器中想访问 www.google.com 时,会进行一下操作: 操作系统会首先在本地缓存中查询 IP没有的话会去系统配置的 DNS 服务器中查询如果这时候还没得话,会直接去 DNS 根服务器查询,这一步查询会找出负责 com 这个一级域名的服务器然后去该服务器查询 google 这个二级域名接下来三级域名的查询其实是我们配置的,你可以给 www 这个域名配置一个 IP,然后还可以给别的三级域名配置一个 IP 以上介绍的是 DNS 迭代查询,还有种是递归查询,区别就是前者是由客户端去做请求,后者是由系统配置的 DNS 服务器做请求,得到结果后将数据返回给客户端。 PS:DNS 是基于 UDP 做的查询,大家也可以考虑下为什么之前不考虑使用 TCP 去实现。 接下来是 TCP 握手,应用层会下发数据给传输层,这里 TCP 协议会指明两端的端口号,然后下发给网络层。网络层中的 IP 协议会确定 IP 地址,并且指示了数据传输中如何跳转路由器。然后包会再被封装到数据链路层的数据帧结构中,最后就是物理层面的传输了。 在这一部分中,可以详细说下 TCP 的握手情况以及 TCP 的一些特性。 当 TCP 握手结束后就会进行 TLS 握手,然后就开始正式的传输数据。 在这一部分中,可以详细说下 TLS 的握手情况以及两种加密方式的内容。 数据在进入服务端之前,可能还会先经过负责负载均衡的服务器,它的作用就是将请求合理的分发到多台服务器上,这时假设服务端会响应一个 HTML 文件。 首先浏览器会判断状态码是什么,如果是 200 那就继续解析,如果 400 或 500 的话就会报错,如果 300 的话会进行重定向,这里会有个重定向计数器,避免过多次的重定向,超过次数也会报错。 浏览器开始解析文件,如果是 gzip 格式的话会先解压一下,然后通过文件的编码格式知道该如何去解码文件。 文件解码成功后会正式开始渲染流程,先会根据 HTML 构建 DOM 树,有 CSS 的话会去构建 CSSOM 树。如果遇到 script 标签的话,会判断是否存在 async 或者 defer ,前者会并行进行下载并执行 JS,后者会先下载文件,然后等待 HTML 解析完成后顺序执行。 如果以上都没有,就会阻塞住渲染流程直到 JS 执行完毕。遇到文件下载的会去下载文件,这里如果使用 HTTP/2 协议的话会极大的提高多图的下载效率。 CSSOM 树和 DOM 树构建完成后会开始生成 Render 树,这一步就是确定页面元素的布局、样式等等诸多方面的东西 在生成 Render 树的过程中,浏览器就开始调用 GPU 绘制,合成图层,将内容显示在屏幕上了。

前端问答 2019-12-30 12:35:50 0 浏览量 回答数 0

回答

Bootstrap的安装和使用和jQuery差不多,可以进入官网下载页里去查看几种下载方式,为了方便起见,我们只推荐使用cdn和npm(或bower)两种方式,但是考虑到网络状况和对源码的阅读检查,先使用npm下载到本地,然后再去找到需要引用的文件是我们首推的方式。 再Win+R键后输入“cmd”或者“powershell”后进入到命令行模式,输入以下命令安装Bootstrap的第3版。 npm install -g bootstrap@3 或使用淘宝镜像安装: cnpm install -g bootstrap@3 使用npm下载完成之后的Bootstrap的目录大致如下: 而我们需要的是dist这个目录里面的东西 不过一般情况下我们都不太会去使用它的js文件,而只会使用它css相关的东西,我们来看看css和fonts里相关的东西。 <css目录内容> <fonts目录内容> 对于css目录来讲,我们只需要boostrap.css这个文件。而boostrap.min.css是上线选择的版本,由于我们可能会涉及到后期定制,这两个版本可能都不是我们的最终上线版本。带.map的叫做“资源映射”文件,而其它带有theme字样的是主题文件,这些我们都不需要。 fonts目录里面这些文件都是“字体图标”文件,虽然文件比较多,但对同一个浏览器来讲只会去使用其中的一个文件,不同的浏览器支持的格式会有所差别,在这里我们就不用去深究了。 为了让项目最小化,并且要让项目的文件目录竞购更加容易管理,一般我们只需要单独将boostrap.css这个文件和整个fonts目录都放在我们项目中存放“第三方”文件的文件夹里(个人习惯将该文件夹命名为“plugin”),并且替换一下boostrap.css里的“../fonts/”为“./fonts/”即可(替换后前面会少一个点“.”表示相对目录为当前目录) 现在我们需要通过资源管理器或者任意的代码编辑器新建一个基本的项目结构: 在代码编辑器内展开的基本文件结构如图: 然后在我们的index.html文件中引用相关资源: 接下来我们只要打开Boostrap第三版的文档,点击导航“全局CSS样式”(可点击跳转),然后点击右侧导航中的“按钮”→“预定义样式”,然后点击代码右上角的“copy”按钮,回到编辑器标签内粘贴刚才复制的代码,然后运行该页面即可看到代码效果。 <最终效果> 如果在浏览器内看到这些按钮的样式生效了,那恭喜你,你对Bootstrap的引用已经成功了。

问问小秘 2020-04-29 16:13:18 0 浏览量 回答数 0

回答

[上海-java-白夜] 前端跨域用jsonp封装js回调 [健] 天猫和淘宝使用同一个SSO服务器。不管token  cookie 什么机制。同一个标识符,两个网站的辨识逻辑都是一样的**[重庆-后端-谭鹏] **这个标识符是什么呀 肯定的得前端携带了什么东西的在服务端进行鉴别的 不然服务端是怎么确定用户身份的,直到他已经在淘宝登陆过了 [上海-java-白夜] 天猫,淘宝的认证中心都在一起的,cookie信息是在你客户端的,通过请求传到服务器去的localstorage 或者 cookie 的 一个token。 是什么无所谓。重要的是两个网站去同一个地方去校验token  所以结果是一样的。不管你哪个域,服务端的认证中心是同一个,阿里都是中台,怎么可能每个项目一个认证中心,基础服务都统一出来了你用它旗下的网站的服务,用的cookie里面的那个表示你身份的信息key都可以是同一个,你回调的时候把token作为js传过去不就行了,正常情况下,你认证成功,直接会把你的token跟在你要跳转的新页面一起跳转过去**[重庆-后端-谭鹏] 嗯 假设这一次是登陆了淘宝嘛,那我再访问天猫的时候 前端怎么携带淘宝登陆后返回的票据?如果不携带的话 认证服务 肯定就认为你没有登陆[上海-java-白夜] 或者你后端将cros设置一下也是可以跨域接收资源的,这个票据在你的cookie里面,cookie是在你的客户端浏览器储存的[重庆-后端-谭鹏] 哪一个的cookie ?淘宝登陆了的话肯定这个token是存在淘宝域名下的。 天猫怎么能拿到这个token的 这就是我的这个疑问点,还是说前端有这样的技术 可以拿跨主域名的的cookie信息吗[上海-java-白夜] **或者服务器端cros设置一下就可以跨了,或者nginx代理一下也是可以跨的 [深圳-后端-章鱼] 说了半天,不如一张图清楚,关键在第七步,单点登录系统将ticket加载A系统的URL后面,A系统使用过滤器,将ticket写到自己域名下,应该没问题吧[成都-java-creed] 关键是输入用户名成功后,会生成sso认证的cookice,这个cookie就是跨域名访问的关键了[java-刘锦] 这个cookie是全局的?[杭州-后端-xinhe] 不是,每个域名各自维护自己的cookie,通过ticket传递用户身份[java-刘锦****] ticket是全局?[北京-java-犀利豆] ticket只用一次,session是全局的[杭州-后端-xinhe] 是的,我当时做的session各应用独立管理本地部分,但是生命周期会统一管理,全局统一登录登出和保活[深圳-后端-章鱼] 很强,关键就在sso.com认证中心自己的cookie[成都-java-creed] 我认证sso自己的cookie是认证里面的关键,没有这玩不了的[杭州-后端-xinhe] 对,这个把整个流程串起来了 [北京-JAVA-阿轩] 当我访问b系统,ticket哪里来的[成都-java-creed]1 用户在www.a.com正常上网,突然想访问www.b.com,于是发起访问www.b.com的请求。2 www.b.com接收到请求,发现第一次访问,于是给他一个重定向的地址,让他去找认证中心登录。3 浏览器根据返回的地址,发起重定向,因为之前访问过一次了,因此这次会携带上次返回的Cookie:认证中心。4 认证中心收到请求,发现cookie内容能取到对应的认证信息,生成ticket,并且返回给浏览器,让他重定向到www.b.com[北京-java-犀利豆] 登录了a系统 说明 你已经登录了oss。等你登录b的时候,b会让你先到oss那里领一个ticket。你用ticket到b那里验证,验证成功了,b给你种上cookie[北京-JAVA-阿轩] 同一个session去oss索取的ticket是一样的呗[北京-java-犀利豆] @北京-JAVA-阿轩 不一定一样。[深圳-后端-章鱼] session会被状态限制,cookie则是时间限制[北京-JAVA-阿轩] 那b是通过解析ticket来确认是不是a登录过么[北京-java-犀利豆] 用户从oss拿到ticket,然后去b访问,b也会在后端 问一下oss,这个ticket是不是他发的。如果验证成功,b会给用户种上cookie。ticket就可以作废了。这个是后你去c,c会让你先去oss看看有没有ticket,如果有,就回到上面我说的流程。[java-刘锦] 那session干了啥[深圳-后端-章鱼] session只是用于获取token后,各自服务器里存用户的登录状态和权限等,方便后续的访问[北京-JAVA-阿轩] 那单点登录难点,和安全性,是哪里!感觉不难啊,安全也不太安全,窃取到了ticket,不就谁都可以登录了[北京-java-犀利豆] ticket是一次性的。[java-刘锦] 怎么保证一次性[北京-java-犀利豆] 在ticket里面,你可以加上ip之类的标识,加上时间,次数的限制,比ticket只能被校验一次,再来校验就不行了。手机充值卡怎么保证只能充一次,ticket就怎么保证只用一次。 [北京-JAVA-阿轩] 跨域原理是什么[福建-后端-Rule] 浏览器同源策略[北京-java-犀利豆] ticket 你可放在url。或者header里面。就不存在跨越问题[北京-JAVA-阿轩] 这可以避免同源策略么[北京-JAVA-阿轩] 浏览器怎么做到同源策略的,怎么和服务器配合支持和不支持跨域的!跟TCP协议有关么[北京-java-犀利豆] 跨域是浏览器实现的安全策略[北京-JAVA-阿轩] 原来测试的时候,发现前端会有一个预请求!确认,接口无感知!这个是和什么打交道的[北京-java-犀利豆] option?[上海-JAVA开发] 这个一般解决跨服务器请求的,如果程序里面有第三方服务器的话会先发个option探探情况 来源:云原生后端社区https://www.yuque.com/server_mind/answer

montos 2020-04-20 20:44:31 0 浏览量 回答数 0

问题

云虚拟主机开源wordpress安装设置指南

ethnicity 2019-12-01 22:08:02 10760 浏览量 回答数 3

问题

支付宝小程序云训练营优秀学员提问来啦

问问小秘 2020-06-15 15:57:38 159 浏览量 回答数 1

回答

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="10.0.125.15" port="4002" autoBind="100" selectorTimeout="5000" maxThreads="6"/> 不知道楼主解决没? 我也是最近,集群出问题,我已知就是 集群之间的分发? 这个监听接收的 address="10.0.125.15"   看你这个ip 是否不对?  是静态ip ? 或者几个tomcat 不在同一台机器上? 写内网ip 应该就可以 我的也是session 在第一次浏览打开后点了操作后,就丢失,不知道楼主后来解决没? ######我也是出现问题了,也是session变了,但是没有丢失。如果用代码用之前登录时用的session去访问是正常的,但是火狐接到的session变了,出现的原因也和你们不一样。我是在客户端快速点刷新,马上点停止,再刷新发现session变了,但是原来的session使用代码又可以用,证明session没有丢,但是服务端返回了另外一个sessionid ######tomcat配置 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"> <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="5001" selectorTimeout="100" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster> apache配置 ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass /themes ! ProxyRequests Off ProxyPass /oa balancer://app/oa <Proxy balancer://app/> BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1 BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=jvm2 BalancerMember ajp://127.0.0.1:8011 loadfactor=1 route=jvm3 </Proxy> 我做的也是session问题,登录的时候存在session的数据,页面跳转后就取不到了.######呵呵,终于搞定了,在web.xml中添加<distributable/>就可以了!######<distributable/>仅仅添加这个就好?###### <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 33                     tempDir="/tmp/war-temp/" 34                     deployDir="/tmp/war-deploy/" 35                     watchDir="/tmp/war-listen/" 36                     watchEnabled="false"/> 我想问这个是做什么的? ###### 引用来自“shilei990”的评论 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 33                     tempDir="/tmp/war-temp/" 34                     deployDir="/tmp/war-deploy/" 35                     watchDir="/tmp/war-listen/" 36                     watchEnabled="false"/> 我想问这个是做什么的? tomcat7以后得一个新特性,farmwardeployer,在一台web server上部署应用后,其他web server可以通过监听指定的目录进行自动更新部署######我还碰到,同步超时后,重启tomcat的情况呢。tomcat7057,java1.7.0_67######请问解决了吗? 最近使用Nginx + tomcat(两台) session 复制也出现问题了 三月 15, 2017 10:04:08 上午 org.apache.catalina.ha.session.ClusterSessionListener messageReceived 警告: Context manager doesn't exist:localhost# 情况跟你类似

kun坤 2020-06-02 17:36:54 0 浏览量 回答数 0

回答

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="10.0.125.15" port="4002" autoBind="100" selectorTimeout="5000" maxThreads="6"/> 不知道楼主解决没? 我也是最近,集群出问题,我已知就是 集群之间的分发? 这个监听接收的 address="10.0.125.15"   看你这个ip 是否不对?  是静态ip ? 或者几个tomcat 不在同一台机器上? 写内网ip 应该就可以 我的也是session 在第一次浏览打开后点了操作后,就丢失,不知道楼主后来解决没? ######我也是出现问题了,也是session变了,但是没有丢失。如果用代码用之前登录时用的session去访问是正常的,但是火狐接到的session变了,出现的原因也和你们不一样。我是在客户端快速点刷新,马上点停止,再刷新发现session变了,但是原来的session使用代码又可以用,证明session没有丢,但是服务端返回了另外一个sessionid ######tomcat配置 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"> <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="5001" selectorTimeout="100" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster> apache配置 ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass /themes ! ProxyRequests Off ProxyPass /oa balancer://app/oa <Proxy balancer://app/> BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1 BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=jvm2 BalancerMember ajp://127.0.0.1:8011 loadfactor=1 route=jvm3 </Proxy> 我做的也是session问题,登录的时候存在session的数据,页面跳转后就取不到了.######呵呵,终于搞定了,在web.xml中添加<distributable/>就可以了!######<distributable/>仅仅添加这个就好?###### <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 33                     tempDir="/tmp/war-temp/" 34                     deployDir="/tmp/war-deploy/" 35                     watchDir="/tmp/war-listen/" 36                     watchEnabled="false"/> 我想问这个是做什么的? ###### 引用来自“shilei990”的评论 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 33                     tempDir="/tmp/war-temp/" 34                     deployDir="/tmp/war-deploy/" 35                     watchDir="/tmp/war-listen/" 36                     watchEnabled="false"/> 我想问这个是做什么的? tomcat7以后得一个新特性,farmwardeployer,在一台web server上部署应用后,其他web server可以通过监听指定的目录进行自动更新部署######我还碰到,同步超时后,重启tomcat的情况呢。tomcat7057,java1.7.0_67###### 请问解决了吗? 最近使用Nginx + tomcat(两台) session 复制也出现问题了 三月 15, 2017 10:04:08 上午 org.apache.catalina.ha.session.ClusterSessionListener messageReceived 警告: Context manager doesn't exist:localhost# 情况跟你类似

kun坤 2020-06-20 11:30:08 0 浏览量 回答数 0

问题

安卓与iOS百问,开发者系统指南

yq传送门 2019-12-01 20:14:48 27317 浏览量 回答数 26

回答

" <pre class=""brush:xml; toolbar: true; auto-links: false;""><Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="10.0.125.15" port="4002" autoBind="100" selectorTimeout="5000" maxThreads="6"/> 不知道楼主解决没? 我也是最近,集群出问题,我已知就是 集群之间的分发? 这个监听接收的 address="10.0.125.15"   看你这个ip 是否不对?  是静态ip ? 或者几个tomcat 不在同一台机器上? 写内网ip 应该就可以 我的也是session 在第一次浏览打开后点了操作后,就丢失,不知道楼主后来解决没? ######我也是出现问题了,也是session变了,但是没有丢失。如果用代码用之前登录时用的session去访问是正常的,但是火狐接到的session变了,出现的原因也和你们不一样。我是在客户端快速点刷新,马上点停止,再刷新发现session变了,但是原来的session使用代码又可以用,证明session没有丢,但是服务端返回了另外一个sessionid ######tomcat配置 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"> <Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="5001" selectorTimeout="100" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster> apache配置 ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass /themes ! ProxyRequests Off ProxyPass /oa balancer://app/oa <Proxy balancer://app/> BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1 BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=jvm2 BalancerMember ajp://127.0.0.1:8011 loadfactor=1 route=jvm3 </Proxy> 我做的也是session问题,登录的时候存在session的数据,页面跳转后就取不到了.######呵呵,终于搞定了,在web.xml中添加<distributable/>就可以了!######<distributable/>仅仅添加这个就好?###### <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 33                     tempDir="/tmp/war-temp/" 34                     deployDir="/tmp/war-deploy/" 35                     watchDir="/tmp/war-listen/" 36                     watchEnabled="false"/> 我想问这个是做什么的? ###### 引用来自“shilei990”的评论 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 33                     tempDir="/tmp/war-temp/" 34                     deployDir="/tmp/war-deploy/" 35                     watchDir="/tmp/war-listen/" 36                     watchEnabled="false"/> 我想问这个是做什么的? tomcat7以后得一个新特性,farmwardeployer,在一台web server上部署应用后,其他web server可以通过监听指定的目录进行自动更新部署######我还碰到,同步超时后,重启tomcat的情况呢。tomcat7057,java1.7.0_67###### 请问解决了吗? 最近使用Nginx + tomcat(两台) session 复制也出现问题了 三月 15, 2017 10:04:08 上午 org.apache.catalina.ha.session.ClusterSessionListener messageReceived 警告: Context manager doesn't exist:localhost# 情况跟你类似" ![image.png](https://ucc.alicdn.com/pic/developer-

montos 2020-06-02 12:54:51 0 浏览量 回答数 0

回答

你是想要静态资源的权限控制? @Anur回复 @Anur:shiro是啊... springboot和spring毕竟不一样,SpringBoot自己配置了很多信息比如: 自动配置的静态资源:在自动配置类的addResourceHandlers方法中定义了一下静态资源的自动配置     ①类路径文件:把类路径下的/static、/public、/resources和/META-INF/resources文件夹下的静态文件直接映射为/**,可以通过http://localhost:8080/**来访问。     ②webjar:webjar就是将我们常用的脚本框架封装在jar包中的jar包。把webjar的/META-INF/resources/webjars/下的静态资源文件映射为/webjars/**,可以通过http://localhost:8080/webjars/**来访问。     ③自动配置的Formatter和Converter。我们可以看一下WebMvcAutoConfiguration类中的定义addFormatters(FormatterRegistry)方法。从代码中可以看出,只要我们定义了Converter、GenericConverter和Formatter接口的实现类的Bean,这些Bean就会自动注册到SpringMVC中。     ④自动配置的HttpMessageConverter:在WebMvcAutoConfiguration中,我们注册了messageConverters,在configureMessageConverters方法,在这里直接注入了HttpMessageConverter的Bean,而这个Bean是在HttpMessageConverterAutoConfiguration类中定义的,我们自动注册的HttpMessageConverter除了SpringMVC默认的ByteArrayMessageConverter、StringHttpMessageConverter、SourceHttpMessageConverter、ResourceHttpMessageConverter、 AllEncompassingFormHttpMessageConverter外,在我们的HttpMessageConverterAutoConfiguration的自动配置文件里还引入了JacksonHttpMessageConverter Configuration和GsonHttpMessageConverter Configuration,使得我们获得了额外的HttpMessageConverter。         若jackson的jar包在类路径上,则SpringBoot通过JacksonHttpMessageConverters Configuration增加MappingJackson2HttpMessage Converter和MappingJackson2XmlHttpMessage Converter。         若gason的jar包在类路径上,则SpringBoot通过GsonHttpMessageConverter Configuration增加GsonHttpMessage。     ⑤静态首页的支持:把静态index.html文件放置在如下目录:         classpath:META-INF/resources/index.html         classpath:/resources/index.html         classpath:/static/index.html         classpath:/publik/index.html 当我们访问应用根目录http://localhost:8080/时,会直接映射。     自然了如果你想自己增加也是可以的,类似下面的写法就行,自己再改改吧,SpringBoot其实默认有上面的那些了 程序的静态文件(js、css、图片)等需要直接访问,这时我们需要在配置里重写addResourceHandlers方法来实现。@Configuration@EnableWebMvc//1会开启一些默认配置,比如ViewResolver或者MessageConverter等,开启SpringMVC支持,没有这个注释,重写WebMvcConfigurerAdapter无效@EnableScheduling//开始计划任务的支持@ComponentScan("com.wisely.highlight_springmvc4")publicclassMyMvcConfigextendsWebMvcConfigurerAdapter{//2重写其方法可以对SpringMVC进行配置   @Bean   publicInternalResourceViewResolverviewResolver(){      InternalResourceViewResolverviewResolver=newInternalResourceViewResolver();      viewResolver.setPrefix("/WEB-INF/classes/views/");      viewResolver.setSuffix(".jsp");      viewResolver.setViewClass(JstlView.class);      returnviewResolver;   }   /**   *程序的静态文件需要直接访问,重写该方法即可   */   @Override   publicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){      //addResourceLocations指的是文件放置的目录,addResourceHandler指的是对外暴露的访问路径      registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/");//3   }   @Bean   //1配置拦截器的Bean   publicDemoInterceptordemoInterceptor(){      returnnewDemoInterceptor();   }   @Override   publicvoidaddInterceptors(InterceptorRegistryregistry){//2重写addInterceptors方法,注册拦截器      registry.addInterceptor(demoInterceptor());   }   /**   *快捷的ViewController,适用于无任何业务处理,只是简单的页面跳转   */   @Override   publicvoidaddViewControllers(ViewControllerRegistryregistry){      registry.addViewController("/index").setViewName("/index");//快捷的ViewController      registry.addViewController("/toUpload").setViewName("/upload");      registry.addViewController("/converter").setViewName("/converter");      registry.addViewController("/sse").setViewName("/sse");      registry.addViewController("/async").setViewName("/async");   }   /**   *路径匹配参数设置   *在SpringMVC中,路径参数如果带"."的话,"."后面的值将会忽略,重写此方法可以不忽略"."后面的参数   */   @Override   publicvoidconfigurePathMatch(PathMatchConfigurerconfigurer){      configurer.setUseSuffixPatternMatch(false);   }   /**   *文件上传的配置   */   @Bean   publicMultipartResolvermultipartResolver(){      CommonsMultipartResolvermultipartResolver=newCommonsMultipartResolver();      multipartResolver.setMaxUploadSize(1000000);      returnmultipartResolver;   }   /**   *配置自定义的HttpMessageConverter的Bean,在SpringMVC里注册HttpMessageConverter有两个方法   *①configureMessageConverters:重载会覆盖掉SpringMVC默认注册的多个HttpMessageConverter   *②extendMessageConverters:仅添加一个自定义的HttpMessageConverter,不覆盖默认注册的HttpMessageConverter   */   @Override   publicvoidextendMessageConverters(List<HttpMessageConverter<?>>converters){      converters.add(converter());   }   @Bean   publicMyMessageConverterconverter(){      returnnewMyMessageConverter();   }}   继承,重写方法我感觉可行

爱吃鱼的程序员 2020-06-07 22:43:08 0 浏览量 回答数 0

问题

程序员报错QA大分享(1)

问问小秘 2020-06-18 15:46:14 8 浏览量 回答数 1

问题

【CSS学习全家桶】416道CSS热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:24 8458 浏览量 回答数 1

问题

【iOS学习全家桶】190道iOS热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:23 5197 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板