部落格

  • 前端進階筆記之核心基礎知識—那些HTML標籤你熟悉嗎?

    前端進階筆記之核心基礎知識—那些HTML標籤你熟悉嗎?

    目錄

    • 1、交互實現
      • 1.1 meta標籤:自動刷新/跳轉
      • 1.2 title標籤:消息提醒
    • 2、性能優化
      • 2.1 script標籤:調整加載順序提升渲染速度
      • 2.2 link標籤:通過預處理提升渲染速度
    • 3、搜索優化
      • 3.1 meta標籤:提取關鍵信息
      • 3.2 link標籤:減少重複
      • 3.3 延伸內容:OGP(開放圖表協議)
    • 總結

    提到HTML標籤,我們會非常熟悉,開發中經常使用。但我們往往關注更多的是頁面渲染效果及交互邏輯,也就是對用戶可見可操作的部分,比如表單、菜單欄、列表、圖文等。其實還有一些非常重要卻容易忽視的標籤,這些標籤大多數用在頁面頭部head標籤內,雖然對用戶不可見,但如果在某些場景下,比如交互實現、性能優化、搜索優化,合理利用它們可以讓我們在開發中達到事半功倍的效果。

    1、交互實現

    在實現一個功能的時候,我們編寫的代碼越多,不僅開發成本越高,而且代碼的健壯性也越差。因此我們在開發中提倡編碼簡約原則:Less code, less bug

    1.1 meta標籤:自動刷新/跳轉

    meta標籤妙用場景一:假如每隔一分鐘就需要刷新頁面,這個時候就可以用到meta標籤:

    <meta http-equiv="Refresh" content="60">
    

    meta標籤妙用場景二:假如想讓某個頁面在對用戶展示一段時間后,然後跳轉到其他頁面去,也可用到meta標籤:

    <meta http-equiv="Refresh" content="5; URL=page2.html">
    

    上面這行代碼的意思是當前頁面展示5s之後,跳轉到page2.html頁面去。

    1.2 title標籤:消息提醒

    B/S架構有很多優點,比如版本更新方便、跨平台、跨終端,但在處理某些場景時,比如即時通信時,會變得有點麻煩。

    因為前後端通信深度依賴HTTP協議,而HTTP協議採用“請求-響應”模式,這就決定了服務端也只能被動地發送數據。一種低效的解決方案是客戶端通過輪詢機制獲取最新消息(HTML5下可使用WebSocket協議)。

    另外在HTML5標準發布之前,瀏覽器沒有開放圖標閃爍、彈出系統消息之類的接口,因此消息提醒功能實現比較困難。但是我們可以通過修改title標籤來達到類似的效果(HTML5下可使用Web Notifications API彈出系統消息)。

    下面這段代碼,通過定時修改title標籤內容,模擬了類似消息提醒的閃爍效果:

    let msgNum = 1 // 消息條數
    let cnt = 0 // 計數器
    const inerval = setInterval(() => {
      cnt = (cnt + 1) % 2
      if(msgNum===0) {
        // 通過DOM修改title
        document.title += `聊天頁面`
        clearInterval(interval)
        return
      }
      const prefix = cnt % 2 ? `新消息(${msgNum})` : ''
      document.title = `${prefix}聊天頁面`
    }, 1000)
    

    實現效果如下圖所示,可以看到title標籤名稱上有提示文字在閃爍。

    通過模擬消息閃爍,可以讓用戶在瀏覽其他頁面的時候,及時得知服務端返回的消息。

    通過定時修改title標籤內容,除了用來實現閃爍效果之外,還可以製作其他動畫效果,比如文字滾動,但需要注意瀏覽器會對title標籤文本進行去空格操作;還可以將一些關鍵信息显示到標籤上(比如下載時的進度、當前操作步驟),從而提升用戶體驗。

    2、性能優化

    性能優化是前端開發中避不開的問題,性能問題無外乎兩方面原因:渲染速度慢請求時間長。性能優化雖然涉及很多複雜的原因和解決方案,但其實只要通過合理地使用標籤,就可以在一定程度上提升渲染速度,以及減少請求時間。

    2.1 script標籤:調整加載順序提升渲染速度

    由於瀏覽器的底層運行機制,一般情況下,渲染引擎在解析HTML時從上往下執行,若遇到script標籤引用文件,則會暫停解析過程,同時通知網絡線程加載引用文件。
    文件加載完成后,再切換至JavaScript引擎來執行對應代碼,代碼執行完成之後,再切換至渲染引擎繼續渲染頁面。
    即默認情況下,加載HTML的過程主要有四個步驟:

    • 從上往下解析HTML;
    • 碰到script標籤引用文件,暫停解析,同時通知網絡線程加載引用文件;
    • 文件加載完成,切換至JavaScript引擎來執行對應代碼;
    • 代碼執行完成后,再切換至渲染頁面,繼續渲染HTML。

    從這一過程可以看出,頁面渲染過程包含了請求文件以及執行文件的時間,但頁面的首次渲染可能並不依賴這些文件。這些請求和執行文件的動作反而延長了用戶看到頁面的時間,從而降低了用戶體驗。

    為了減少這些時間損耗,可以藉助script標籤的三個屬性來實現:

    • async屬性:立即請求文件,但不阻塞渲染引擎,而是文件加載完成后,再阻塞渲染引擎並立即執行文件內容。
    • defer屬性:立即請求文件,但不阻塞渲染引擎,等到解析完HTML之後再執行文件內容。
    • HTML5標準type屬性,對應值為“module”:讓瀏覽器按照ECMA Script6標準將文件當作模塊進行解析,默認阻塞效果同defer,也可以配合async在請求完成后立即執行。

    通過對比,我們看出,設置defer和type=”module”最推薦,都是在HTML渲染完成后才執行script引用的文件代碼。
    效果圖比較見下面:

    另外注意,當渲染引擎解析HTML遇到script標籤引入文件時,會立即進行一次渲染。

    所以這也就是為什麼構建工具會把編譯好的引用JavaScript代碼的script標籤放入到body標籤底部。因為當渲染引擎執行到body底部時,會先將已解析的內容渲染出來,然後再去請求相應的JavaScript文件。

    如果是內聯腳本(即不通過src屬性引用外部腳本文件直接在HTML中編寫JavaScript代碼的形式),渲染引擎則不會渲染,先執行腳本代碼再渲染頁面。

    我們可以來做個試驗驗證下,第一個測試:在HTML頁面中間引用外部js文件

    <!DOCTYPE html>
    <html lang="en">
        <head><meta charset="UTF-8"><title>引用js腳本</title></head>
        <body>
            <br/><br/><br/><br/><br/>
            <h3>古人學問無遺力,少壯工夫老始成;</h3>
            <script type="text/javascript" src="./test.js"></script>
            <h3>紙上得來終覺淺,絕知此事要躬行。</h3>
        </body>
    </html>
    

    引用外部js腳本test.js:alert('男兒何不帶吳鈎,收取關山五十州');
    效果圖:

    第二個測試:在HTML頁面中間內聯js腳本

    <!DOCTYPE html>
    <html lang="en">
        <head><meta charset="UTF-8"><title>內聯js腳本</title></head>
        <body>
            <br/><br/><br/><br/><br/>
            <h3>古人學問無遺力,少壯工夫老始成;</h3>
            <script type="text/javascript">
                alert('男兒何不帶吳鈎,收取關山五十州');
            </script>
            <h3>紙上得來終覺淺,絕知此事要躬行。</h3>
        </body>
    </html>
    

    效果圖:

    2.2 link標籤:通過預處理提升渲染速度

    在大型單頁應用進行性能優化時,也許會用到按需賴加載的方式來加載對應的模塊。但是如果能合理利用link標籤的rel屬性值來進行預加載,就能進一步提升渲染速度。

    • dns-prefetch:當link標籤的rel屬性值為“dns-prefetch”時,瀏覽器會對某個域名預先進行dsn解析並緩存。這樣,當瀏覽器在請求同域名資源的時候,能省去從域名查詢IP的過程,從而減少時間損耗。下圖是淘寶網設置的dns預解析。
    • preconnect:讓瀏覽器在一個HTTP請求正式發給服務器前預先執行一些操作,這包括dns解析、TLS協商、TCP握手,通過消除往返延遲來為用戶節省時間。
    • prefetch/preload:兩個值都是讓瀏覽器預先下載並緩存某個資源,但不同的是,prefetch可能會在瀏覽器忙時被忽略,而preload則是一定會被預先下載。
    • prerender:瀏覽器不僅會加載資源,還會解析執行頁面,進行預渲染。

    這幾個屬性值恰好反映了瀏覽器獲取文件的過程,它們獲取文件的流程:

    1. 設置dns-prefetch, 然後判斷是否有對dns進行預解析。沒有則進行dns解析,有則執行下一步preconnect;
    2. 執行preconnect, 對ddns、TLS、TCP進行預連接,然後判斷是否已經TCP連接。沒有則進行TCP連接,有則執行下一步prefetch/preload;
    3. 執行prefetch/preload,加載資源文件。然後判斷資源文件是否已經預加載。沒有則進行http進行資源請求下載,有則進行下一步prerender;
    4. 執行prerender, 預渲染頁面。然後判斷預渲染是否成功。沒有預渲染成功則進行渲染,預渲染成功則呈現給用戶看。

    流程圖如下:

    3、搜索優化

    我們寫的前端代碼,除了要讓瀏覽器更好的執行,有時候也要考慮更方便其他程序(如搜索引擎)理解。合理地使用meta標籤和link標籤,恰好能讓搜索引擎更好的理解和收錄我們的頁面。

    3.1 meta標籤:提取關鍵信息

    通過meta標籤可以設置頁面的描述信息,從而讓搜索引擎更好的展示搜索結果。
    比如在百度中搜索“拉勾”,就會發現網站的描述,這些描述信息就是通過meta標籤專門為搜索引擎設置的,目的是方便用戶預覽搜索到的結果。
    為了讓搜索引擎更好的識別頁面,除了描述信息之外還可以使用關鍵字,這樣即使頁面其他地方沒有包含搜索內容,也可以被搜索到(當然搜索引擎有自己的權重和算法,如果濫用關鍵字是會被降權的,比如Google引擎會對堆砌大量相同關鍵詞的網頁進行懲罰,降低它被搜索的權重)。

    當我們搜索關鍵字“垂直互聯網招聘”的時候搜索結果會显示拉勾網的信息,雖然显示的搜索內容上並沒有看到“垂直互聯網招聘”字樣,實際上因為拉勾網頁面中設置了這個關鍵字。
    對應代碼如下:

    <meta content="拉勾,拉勾網,拉勾招聘,拉鈎, 拉鈎網 ,互聯網招聘,拉勾互聯網招聘, 移動互聯網招聘, 垂直互聯網招聘, 微信招聘, 微博招聘, 拉勾官網, 拉勾百科,跳槽, 高薪職位, 互聯網圈子, IT招聘, 職場招聘, 獵頭招聘,O2O招聘, LBS招聘, 社交招聘, 校園招聘, 校招,社會招聘,社招" name="keywords">
    

    3.2 link標籤:減少重複

    有時候為了用戶訪問方便或者出於歷史原因,對於同一個頁面會有多個網址,又或者在某些重定向頁面,比如:https://xx.com/a.html、 https://xx.com/detail?id=abcd,那麼在這些頁面中可以設置:<link href="https://xx.com/a.html" rel="canonical">這樣可以讓搜索引擎避免花費時間抓取重複網頁。不過需要注意的是,它還有個限制條件,那就是指向的網站不允許跨域。
    當然,要合併網址還有其他的方式,比如使用站點地圖,或者在http請求響應頭部添加rel=”canonical”。

    3.3 延伸內容:OGP(開放圖表協議)

    前面說的是HTML5標準的一些標籤和屬性,下面再延伸說一說基於meta標籤擴展屬性值實現的第三方協議—OGP(open graph protocal, 開放圖表協議)。

    OGP是Facebook公司在2010年提出的,目的是通過增加文檔信息來提升社交網頁在被分享時的預覽效果。你只需要在一些分享頁面中添加一些meta標籤及屬性,支持OGP協議的社交網站就會在解析頁面時生成豐富的預覽信息,比如站點名稱、網頁作者、預覽圖片。具體預覽效果會因各個網站而有所變化。

    下面是微信文章支持OGP協議的代碼,可以看到通過meta標籤屬性值聲明了:標題、網址、預覽圖片、描述信息、站點名稱、網頁類型和作者信息。

    總結

    本篇從交互實現、性能優化、搜索優化場景觸發,分別講解了meta標籤、title標籤、link標籤,一級script標籤在這些場景中的重要作用,希望這些內容你都能應用到工作場景中,不再只是了解,而是能夠熟練運用。
    最後在思考一下:你還知道哪些“看不見”的標籤及用法?

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

    ※教你寫出一流的銷售文案?

  • 【Spring】內嵌Tomcat&去Xml&調試Mvc

    菜瓜:今天聽到個名詞“父子容器”,百度了一下,感覺概念有點空洞,這是什麼核武器?

    水稻:你說的是SpringMvc和Spring吧,其實只是一個概念而已,用來將兩個容器做隔離,起到解耦的作用,其中子容器可以拿到父容器的bean,父容器拿不到子容器的。但是SpringBoot出來之後這個概念基本就被淡化掉,沒有太大意義,SpringBoot中只有一個容器了。

    菜瓜:能不能給個demo?

    水稻:可以。由於現在SpringBoot已經大行其道,Mvc你可能接觸的少,甚至沒接觸過。

    • 早些年啟動一個Mvc項目費老鼻子勁了,要配置各種Xml文件(Web.xml,spring.xml,spring-dispather.xml),然後開發完的項目要打成War包發到Tomcat容器中
    • 現在可以直接引入Tomcat包,用main方法直接調起。為了調試方便,我就演示一個Pom引入Tomcat的例子
    • ①啟動類
    • package com.vip.qc.mvc;
      
      import org.apache.catalina.Context;
      import org.apache.catalina.LifecycleException;
      import org.apache.catalina.LifecycleListener;
      import org.apache.catalina.startup.Tomcat;
      import org.springframework.context.annotation.ComponentScan;
      import org.springframework.context.annotation.FilterType;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
      
      /**
       * 參考: * https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet
       * <p>
       * 嵌入tomcat,由Tomcat發起對Spring容器的初始化調用過程
       * <p>
       * - 啟動過程
       * * - Servlet規範,Servlet容器在啟動之後會SPI加載META-INF/services目錄下的實現類並調用其onStartup方法
       * * - Spring遵循規範實現了ServletContainerInitializer接口。該接口在執行時會收集WebApplicationInitializer接口實現類並循環調用其onStartup方法
       * * - 其中AbstractDispatcherServletInitializer
       * * * - 將spring上下文放入ContextLoaderListener監聽器,該監聽會發起對refresh方法的調用
       * * * - 註冊dispatcherServlet,後續會由tomcat調用HttpServletBean的init方法,完成子容器的refresh調用
       * *
       *
       * @author QuCheng on 2020/6/28.
       */
      public class SpringWebStart {
      
          public static void main(String[] args) {
              Tomcat tomcat = new Tomcat();
              try {
                  // 此處需要取一個目錄
                  Context context = tomcat.addContext("/", System.getProperty("java.io.tmpdir"));
                  context.addLifecycleListener((LifecycleListener) Class.forName(tomcat.getHost().getConfigClass()).newInstance());
                  tomcat.setPort(8081);
                  tomcat.start();
                  tomcat.getServer().await();
              } catch (LifecycleException | ClassNotFoundException | IllegalAccessException | InstantiationException e) {
                  e.printStackTrace();
              }
          }
      
      
          static class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
      
              private final static String PACKAGE_PATH = "com.vip.qc.mvc";
      
              @Override
              protected String[] getServletMappings() {
                  return new String[]{"/"};
              }
      
              @Override
              protected Class<?>[] getRootConfigClasses() {
                  // spring 父容器
                  return new Class[]{AppConfig.class};
              }
      
              @Override
              protected Class<?>[] getServletConfigClasses() {
                  // servlet 子容器
                  return new Class[]{ServletConfig.class};
              }
      
              @ComponentScan(value = PACKAGE_PATH,
                      excludeFilters = {
                              @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class),
                              // 避免掃描到加了註解(@Configuration)的子容器
                              @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = ServletConfig.class)})
              static class AppConfig {
              }
      
              @ComponentScan(value = PACKAGE_PATH)
              static class ServletConfig {
              }
          }
      }
    • ②Controller&Service
    • package com.vip.qc.mvc.controller;
      
      import com.vip.qc.mvc.service.ServiceChild;
      import org.springframework.beans.BeansException;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.ApplicationContextAware;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.ResponseBody;
      
      import javax.annotation.Resource;
      
      /**
       * @author QuCheng on 2020/6/28.
       */
      @Controller
      public class ControllerT implements ApplicationContextAware {
      
          @Resource
          private ServiceChild child;
      
          @RequestMapping("/hello")
          @ResponseBody
          public String containter() {
              child.getParent();
              System.out.println("parentContainer");
              return "containter";
          }
      
          @Override
          public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
              System.out.println("子容器" + applicationContext);
              System.out.println("子容器中獲取父容器bean" + applicationContext.getBean(ServiceChild.class));
          }
      }
      
      
      package com.vip.qc.mvc.service;
      
      import com.vip.qc.mvc.controller.ControllerT;
      import org.springframework.beans.BeansException;
      import org.springframework.beans.factory.NoSuchBeanDefinitionException;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.ApplicationContextAware;
      import org.springframework.stereotype.Service;
      
      /**
       * @author QuCheng on 2020/6/28.
       */
      @Service
      public class ServiceChild implements ApplicationContextAware {
      
          //    @Resource
          private ControllerT controllerT;
      
          public void getParent() {
      
              System.out.println(controllerT);
          }
      
          @Override
          public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
              System.out.println("父容器" + applicationContext);
              try {
                  System.out.println("父容器中獲取子容器bean" + applicationContext.getBean(ControllerT.class));
              } catch (NoSuchBeanDefinitionException e) {
                  System.out.println("找不到子容器的bean");
              }
          }
      }

      // 調用
      SpringWebStart的main方法啟動-會有如下打印
      父容器Root WebApplicationContext, started on Sun Jun 28 22:03:52 CST 2020
      找不到子容器的bean
      子容器WebApplicationContext for namespace 'dispatcher-servlet', started on Sun Jun 28 22:03:58 CST 2020, parent: Root WebApplicationContext
      子容器中獲取父容器beancom.vip.qc.mvc.service.ServiceChild@4acfc43a
      
      
    • Demo比較簡單,不過也能反映父子容器的關係

    菜瓜:嗯,效果看到了,能不能講一下啟動過程

    水稻:稍等,我去下載源碼。上面代碼演示中已經提前說明了,父子容器的加載是Tomcat依據Servlet規範發起調用完成的

    • spring-web源碼包的/META-INF中能找到SPI的實際加載類SpringServletContainerInitializer#onStartup()方法會搜集實現WebApplicationInitializer接口的類,並調用其onStartup方法
    • 上面MyWebApplicationInitializer啟動類是WebApplicationInitializer的子類,未實現onStartup,實際調用的是其抽象父類AbstractDispatcherServletInitializer的方法。跟進去 
    • @Override
      public void onStartup(ServletContext servletContext) throws ServletException {
         //① 創建Spring父容器上下文-對象放入ContextLoadListener,後續調起完成初始化,
         super.onStartup(servletContext);
         //② 創建DispatcherServlet對象,後續會由tomcat調用其init方法,完成子容器的初始化工作
         registerDispatcherServlet(servletContext);
      }
      
      // ①進來
      protected void registerContextLoaderListener(ServletContext servletContext) {
          // 此處會回調我們啟動類的getRootConfigClasses()方法 - 父容器配置
          WebApplicationContext rootAppContext = createRootApplicationContext();
          if (rootAppContext != null) {
              ContextLoaderListener listener = new ContextLoaderListener(rootAppContext);
              istener.setContextInitializers(getRootApplicationContextInitializers());
              servletContext.addListener(listener);
          }
          else {
              logger.debug("No ContextLoaderListener registered, as " +
                    "createRootApplicationContext() did not return an application context");
          }
      }
      
      // ②進來
      protected void registerDispatcherServlet(ServletContext servletContext) {
              。。。
          // 此處會回調我們啟動類的getServletConfigClasses()方法 - 子容器配置
          WebApplicationContext servletAppContext = createServletApplicationContext();
              。。。
          // 初始化的dispatcherServlet,會加入Tomcat容器中-後續調用
          // FrameworkServlet#initServletBean()會完成上下文初始化工作
          FrameworkServlet dispatcherServlet = createDispatcherServlet(servletAppContext);
              。。。
      }

    菜瓜:這樣容器就可以用了嗎?

    水稻:是的,這樣就可以直接在瀏覽器上面訪問http://localhost:8081/hello,不過這是一個最簡陋的web項目

    菜瓜:懂了,最簡陋是什麼意思

    水稻:如果我們想加一些常見的Web功能,譬如說攔截器,過濾器啥的。可以通過@EnableWebMvc註解自定義一些功能

    • package com.vip.qc.mvc;
      
      import com.vip.qc.mvc.interceptor.MyInterceptor1;
      import com.vip.qc.mvc.interceptor.MyInterceptor2;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.web.servlet.config.annotation.EnableWebMvc;
      import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
      import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
      
      import javax.annotation.Resource;
      
      /**
       * @author QuCheng on 2020/6/28.
       */
      @Configuration
      @EnableWebMvc
      public class WebMvcConfig implements WebMvcConfigurer {
      
          @Resource
          private MyInterceptor1 interceptor1;
          @Resource
          private MyInterceptor2 interceptor2;
      
          @Override
          public void addInterceptors(InterceptorRegistry registry) {
              registry.addInterceptor(interceptor1).addPathPatterns("/interceptor/**");
              registry.addInterceptor(interceptor2).addPathPatterns("/interceptor/**");
          }
      }
      
      
      
      package com.vip.qc.mvc.interceptor;
      
      import org.springframework.context.annotation.Configuration;
      import org.springframework.web.servlet.HandlerInterceptor;
      import org.springframework.web.servlet.ModelAndView;
      
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      /**
       * @author QuCheng on 2020/6/28.
       */
      @Configuration
      public class MyInterceptor1 implements HandlerInterceptor {
      
          @Override
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
              System.out.println("嘻嘻 我是攔截器1 pre");
              return true;
          }
      
          @Override
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
              System.out.println("嘻嘻 我是攔截器1 post");
          }
      
          @Override
          public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
              System.out.println("嘻嘻 我是攔截器1 after");
          }
      }
      
      
      package com.vip.qc.mvc.interceptor;
      
      import org.springframework.context.annotation.Configuration;
      import org.springframework.web.servlet.HandlerInterceptor;
      import org.springframework.web.servlet.ModelAndView;
      
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      /**
       * @author QuCheng on 2020/6/28.
       */
      @Configuration
      public class MyInterceptor2 implements HandlerInterceptor {
      
          @Override
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
              System.out.println("嘻嘻 我是攔截器2 pre");
              return true;
          }
      
          @Override
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
              System.out.println("嘻嘻 我是攔截器2 post");
          }
      
          @Override
          public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
              System.out.println("嘻嘻 我是攔截器2 after");
          }
      
      } 

    菜瓜:我知道,這裏還有個Mvc請求調用流程和這個攔截器有關。而且這個攔截器不是MethodInterceptor(切面)

    水稻:沒錯,說到這裏順便複習一下Mvc的請求過程

    • 請求最開始都是通過Tomcat容器轉發過來的,調用鏈:HttpServlet#service() -> FrameworkServlet#processRequest() -> DispatcherServlet#doDispather()
    •  1 protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
       2     。。。
       3   processedRequest = checkMultipart(request);
       4   multipartRequestParsed = (processedRequest != request);
       5   // 1.返回一個持有methodHandler(按照URL匹配得出的被調用bean對象以及目標方法)調用鏈(攔截器鏈)對象
       6   mappedHandler = getHandler(processedRequest);
       7   。。。
       8   // 2.按照我們現在寫代碼的方式,只會用到HandlerMethod,其他三種基本不會用
       9   HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
      10   。。。
      11   // 3.前置過濾器 - 順序調用
      12   if (!mappedHandler.applyPreHandle(processedRequest, response)) {
      13       return;
      14   }
      15   // 4.Actually invoke the handler.
      16   mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
      17   。。。
      18     applyDefaultViewName(processedRequest, mv);
      19   // 5.後置過濾器 - 逆序調用
      20   mappedHandler.applyPostHandle(processedRequest, response, mv);
      21   。。。
      22   // 6.處理試圖 - 內部render
      23   processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
      24   }
      25   catch (Exception ex) {
      26      // 異常處理
      27      triggerAfterCompletion(processedRequest, response, mappedHandler, ex);
      28   }
      29       // 異常處理
      30   catch (Throwable err) {
      31      triggerAfterCompletion(processedRequest, response, mappedHandler,
      32                     new NestedServletException("Handler processing failed", err));
      33   }
      34     。。。

       

     菜瓜:這個之前看過不少,百度一大堆,不過還是源碼親切

     

    總結:

    • 目前基本互聯網項目都是SpringBoot起手了,再難遇到SpringMvc的項目,不過熟悉該流程有利於我們更加深刻的理解Ioc容器
    • Mvc攔截器鏈也是日常開發中會用到的功能,順便熟悉一下請求的執行過程

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

    ※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

    ※Google地圖已可更新顯示潭子電動車充電站設置地點!!

    ※帶您來看台北網站建置台北網頁設計,各種案例分享

    ※別再煩惱如何寫文案,掌握八大原則!

  • Postman之API測試使用全指南

    Postman之API測試使用全指南

    Postman

    Postman是一個可擴展的API開發和測試協同平台工具,可以快速集成到CI/CD管道中。旨在簡化測試和開發中的API工作流。

    Postman 工具有 Chrome 擴展和獨立客戶端,推薦安裝獨立客戶端。

    Postman 有個 workspace 的概念,workspace 分 personal 和 team 類型。Personal workspace 只能自己查看的 API,Team workspace 可添加成員和設置成員權限,成員之間可共同管理 API。

    當然我個人使用一般是不登錄的,因為登錄之後會自動將你的測試歷史數據保存到賬戶里,你可以登陸網頁端進行查看。
    因為API的很多數據是很敏感的,有的含有Token,或者就是一些私密信息,雖然Postman自己也強調說這樣很安全,不會私下窺探用戶的信息之類的,但是呢還是至少做一點有效的防範吧,自己不上傳,因為網絡並沒有絕對的安全。
    所以我每次測試之後會將數據(Case)保存在本地,下次使用或者換設備的情況下將數據拷貝過來又可以繼續使用了。

    下面正式開始介紹如何使用Postman吧。

    為什麼選擇Postman?

    如今,Postman的開發者已超過1000萬(來自官網),選擇使用Postman的原因如下:
    簡單易用 – 要使用Postman,你只需登錄自己的賬戶,只要在電腦上安裝了Postman應用程序,就可以方便地隨時隨地訪問文件。
    使用集合 – Postman允許用戶為他們的API調用創建集合。每個集合可以創建子文件夾和多個請求。這有助於組織測試結構。
    多人協作 – 可以導入或導出集合和環境,從而方便共享文件。直接使用鏈接還可以用於共享集合。
    創建環境 – 創建多個環境有助於減少測試重複(DEV/QA/STG/UAT/PROD),因為可以為不同的環境使用相同的集合。這是參數化發生的地方,將在後續介紹。
    創建測試 – 測試檢查點(如驗證HTTP響應狀態是否成功)可以添加到每個API調用中,這有助於確保測試覆蓋率。
    自動化測試 – 通過使用集合Runner或Newman,可以在多個迭代中運行測試,節省了重複測試的時間。
    調試 – Postman控制台有助於檢查已檢索到的數據,從而易於調試測試。
    持續集成——通過其支持持續集成的能力,可以維護開發實踐。

    如何下載安裝Postman?

    Step 1) 官網主頁:https://www.postman.com/downloads/, 下載所需版本進行安裝即可。

    Step2)安裝完成之後會要求你必須登錄才能使用,沒有賬號可以進行註冊,註冊是免費的。(也可使用Google賬號,不過基本不能登錄,你懂的)

    Step3)在Workspace選擇你要使用的工具並點擊“Save My Preferences”保存。

    Step4)你將看到啟動后的頁面如下

    如何使用Postman?

    下圖是Postman的工作區間,各個模塊功能的介紹如下:

    1、New,在這裏創建新的請求、集合或環境;還可以創建更高級的文檔、Mock Server 和 Monitor以及API。
    2、Import,這用於導入集合或環境。有一些選項,例如從文件,文件夾導入,鏈接或粘貼原始文本。
    3、Runner,可以通過Collection Runner執行自動化測試。後續介紹。
    4、Open New,打開一個新的標籤,Postman窗口或Runner窗口。
    5、My Workspace – 可以單獨或以團隊的形式創建新的工作區。
    6、Invite – 通過邀請團隊成員在工作空間上進行協同工作。
    7、History – 所有秦秋的歷史記錄,這樣可以很容易地跟蹤你所做的操作。
    8、Collections – 通過創建集合來組織你的測試套件。每個集合可能有子文件夾和多個請求。請求或文件夾也可以被複制。
    9、Request tab – 這將显示您正在處理的請求的標題。默認對於沒有標題的請求會显示“Untitled Request”。
    10、HTTP Request – 單擊它將显示不同請求的下拉列表,例如 GET, POST, COPY, DELETE, etc. 在測試中,最常用的請求是GET和POST。
    11、Request URL – 也稱為端點,显示API的URL。.
    12、Save – 如果對請求進行了更改,必須單擊save,這樣新更改才不會丟失或覆蓋。
    13、Params – 在這裏將編寫請求所需的參數,比如Key – Value。
    14、Authorization – 為了訪問api,需要適當的授權。它可以是Username、Password、Token等形式。
    15、Headers – 請求頭信息
    16、Body – 請求體信息,一般在POST中才會使用到
    17、Pre-request Script – 請求之前 先執行腳本,使用設置環境的預請求腳本來確保在正確的環境中運行測試。
    18、Tests – 這些腳本是在請求期間執行的。進行測試非常重要,因為它設置檢查點來驗證響應狀態是否正常、檢索的數據是否符合預期以及其他測試。
    19、Settings – 最新版本的有設置,一般用不到。

    如何處理GET請求

    Get請求用於從指定的URL獲取信息,不會對端點進行任何更改。
    在這裏我們使用如下的URL作為演示:

    https://jsonplaceholder.typicode.com/users	
    

    在Postman的工作區中:
    1、選擇HTTP請求方式為GET
    2、在URL區域輸入 鏈接
    3、點擊 “Send”按鈕
    4、你將看到下方返回200狀態碼
    5、在正文中應該有10個用戶結果,表明您的測試已經成功運行。

    注意:在某些情況下,Get請求失敗可能由於URL無效或需要身份驗證。

    如何處理POST請求

    Post請求與Get請求不同,因為存在用戶向端點添加數據的數據操作。使用之前GET 請求中相同數據,現在添加我們自己的用戶。
    Step 1)創建一個新請求

    Step 2 )在新請求中
    1、選擇HTTP請求方式為GET
    2、在URL區域輸入 鏈接:https://jsonplaceholder.typicode.com/users
    3、切換到Body選項

    Step 3) Body選項
    1、選中raw選項
    2、選擇JSON

    Step 4) 複製前面GET請求返回的json內容的第一節
    更改id為11,更改name以及uesrname和email

    [
        {
            "id": 11,
            "name": "Krishna Rungta",
            "username": "Bret",
            "email": "Sincere@april.biz
    	",
            "address": {
                "street": "Kulas Light",
                "suite": "Apt. 556",
                "city": "Gwenborough",
                "zipcode": "92998-3874",
                "geo": {
                    "lat": "-37.3159",
                    "lng": "81.1496"
                }
            },
            "phone": "1-770-736-8031 x56442",
            "website": "hildegard.org",
            "company": {
                "name": "Romaguera-Crona",
                "catchPhrase": "Multi-layered client-server neural-net",
                "bs": "harness real-time e-markets"
            }
        }
    ]
    

    注意: 檢查Body里用到的JSON格式很重要,以確保數據正確。
    檢測的工具比如:https://jsonformatter.curiousconcept.com/

    Step 5 )發送請求
    1、完成上述的信息輸入,點擊Send按鈕
    2、Status:應該是201,显示為創建成功
    3、在Body里返回數據

    如何將請求參數化

    數據參數化是Postman最有用的特徵之一。你可以將使用到的變量進行參數化,而不是使用不同的數據創建相同的請求,這樣會事半功倍,簡潔明了。
    這些數據可以來自數據文件環境變量。參數化有助於避免重複相同的測試,可用於自動化迭代測試。

    參數通過使用雙花括號創建:{{sample}}
    比如下面的請求:

    接下來創建一個參數化get請求:
    Step 1) 創建一個參數化get請求
    1、將HTTP請求設置為GET
    2、輸入URL: https://jsonplaceholder.typicode.com/users;將鏈接的域名部分替換為參數,例如{{url}}。請求url現在應該是{{url}}/users。
    3、點擊Send按鈕。
    應該沒有響應,因為我們沒有設置參數的源,如下圖:

    Step 2) 使用環境設置所需的參數
    1、點擊眼睛圖標
    2、單擊Edit將該變量設置為可在所有集合中使用的全局環境。

    Step 3) 變量–variable
    1、將名稱設置為url,該url為https://jsonplaceholder.typicode.com
    2、點擊保存按鈕

    Step 4) 如果看到下面截圖的樣式,請單擊Close

    Step 5 ) 回到你的Get請求頁面,然後單擊發送Send按鈕,Get請求應該就會返回結果了,如下圖:

    注意:請確保所有的參數都有準確的源數據,不管是環境變量還是數據文件,以避免出錯。

    如何創建Postman Tests

    Postman Tests在請求中添加JavaScript代碼來協助驗證結果,如:成功或失敗狀態、預期結果的比較等等。
    通常從pm.test開始。它可以與斷言相比較,驗證其他工具中可用的命令。
    接下來創建一個包含Tests的請求:
    Step 1) 創建一個Get請求
    1、切換到Tests選項,右邊是代碼片段選項。
    2、從右邊的代碼片段選項裏面選中 “Status code: Code is 200”
    3、JS代碼就自動出現在窗口中

    Step 2) 點擊發送請求按鈕。測試結果就显示出來了,如下圖:

    Step 3) 回到Tests選項卡,讓我們添加另一個測試。這次我們將比較預期結果和實際結果。
    在右邊的SNIPPETS區域選擇”Response body:JSON value check”選項,我們將檢查Leanne Graham是否擁有userid 1。

    Step 4)
    1、將代碼中的“Your Test Name”替換為“Check if user with id1 is Leanne Graham”,以便測試名稱確切描述我們想測試的內容。
    2、使用jsonData[0].name代替jsonData.value; 獲取路徑,在獲取結果之前檢查Body。因為Leanne Graham是userid 1,所以jsonData在第一個結果中,這個結果應該從0開始。如果你想獲得第二個結果,那麼對後續結果使用jsonData[1] 即可。
    3、在eql中,輸入“Leanne Graham”

    pm.test("Check if user with id1 is Leanne Graham", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData[0].name).to.eql("Leanne Graham");
    });
    

    Step 5) 點擊發送請求,可以看到你的請求之後測試結果中有兩項显示測試通過。

    注意:
    有不同種類的測試可以在Postman中創建。嘗試探索這個工具,看看哪些測試適合你實際測試。

    如何創建測試集合

    集合在組織測試套件中扮演着重要的角色。它可以被導入和導出,使得在團隊之間共享集合變得很容易。在本教程中,我們將學習如何創建和執行集合。

    Step 1) 單擊頁面左上角的New按鈕,如下圖:

    Step 2) 選擇Collection(集合). 創建collection窗口彈出,如下圖.

    Step 3) 輸入所需的集合名稱和描述,然後單擊create。
    現在已經創建了一個集合。

    Step 4 ) 和前面的Get請求一樣,點擊保存。

    Step5 )
    1、選擇Postman 測試集合(Test Collection)。
    2、點擊保存Postman Test Collection

    Step 6) Postman test collection現在應該包含了一個請求,如下圖:

    Step 7) 重複上述的Step4-5,繼續創建請求,這樣,測試集合就應該有2個請求了,如下圖。

    如何使用Collection Runner 運行集合

    有兩種方式來運行一個集合,即Collection Runner和Newman。
    Collection Runner:
    Step 1) 單擊頁面頂部導入按鈕旁邊的Runner按鈕,如下圖。

    Step 2)Collection Runner頁面應該出現如下所示。以下是對各個字段的描述

    Step 3) 做如下設置,運行你的測試集合

    • 選擇Postman測試集合-集合迭代次數為3
    • 設置延遲為2500毫秒
    • 點擊Start Run按鈕

      Step 4) 單擊Run按鈕后將显示Run結果頁。根據延遲的不同,你應該在測試執行的同時看到显示的結果。

    1、一旦測試完成,你就可以看到測試狀態是通過還是失敗,以及每個迭代的結果。
    2、你將看到Get請求的Pass狀態;
    3、由於我們沒有任何Post測試,所以應該會出現請求沒有任何測試的消息。

    可以出在請求中進行測試是多麼重要,這樣你就可以驗證HTTP請求狀態是否成功,以及是否創建或檢索了數據。

    如何使用Newman運行集合

    運行集合的另一種方式是通過Newman。Newman和Collection Runner之間的主要區別如下:
    1、Newman是Postman的替代品,所以需要單獨安裝Newman;
    2、Newman使用命令行,而Collection Runner使用UI界面;
    3、Newman可以用於持續集成。

    安裝Newman並運行Collection,步驟如下:
    Step 1) 下載並安裝NodeJs: http://nodejs.org/download/
    Step 2) 打開命令行窗口並輸入下面命令:

    npm install -g newman
    

    安裝后 如下圖:

    Step 3 )
    Newman安裝好之後,讓我們回到Postman的workspace。在Collections框中,單擊三個點 會出現新的選擇選項,可看到Export選項,如下圖:

    Step 4 )
    選擇導出集合,默認使用推薦的集合版本,比如此處是v2.1,然後單擊導出:

    Step 5 ) 選擇你想要保存的地址之後點擊保存,這裏建議專門新建一個文件夾來存放你的Postman tests。
    Step 6 ) 另外還需要導出我們的環境(enviroment)。單擊全局環境下拉菜單旁邊的eye圖標,選擇JSON格式下載。選擇你想要的位置,然後單擊Save。最好將環境放在與Step5 導出的集合相同的文件夾中。

    Step 7 ) 導出Environment 到集合文件夾后,現在回到命令行,將目錄更改為保存集合和環境的位置。

    cd C:\Users\Asus\Desktop\Postman Tests
    

    Step 8 ) 使用下面的命令運行你的測試集合:

    newman run PostmanTestCollection.postman_collection.json -e Testing.postman_globals.json
    

    運行的結果應該如下圖:

    關於Newman的一些基礎指導如下:
    1、只運行集合(如果沒有環境或測試數據文件依賴關係,則可以使用此選項。)

    newman run <collection name> 
    

    2、運行集合和環境(參數-e 是environment)

    newman run <collection name> -e <environment name> 
    

    3、使用所需的編號運行集合的迭代。

    newman run <collection name> -n <no.of iterations>
    

    4、運行數據文件

    newman run <collection name> --data <file name>  -n <no.of iterations> -e <environment name> 
    

    5、設置延遲時間。(這一點很重要,因為如果由於請求在後台服務器上,完成前一個請求時沒有延遲時間直接啟動下一個請求,測試可能會失敗。)

    newman run <collection name> -d <delay time>
    

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    南投搬家前需注意的眉眉角角,別等搬了再說!

    新北清潔公司,居家、辦公、裝潢細清專業服務

  • 四周年:聊聊測試工程師的核心競爭力

    四周年:聊聊測試工程師的核心競爭力

    寫博客四周年,習慣每年這個時候做一次總結回顧。這次,就聊聊工作幾年以來,我個人對核心競爭力的一些思考和認知。。。

    往期傳送門

    一周年:聊聊寫博客這件事

    兩周年:聊聊這一年的成長

    三周年:聊聊近期目標和計劃

     

    核心競爭力,各人有各人的想法。且在不同階段、不同企業、不同時期有不同的視角,無法一一而足。以我個人角度來說:核心競爭力實際上就是個人價值訴求的一種表達

    我劃分了四個較為通用的維度,從這幾個維度出發,聊聊不同階段我的一些看法和建議。

    思維導圖

     

    時間維度

    1、小白入門

    通常來說,小白入門階段,指的是初入職場一年以內的同學。

    在這個階段,個人的核心競爭力,或者說個人價值的體現,就是高效執行能力+快速學習能力

    工作職責、範圍、流程、規範、溝通能力,在這個階段,也許會遇到不同的挑戰,但企業一般對新同學包容性都比較強,這個階段試錯空間較大,最利於新入成長。

    2、快速成長

    快速成長階段,一般指的是工作1-3年的同學。這個階段,個人認為核心競爭力主要體現在協同配合+ownership(主人翁意識,或者說是主動承擔工作的能力)。

    當然,這個階段也會面臨職場第一次跳槽,如何編寫簡歷、面試、談offer、如何選擇就職行業、在團隊內刷存在感等事情。

    表述可能有些直接,但這個階段,對未來的職場發展,影響往往是很大的。建議找個業內熟識的前輩,聊聊天,請教一下

    3、專註沉澱

    這個階段的同學我劃分為3-5年的同學,一般來說這個階段,會成為團隊里的中堅力量,甚至會承擔一部分所謂的“管理”的工作。

    除了上述的幾點核心能力,我認為這個階段的同學,核心競爭力,往往體現在客觀的思考能力+創造價值的能力

    如何理解創造價值?初入職場大多是聽安排做事,這個階段,會漸漸過渡到分配任務並且帶領小團隊快速高效完成工作的狀態。

    至於專註沉澱,這個階段建議對自己的技術棧+未來五年職場規劃進行多次深入的review,這是一個不斷否定不斷堅持的過程。

    4、成為專家

    如何理解專家?即在某一個領域內擁有豐富經驗+專業特長+深入研究的人。一般在職場中,七年左右可以稱之為專家。

    在《刻意練習:如何從新手到大師》這本書中,講述了很多關於成為某一個領域專家的方法,推薦大家閱讀這本書。

    在這個階段,核心競爭力,反而簡單,即上面講到的創造價值

    如何創造價值?解決團隊目前存在的核心問題,從基礎建設、流程規範、技術、分享、管理多方面來保質提效。

    當然,最關鍵的是,主動傳達自己創造的價值!這個很考驗一個人的耐心和協調溝通能力,概括一下就是:深諳職場生存法則

     

    核心能力

    關於核心能力,其實在上面的幾個階段,都做了解讀。這裏我有個建議,你的核心能力,可以在簡歷的個人評價里體現出來

    好的簡歷可以擺平面試求職路上的很多客觀因素,當然,也能吸引到某些獵頭的挖掘。

    當然,不僅僅是簡歷,還有其他的一些客觀條件,這個請看下文。

    1 # 這裏僅提供一個demo供參考
    2 1、對項目整體業務和系統架構有較全面了解,能獨立解決複雜任務; 3 2、能與其他團隊建立良好的合作關係,並組織主導完成工作; 4 3、自我驅動能力強,熱愛分享,善於思考總結; 5 4、保持技術前瞻性,鑽研新技術及方法,並推動在工作中落地;

     

    職場生涯

    關於職場生涯,有很多博主很多大牛說過,這裏我順帶談談我的看法。

    在專註沉澱階段(3-5年),為什麼要建議對自己的技術棧以及未來五年的職場規劃進行多次review呢?

    一方面,這個階段會在技術和業務上有一定的深入和廣度;另一方面,職場或者說未來職業發展需要的是一專多能的在細小領域有較高成就的人

    一般來講,這個階段需要對業務&技術做個權重。業務專家?技術大神?或者基層管理。

    管理是一個蘿蔔一個坑,在互聯網領域,個人覺得對普通人來講,業務專家或技術大神,對普通人更友好。

    不需要做多大範圍的TOP1,你只需要堅持去做下面幾點,就能有所收穫。

     

    個人成長

    關於個人成長,前段時間看了本書:《軟技能:代碼之外的生存指南》。裏面介紹了很多有趣的觀點和方法,大家不妨一讀。

    挑幾個關鍵的point來談談我自己的個人成長曆程,也許會對你有所觸動。

    1、寫作博客

    大概工作第三年開始,我開通了博客,並且堅持每周都更新。有總結,有實踐,有思考,也有很多自己創造的內容。我把寫博客這件事叫做爆肝。。。

    寫了一段時間,你會發現漸漸有了流量,有了評論,有了錯誤指摘,也有抬杠。從這些“收穫”里,你能將自己的底子打得更好,當然,知名度,或許有些罷。。。

    2、開公開課

    有了寫博客的沉澱(不一定寫博客,自己做筆記也可,但我還是建議寫博客,交流更重要,閉門造車要不得),你可以嘗試開公開課,比如:QQ群直播、網易公開課、騰訊課堂等。

    如何將自己知道的東西,簡潔明了的傳遞給別人,在溝通分享中重塑自身的知識體系,是很有意思也很有挑戰的一件事。

    職場向上發展,分享、培訓、演講是少不了的。有備無患,才是智者取勝之道。

    這個過程里,你會發現自己以往的遺漏、錯誤、表述的誤差,也能從別人口中獲悉成長的力量。

    3、著書立說

    這個對很多同學來說可能有點不可思議,但其實沒那麼難。我認識測試圈子的同學比如小坦克,基於抓包進行接口&自動化測試,已經出了2本書了。

    我自己也正在寫自己的第一本書:從零開始性能測試。

    當然,給了我勇氣讓我開始下筆寫書的原因,一方面是想建立個人的品牌影響力;另一方面,通過博客,有好幾位出版社的編輯找到了我,不好意思拒絕他們的熱情相邀,就索性寫一本書吧。

    人這一生,總要做幾件讓自己回想起來就覺得中二熱血的事情。。。

    4、諮詢培訓

    關於諮詢培訓,其實和轉崗斜杠很類似。生存所需嘛,憑自己的本事站着吃飯,不寒磣。

    通過自我成長,寫博客,開公開課,建立個人影響力,嘗試付費諮詢,做培訓,運營公眾號,接商業推廣,甚至極客時間開一門課,都是可以嘗試的。

    很多事情不是看到希望才做,而是做了才能有所收穫。

    當然,這個過程中,你會開始思考如何拓展推廣渠道,引流拉新,提高創作內容的質量,遇到很多未知領域的挑戰。

    別怕,向前走,前面有光!

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

    ※幫你省時又省力,新北清潔一流服務好口碑

    ※別再煩惱如何寫文案,掌握八大原則!

  • “你開廠門 我開方便之門” ——福建省市場監管系統“促產”側記

      中國消費者報報道(記者 張文章)最近是企業復工復產的高峰期,然而復工復產、疫情防控兩手抓,兩手都要硬。復工復產面臨許多困難和擔憂:員工食堂就餐怎麼才安全?商事辦理如何才簡便?企業趕工,設備運作如何跟進?別擔心,福建省市場監管局早幫企業想好了,及時推出6方面16條服務措施,全力支持推動生產企業復產、重點項目復工。並呼籲相關企業大膽開門復產,把失去的時間搶回來,補回來。

      復工怎麼吃飯 築防線

      隨着復工復產高峰期臨近,集體用餐需求顯著增加,為深入做好新冠肺炎疫情防控工作,防範群體性聚餐可能引發的風險,福建省市場監管部門牽頭整合美團、餓了么等網絡訂餐平台和餐飲企業搭建疫情期間集體用餐配送服務平台,在保供應、保質量、強信心方面起到了积極作用。

      福州市台江區對復工企業食堂衛生狀況進行檢查,嚴查食材進貨來源,要求分時段分餐制,避免扎堆就餐。同時嚴格環境消殺,下發《預防性消毒工作手冊》,督促農貿市場、超市、餐飲店、非星級酒店嚴格落實清潔消毒制度,每日開市前、收市后全面消毒,加大對重點區域、重點設施設備消毒頻次。規範網絡外賣平台經營,推行無接觸配送。

      廈門市集美區杏林市場監管所“嚴把三關”,做好“小餐飲”復工安全。復工前,申請報備關。全面摸排掌握轄區“小餐飲”數據庫,通過電話、微信等,向2571家餐飲經營者詳細告知復工標準,督促餐飲單位在恢復營業前,提前向市場監管部門報備。復工時,現場檢查關。收到經營者報備后,執法人員按照網格劃分及時到現場檢查,對從人員健康狀況、體溫檢測、場所消殺、庫存食材清理等各方面進行詳細指導和嚴格把關。復工后,日常監督關。通過網格員每日現場巡查、微信宣傳、發動社區群眾舉報等方式,做好已復工“小餐飲”的日常監督。

      泉州市市場監管部門加強外賣訂餐平台監管,在疫情防控期間全面實行“無接觸送餐”;鼓勵入網餐飲單位使用“食安封簽”,避免送餐過程二次污染;指導公司選擇證照齊全、供餐資質和能力符合要求的單位訂餐,並設立專門接收台,實行“不見面取餐”;鼓勵企業發動交通方便的員工回家用餐,或自帶餐食解決用餐問題,進一步減少辦公場所用餐時段的人員密度和出入頻次。

      莆田市荔城區已形成市場、超市、餐飲、藥店常態化監管模式,持續提示餐飲服務單位轉變經營思路,採取打包、外賣、分餐配送等非堂食堂聚的經營模式,避免人群聚集傳播風險;有效督促市場開辦者及檔口經營者自律經營,嚴格落實禁止野生動物交易要求,建立健全索證索票、進貨查驗等制度,切實做好食品快檢及公示工作,做到“早發現、早溯源、早處置”,有效保障群眾“舌尖上的安全”。

      備案申請怎麼審批 特事特辦

      為全面有效防控疫情,全力保障人民群眾的生命安全和身體健康,切實提供便捷優質的企業註銷及商事登記服務,福建省市場監管部門為企業提供足不出戶的“網上辦“服務。

      福州市高新區市場監管部門開啟企業復工復產網上辦,利用釘釘App在線受理企業復工申請,開展不見面服務。對企業數據進行實時分析,對於符合高新區復工要求的予以備案。全面推行自主年報制度,通過微信、電話、短信等方式指導企業依法履行信息公示義務,激活更多企業投入生產經營,避免信用受損。

      漳州市長泰縣市場監管局為有效減少人員聚集,暫停窗口現場服務,全面推行“網上辦、掌上辦、郵寄辦、預約辦”審批服務模式,並公示了窗口諮詢電話。對於保障疫情防控工作需要的緊急業務,立足職能,特事特辦、急事急辦,着力打通抗‘疫’審批最後一公里。

      莆田市荔城區市場監管部門充分依託“網上辦、掌上辦、寄遞辦、預約辦”等有效手段,為市場主體提供“零見面、零跑腿、零成本”的高效優質服務,進一步壓減登記註冊環節、時間和成本。對生產企業轉產生產口罩、防護服等應急物資的,簡化生產資質審批程序,實行非要件容缺後補,對可通過數據共享獲取的材料,不要求申請人重複提交。

      三明市大田縣市場監管局加碼提速簡化審批程序,推行“非接觸式”的电子辦照渠道,實行企業名稱自由申報、企業設立網上辦,同時积極引導群眾通過“網上預審+雙向快遞”的方式寄送申請材料並領取證照和相關文書。深化個體工商戶登記制度改革,針對需線下辦證的特殊人群實現“15分鐘辦證圈”。

      設備安全怎麼保障 提供專業服務

      為全面保障疫情期間和節后復工復產企業的特種設備安全,進一步落實特種設備使用單位安全主體責任,福建省市場監管部門對特種設備安全進行了專項檢查。

      廈門市集美區市場監管局第一時間採取微信監管工作群轉發的宣傳形式,督促相關責任單位嚴格落實責任制。聚焦公眾聚集場所使用的特種設備和盛裝極度或高度危害介質、易燃易爆介質的承壓特種設備,採取科所聯動的監管模式,圍繞轄區復工復產企業、已開業的大型商場、樓座較多的居民小區、醫院、地鐵等主要場所加大巡查力度,重點查看在用電梯、鍋爐、液氧儲氣罐等特種設備的檢驗報告、維保記錄、使用單位的安全管理制度、事故應急措施和救援預案等情況。

      泉州市市場監管局組織省特檢院泉州分院和石化中心等兩個特種設備檢驗單位,充分利用特種設備安全監察平台,全面排查受疫情影響需要檢驗的特種設備,主動電話逐家聯繫各使用單位,及時了解復產復工安排,為即將復產復工企業開闢綠色通道,確保企業順利開工。

    責任編輯:邊靜

    本站聲明:網站內容來源再生能源資訊網http://www.ccn.com.cn/,如有侵權請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 新春走基層·脫貧攻堅一線見聞:八百里瀚海的扶貧之路

      中國消費者報報道(記者李洪濤)噼!啪!清脆的爆竹聲不時在空中炸響。吉林省通榆縣蘇公坨鄉蘇公坨村六撮房屯,這個極具東北特色的小村莊到處散發著濃濃的年味。新春佳節前夕,《中國消費者報》新春走基層的記者跟隨當地市場監管部門的扶貧幹部,冒着零下23攝氏度嚴寒,踏着皚皚白雪,走進幫扶的貧困戶家中送上節日禮物。

      通榆縣地處吉林省西部,這裏常年乾旱少雨,風沙肆虐,自然環境惡劣,因地域廣闊,素有八百里瀚海之稱。該縣蘇公坨鄉蘇公坨村和巨寶山村,是兩個有着535個貧困戶的貧困村。在該縣脫貧攻堅工作中,通榆縣市場監督管理局勇挑重擔,對這兩個村實行包保脫貧。54歲的局黨委辦公室主任徐方樓任職駐村第一書記,如今已經4年。

      1月14日上午,天寒地凍。在駐村扶貧點簡陋的小平房裡,記者見到了面部黝黑、雙手長滿老繭,一身农民打扮的徐書記。

      據徐書記介紹,經過局裡幾年來的幫扶,蘇公坨村和巨寶山村的貧困戶基本上都實現了脫貧,目前,還有兩個因車禍及因病致貧的貧困戶還在积極幫扶中。當日上午,記者跟通榆縣市場監督管理局副局長趙洪亮一起,來到了這兩個貧戶家中進行了走訪。正值新春佳節,細心的扶貧幹部們為貧困戶們精心準備了大紅的燈籠、春聯,還有水果等年貨。雪野茫茫,鄉路彎彎,儘管岔路很多,但開車的食品檢驗檢測中心主任馬立群卻是十分地路熟。他風趣地說:“從春到冬,我們天天下鄉扶貧,路都記在心裏了。”

      當一行人來到蘇公坨村六撮房屯貧困戶白延軍家中時,64歲的劉金環老人正在給躺在炕上的老伴翻身。見到了徐方樓和馬立群,老人激動得連忙下炕,熱情地打着招呼。接過喜氣洋洋的大紅燈籠和寫着“家好人好運氣好,福旺財旺日子旺”的春聯時,她的眼裡噙着淚水。據徐方樓介紹,現年66歲的白延軍是一位退伍老兵。2018年7月30日早晨,他趕着毛驢車去地里幹活時,在村路上不幸被一輛物流公司的大貨車撞傷,雖然經搶救保住了性命,卻成了沒有任何知覺的植物人。由於在賠償上存在爭議,官司還處在人民法院的二審階段。從院里堆放的銹跡斑斑的各種農機具可以看出,在未出車禍前,劉延軍是個勤勞的人,一家人生活也比較富裕。記者在走訪中獲悉,白延軍一家的不幸遭遇,深深地牽動了市場監管部門幹部職工的心。大家踴躍捐款1.36萬元,春耕生產時還送上種子、化肥等生產資料。更重要的是,扶貧幹部們多次到家中看望,鼓勵一家人勇於面對困境,重拾生活信心。

      在巨寶山村巨寶山屯,45歲的农民張波動情地拉着扶貧幹部們連聲道謝。原來,他的女兒張鈺堔患有先天性成骨不全症,脆弱的雙腿稍不留意就會造成骨折,今年15歲了,已經骨折了十幾次。雖然身患重病,坐着輪椅,但小鈺堔聰明伶俐,樂觀向上,已經上了初中二年級的她學習成績優異。為了幫扶張波一家,扶貧幹部們協調有關部門,不僅對他家原有土平房進行了泥草房改造,還在村裡給他安排了一個協警的公益崗位,每年有1萬多元的收入。記者在張波家的牆上,看到貼着《扶貧攻堅幫扶提示板》,上面不僅有《扶貧手冊》,還有包保幹部的姓名和聯繫電話。

      在基層走訪,雖然天氣寒冷,但陽光明媚,空氣清新。歡聲笑語中,記者感受到了扶貧幹部和貧困戶之間濃濃的情意。在蘇公坨村黨支部委員會,一位中年婦女與扶貧幹部杜克峰熱情地打招呼,雙方十分熟識地拉着家常。該中年婦女名叫王艷,是楊樹林村的一名社主任。她告訴記者,她和這些城裡來的扶貧幹部親如兄妹。

      通榆縣是國家級貧困縣,脫貧攻堅任務艱巨。談到扶貧工作時,通榆縣市場監督管理局局長徐立忠說:“我們在扶貧攻堅方面做了很多細緻的工作。”據其介紹,該局對所包保的蘇公坨村和巨寶山村採取多項舉措。去年,倡議、組織愛心企業,為包保村捐款40.4萬元。(蘇公坨村28.5萬元,巨寶山村11.9萬元)。聯手白城市老年科協到蘇公坨村開展義診活動,向貧困群眾免費進行體檢,免費贈送價值1.75萬元的藥品。組織通榆縣益壽堂醫藥有限公司到蘇公坨村開展送醫送葯義診活動,免費提供價值3萬元的藥品。協調通榆縣農業銀行到蘇公坨村送電腦、打印機、紙張等14類辦公用品,價值1.2萬元。

      為了促進貧困人口增收,發展農村庭院經濟,該局給村民們購買了1.4萬元豆角籽。在改善人居環境上,購買2.6萬元的櫥櫃革、鐵絲、1萬根樹軸、7000株花苗。雇傭鏟車、鈎機、叉車、四輪車,對包保的兩村進行了環境衛生整治,美化了生活環境。在危房改造上,為貧困戶購買了1300米的電纜線,飲用水井房電錶一塊。中秋節,為蘇公坨村358戶、巨寶山村177戶貧困戶每戶送2公斤月餅。春節前夕,為兩村535戶貧困戶每戶送去5公斤蘋果、1桶食用油。此外,包保幹部們還自掏腰包,為貧困戶購買電視機、電視天線、玉米種子、輪椅、秧苗、藥品、米面油、食品、兒童玩具、雞雛、電飯鍋、櫥櫃等,积極開展結親、認親和幫親活動。在蘇公坨鄉敬老院,舉辦了以“敬老愛老”為主題的支部黨日活動,為老人們送水果、衣物、涼席等物品,併為老人理了發,打掃了敬老院院內外衛生,把溫暖送到孤寡老人心上,讓老人們感受到了黨的溫暖和關懷。

    責任編輯:邊靜

    本站聲明:網站內容來源再生能源資訊網http://www.ccn.com.cn/,如有侵權請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

    ※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

    ※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

    新北清潔公司,居家、辦公、裝潢細清專業服務

  • 老當益壯顯身手——記安徽省黃山市市場監管局綜合行政執法支隊恭弘=叶 恭弘建德

      “12315嗎?我要投訴,屯溪區益康堂大藥房賣的飄安口罩生產日期有問題。”1月24日大年三十晚上,安徽省黃山市市場監管局接到了一個投訴。

      領到任務的是該局綜合行政執法支隊主要負責人恭弘=叶 恭弘建德。今年58歲的恭弘=叶 恭弘建德是一名經驗豐富的市場監管老兵,深知執法辦案行動迅速的重要性。1月25日8:00,他和辦案人員便出現在藥房門口。

      9:00,藥房一開門,辦案人員便現場檢查,查獲標註生產日期為2020年2月2日、2月6日的“飄安”口罩各5包。

      恭弘=叶 恭弘建德說,稍遲一步,這10包“早產”口罩就可能被買走。“沒有實物,就無法繼續辦案。”他說。

      1月27日,在接到飄安集團出具的“這批口罩是假冒產品”的鑒別意見后,他又果斷決定啟動行刑銜接機制,及時調整辦案思路,移交公安機關先行偵辦。

      在查處另一起假“民樂”口罩案時,恭弘=叶 恭弘建德與執法人員第一時間趕到被舉報的藥房,卻沒查到實物。他們當機立斷,火速趕到批發這批口罩的黃山博宏醫藥銷售公司,查獲一個空外包裝紙箱和某醫院退回的10包口罩。“稍微一猶豫,可能就會空手而回。” 恭弘=叶 恭弘建德說。

      同事們都說,敢於克難是恭弘=叶 恭弘建德辦案的一大特點。查辦假“民樂”口罩案時,消費者質疑口罩質量有問題,但銷售方出具了一家正規醫藥銷售公司的銷售單據、質檢報告。恭弘=叶 恭弘建德和辦案人員並未被表面證據迷惑,立即聯繫生產廠家新鄉華康衛材有限公司。

      “肯定是假冒產品。”廠家負責人通過對比上傳的產品及合格證圖片后,出具了鑒別意見,成為案件定性的重要證據。

      “我們這裏藥房賣的飄安口罩可能也是假的。”益康堂大藥房銷售假“飄安”口罩被查處后,市場監管局也接到了其他消費者舉報。

      群眾的呼聲就是行動的號角。恭弘=叶 恭弘建德與辦案人員齊心協力,有訴必查、有查必果。之後,他們又查處了5起藥房銷售假“飄安”口罩案。

      由於率先查處了假“飄安”口罩案和案值18.9萬元的假“民樂”口罩案,不少媒體紛紛報道,恭弘=叶 恭弘建德成了“名人”。北京密雲、貴州六盤水、山東德州及本省其他地區市場監管部門紛紛向他請教,每次他都毫無保留,及時與同行分享辦案經驗。

      由於假“飄安”、假“民樂”口罩數量達20多萬隻,恭弘=叶 恭弘建德和辦案人員及時約談藥房經營者,要求其無條件全額退款。經過多日努力,購買假“飄安”口罩消費者的全部退款訴求均已解決。(鞠萱

    責任編輯:邊靜

    本站聲明:網站內容來源再生能源資訊網http://www.ccn.com.cn/,如有侵權請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    ※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

    ※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※幫你省時又省力,新北清潔一流服務好口碑

  • 湖北宜昌:對無接觸配送商品開展“千單抽查”

      中國消費者報武漢訊田力 記者吳采平)疫情當前,“線上下單+無接觸配送”的方式為消費者解決了“採購難”,“線上買的食材質量會不會不好”等問題。近日,湖北省宜昌市市場監管局對無接觸配送商品進行了“千單抽查”,不打招呼、不發通知、直奔現場。

      近日,湖北省宜昌市伍家崗區市場監管局執法人員譚玄仙來到北山超市九安城店,對待送區的100餘單已打包商品進行了隨機抽查。結果显示,每筆訂單配有“消費明白卡”,且打包袋內的每種商品計量準確、質量合格、價格在合理範圍。

      根據宜昌市新冠肺炎疫情防控指揮部安排,宜昌市市場監管局於日前啟動無接觸配送商品“千單抽查”行動,要求執法人員於次日內對宜昌市參与保障供應的農貿市場、超市和藥店的配送商品進行監督抽查。各地市場監管部門迅速成立檢查組,採取不打招呼、不發通知、直奔現場的方式,開展隨機抽查,重點查看各經營單位是否存在亂漲價、短斤少兩、假冒偽劣和強買強賣等違法行為。

      檢查內容包括有無亂漲價情況。查看檢查當日商品銷售價與進貨價之間的差率是否超過1月19日售價差率標準;有無短斤少兩情況。執法人員攜帶稱重衡器,進行凈含量現場檢測;有無假冒偽劣情況。執法人員通過檢查商品的感官質量、標籤標識,查看是否“山寨”食品或“三無”食品,是否臨近或超過保質期;有無強買強賣情況。是否存在套餐搭配不合理,或者強行配售其他無關商品。

      抽查結果显示,截至當日下午4時,宜昌市市場監管系統共監督抽查無接觸配送商品1114單,其中食品類993單、藥品類121單。發現亂漲價行為3起,未發現短斤少兩、假冒偽劣和強買強賣等違法行為。目前,執法人員已責令相關經營單位立即整改,並將對其整改情況進行回頭看。

      宜昌市市場監管局提醒廣大消費者,若有發現違法行為,應撥打“12315”熱線舉報投訴。圖為執法人員對配送商品進行復秤抽查

    責任編輯:邊靜

    本站聲明:網站內容來源再生能源資訊網http://www.ccn.com.cn/,如有侵權請聯繫我們,我們將及時處理

    【其他文章推薦】

    台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

    ※教你寫出一流的銷售文案?

  • 江蘇省消保委多措並舉 助力消費者提升免“疫”力

      中國消費者報報道史曄 記者薛慶元)眾志成城,共克時艱。一場來勢洶洶的新冠肺炎疫情牽動着每個消費者的心。面對嚴峻的疫情,江蘇省消費者權益保護委員會堅守“疫”線,及時開展消費宣傳引導,努力化解消費糾紛,督促經營者履行責任,儘力護衛消費者權益,用心守護消費環境穩定和民生消費安全。

      受理消費投訴5548件

      疫情期間,口罩一夜之間成了“搶手貨”。據了解,1月24日至2月9日,江蘇全省消保委系統共計受理消費維權投訴5548件,投訴類型分析,商品類投訴3468件,服務類2080件,分別佔比62.51%、37.49%。受疫情影響,線上機票、酒店、旅遊行程退訂,線下口罩、消毒防護用品購買,餐飲退訂等成為消費熱點,網購產品發貨、售後也成關注點。其中,口罩、消毒液、手套等衛生防護用品需求和投訴激增,口罩類投訴1965件,佔總投訴量35.42%,主要問題為發貨延遲、價格上漲、假冒偽劣等方面。

      2月5日,泰興市消費者錢先生通過微信購買口罩50隻,后發現所購口罩無廠名、廠址、合格證,遂向當地消費者組織進行投訴維權。泰興市消費者協會接訴后,詳細向售賣人了解口罩進貨渠道及相關程序手續,售賣人均無法回答,為防止春節期間劣質口罩流入市場,工作人員現場調解售賣人為消費者辦理退款並進行賠償,同時將售賣人基本信息和售賣情況向執法部門書面發出“行政處罰建議函”。

      發出倡議共抗疫情

      面對疫情蔓延的嚴峻形勢和投訴激增的趨勢,江蘇省消保委堅決做到“有訴必接、速查速回”,全力維護消費者權益。針對涉嫌違法的藥店、生產銷售各類劣質口罩、哄抬物價等行為,江蘇省各市消保委組織紛紛發出相關倡議,呼籲經營者尊重市場規律前提下,自覺履行法定義務,助力消費者提升“免疫力”,最大限度保障消費者權益。

      非常時期,人民齊心抗疫。南京市消協系統自除夕起安排了專人值班,全市消協系統(含分會)共有276人在崗工作,全市消協系統受理投訴主要集中在防疫用品的質量和價格、物流問題、旅遊產品等方面;連雲港市消保委成立“疫情期間消費投訴工作應急小組”,執行涉疫投訴“日報告”制度,要求各縣區及時上報涉疫消費投訴動態及處理結果,建立旅遊、商超企業等微信工作群,指導企業依法依規积極快速處理好涉疫投訴,與有關部門密切配合,對農貿市場、藥店和商超進行排查,嚴控商品價格,嚴處哄抬物價…….

      阻擊、保障兩手抓

      奮力戰“疫”,江蘇省各級消保委組織保障民生實招頻出。南通市各級消協工作人員積极參与市場監管部門對轄區內農貿市場、活禽銷售點、大小型餐飲、藥店開的防疫檢查,避免群體聚集,堅決防止疫情蔓延;鎮江丹陽市通過發放《價格政策提醒函》、《禁止野生動物交易告知書》、《餐飲行業防控措施告知書》等,加強法規宣傳和政策引導,督促經營者自律; 無錫市消保委全體人員參与農貿市場巡查督導工作……

      今年年初,楊女士從境外旅遊回南京,回程前2天偶然得知其乘坐聯程航班兩段均被取消,其本人在航司官網、預定頁面均未發現訂單更改信息,也未收到任何通知及後續措施,撥打客服電話显示無法接通狀態,聯繫無果下投訴至消保委。當地消保委接訴后與航空公司聯繫,及時安排工作人員與消費者聯繫,為消費者更改航班,保障了消費者順利返程。

      此外,江蘇省消保委牢牢守住百姓“菜籃子”,揭穿各種謠言,真切做到抓好民生保障,又嚴格做好疫情防控,保障市場秩序穩定有序,築起疫情防控銅牆鐵壁。

      生命重於泰山。江蘇省消保委深刻認識做好疫情防控的重要性和緊迫性,圍繞群眾消費熱點,咬定戰“疫”不鬆勁,多措並舉解民憂、排民難,以對人民高度負責的態度,把疫情防控工作作為當前最重要的工作來抓,全力以赴打好打贏疫情防控這場阻擊戰。

    責任編輯:邊靜

    本站聲明:網站內容來源再生能源資訊網http://www.ccn.com.cn/,如有侵權請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

    ※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

    ※Google地圖已可更新顯示潭子電動車充電站設置地點!!

    ※帶您來看台北網站建置台北網頁設計,各種案例分享

    ※別再煩惱如何寫文案,掌握八大原則!

  • 遼寧瀋陽法院公開宣判兩起涉疫情犯罪案件

      中國消費者報瀋陽訊(記者 王文郁)2月28日,遼寧省瀋陽經濟技術開發區人民法院、瀋陽市瀋河區人民法院公開宣判2起涉疫情犯罪案件,所涉罪名分別為銷售偽劣產品罪和詐騙罪,涉案3名被告人分別被判處有期徒刑10個月至有期徒刑6年6個月不等刑期。

      瀋陽經濟技術開發區人民法院對被告人王某瑩、楊某雨銷售偽劣產品案,通過雲上法庭開庭審理。法院經審理查明,1月30日至2月2日間,王某瑩、楊某雨二人趁國內暴發大規模新冠肺炎民眾急需佩戴口罩之際,利用微信朋友圈和微信群進行口罩銷售的宣傳。在買方確定購買后,二人從其上家張某(另案處理)處以每個12至13元不等的價格大量購進劣質仿冒3M口罩,后以每個16元至25元不等的價格進行對外銷售,銷售金額共計90110元。經3M口罩生產商明尼蘇達礦業製造(中國)投資有限公司鑒定,涉案口罩與正品不符。經遼寧省勞動防護用品產品質量監督檢驗中心檢驗,涉案3M自吸過濾式防顆粒物呼吸器過濾效率不符合標準要求。法院認為,王某瑩、楊某雨銷售偽劣產品,銷售金額5萬元以上,被告人王某瑩、楊某雨構成銷售偽劣產品罪,王某瑩被判處有期徒刑11個月,並處罰金6萬元,楊某雨被判處有期徒刑10個月,並處罰金5萬元。

      瀋陽市瀋河區人民法院對被告人張某涵詐騙案,依法適用刑事簡易程序,利用遼寧法院互聯網庭審雲平台開庭審理。法院經審理查明,2月,在新冠肺炎疫情防控期間,張某涵在微信朋友圈發布出售防護用口罩的信息。被害人姜某某、文某獲知后,先後與張某涵聯繫購買口罩。張某涵在明知無法提供口罩的情況下,於2月4日至2月6日間,分多次收取二人購買口罩款37萬元(其中姜某某3.2萬元,文某33.8萬元)。張某涵取得錢款后即揮霍一空。2月7日4時許,張某涵在無法隱瞞犯罪事實的情況下向公安機關投案,對上述事實供認不諱。法院認為,張某涵以非法佔有為目的,採用虛構事實、隱瞞真相的方法騙取他人財物,數額巨大。被告人張某涵構成詐騙罪,被判處有期徒刑6年6個月,罰金20萬元。

      在全國上下萬眾一心抗擊新冠肺炎疫情之際,總有人在特殊時期以身試法,利用疫情違法犯罪不僅會對疫情防控工作造成惡劣影響,更會嚴重危及人民群眾的身體健康和生命安全。上述案件的審理充分體現了人民法院為堅決打贏疫情防控阻擊戰提供有力司法保障的決心,同時,瀋陽法院利用遠程視頻提訊系統開庭審理刑事案件,有效避免審判過程中人員聚集,保障了訴訟參与人和司法工作人員在疫情防控期間的人身健康安全。

    責任編輯:邊靜

    本站聲明:網站內容來源再生能源資訊網http://www.ccn.com.cn/,如有侵權請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

    ※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

    南投搬家前需注意的眉眉角角,別等搬了再說!

    新北清潔公司,居家、辦公、裝潢細清專業服務