在springBoot中配置web.xml中配置的servlet


第一種

 web.xml (截取的需要轉換的)

當攔截到 /socke t時執行該servlet

    <servlet>
        <servlet-name>websocket</servlet-name>
        <servlet-class>org.ldd.ssm.hangyu.socket.MyWebSocketServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>websocket</servlet-name>
        <url-pattern>/socket</url-pattern>
    </servlet-mapping>

轉為springboot配置為 紅色部分  

@SpringBootApplication
@MapperScan("org.ldd.ssm.hangyu.mapper")
//@ServletComponentScan
public class MyspringbootApplication extends SpringBootServletInitializer{ public static ApplicationContext cs; @Bean public ServletRegistrationBean servletRegistrationBean() { return new ServletRegistrationBean(new MyWebSocketServlet(), "/socket"); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(MyspringbootApplication.class); } public static void main(String[] args) { cs=SpringApplication.run(MyspringbootApplication.class, args); } }

或者在該servlet上加上紅色的注解  但同時也要在 啟動類上 加上注解 @ServletComponentScan 如上段代碼中注釋的一樣

@SuppressWarnings("deprecation")
@WebServlet(name="myWebSocketServlet",urlPatterns="/socket") 
public class MyWebSocketServlet extends WebSocketServlet {
  private static final long serialVersionUID = -6488889268352650321L;
protected StreamInbound createWebSocketInbound(String name,HttpServletRequest request) { String parameter = request.getParameter("name"); return new MyMessageInbound(parameter); } }

 

第二種

首先解釋一下:

  1. load-on-startup標記容器是否在啟動的時候實例化並調用其init()方法的優先級

  2. 它的值表示  servlet應該被載入的順序。

  3. 當值為0或者大於0時,表示容器在應用啟動時就加載並初始化這個servlet。

  4. .如果值小於0或未指定時,則表示只有在第一次請求的容器才在該servlet調用初始化函數。

  5. 正值越小,servlet的優先級越高,應用啟動時就越先加載。

  6. 值相同時,容器就會自己選擇順序來加載。

web.xml(截取) 

    <servlet>
        <servlet-name>initServlet</servlet-name>
        <servlet-class>org.ldd.ssm.hangyu.socket.InitServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

第一種servlet 都有指定的路徑然而這個啟動時加載的不同 當時看了好久的方法都沒找到。

找了好久終於找到一篇文章:https://blog.csdn.net/billluffy/article/details/72825753

我整理在下面:

在Spring boot項目的實際開發中,我們有時需要項目服務啟動時加載一些數據或預先完成某些動作。為了解決這樣的問題,Spring boot 為我們提供了一個方法:通過實現接口 CommandLineRunner 來實現這樣的需求。

import org.springframework.boot.CommandLineRunner;  
import org.springframework.core.annotation.Order;  
import org.springframework.stereotype.Component;  
  
@Component  
@Order(value=1)//代表啟動時加載的順序
public class MyStartupRunner implements CommandLineRunner  
{  
   InitServlet initServlet=new InitServlet();
@Override
public void run(String... args) throws Exception{ initServlet.init(initServlet.getServletConfig()); } }

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM