第一種
?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; @Beanpublic ServletRegistrationBean servletRegistrationBean() {return new ServletRegistrationBean(new MyWebSocketServlet(), "/socket");}@Overrideprotected 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);} }
?
第二種
首先解釋一下:
-
load-on-startup標記容器是否在啟動的時候實例化并調用其init()方法的優先級。
-
它的值表示 ?servlet應該被載入的順序。
-
當值為0或者大于0時,表示容器在應用啟動時就加載并初始化這個servlet。
-
.如果值小于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());} }
?
?
?