第一種web
web.xml (截取的須要轉換的)spring
當攔截到 /socke t時執行該servletspringboot
<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配置爲 紅色部分 websocket
@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 如上段代碼中註釋的同樣app
@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); } }
第二種socket
首先解釋一下:ide
load-on-startup標記容器是否在啓動的時候實例化並調用其init()方法的優先級。函數
它的值表示 servlet應該被載入的順序。ui
當值爲0或者大於0時,表示容器在應用啓動時就加載並初始化這個servlet。url
.若是值小於0或未指定時,則表示只有在第一次請求的容器纔在該servlet調用初始化函數。
正值越小,servlet的優先級越高,應用啓動時就越先加載。
值相同時,容器就會本身選擇順序來加載。
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()); } }