[英]how to use web.xml file into spring boot application without extend WsConfigurerAdapter?
[英]How to use an existing web.xml in my new grails 3 app?
根據此處的文檔說:
如果您有一個經過修改的web.xml模板,那么您將需要將其遷移到Spring,因為Grails 3.x不使用web.xml(盡管仍然可以在src / main / webapp / WEB-INF / web.xml)。
我的意思是,如果我合並了一個具有web.xml
第三方專有庫,那么我可以將其原封不動地放在src/main/webapp/WEB-INF
(連同他們放置在tomcat中的所有其他內容) webapp目錄)和grails將其加載。 這種解釋正確嗎? 這似乎暗示了這個答案。
我用react
配置文件(我也嘗試過web
配置文件)和一個調用其servlet的網頁啟動了grails 3應用程序。 但是,雖然可以在webapp
中找到一個html文件,但是servlet調用本身返回404
,我不知道為什么。 如果我構建一個war文件並部署在獨立的tomcat上,則servlet調用可以工作,但是當我這樣運行時:
./gradlew server:bootRun --debug
然后沒有,而且我看不到控制台上印有任何有趣的內容。
是否有一些我需要處理的URL映射或application.yml
某些內容?
在web.xml中,被調用的servlet如下所示(這只是其中的一小部分):
<servlet>
<servlet-name>DataSourceLoader</servlet-name>
<servlet-class>com.isomorphic.servlet.DataSourceLoader</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DataSourceLoader</servlet-name>
<url-pattern>/isomorphic/DataSourceLoader</url-pattern>
</servlet-mapping>
我意識到替代方法是使用Beans重寫web.xml
並將內容放入resources.groovy
,但是我更喜歡一種方法,它需要盡可能少的代碼。
[更新]
我已經能夠用以下命令更新我的grails-app/conf/spring/resources.groovy
:
import org.springframework.boot.web.servlet.ServletRegistrationBean
// Place your Spring DSL code here
beans = {
DataSourceLoader(ServletRegistrationBean) { bean ->
servlet = new com.isomorphic.servlet.DataSourceLoader()
urlMappings = ['/isomorphic/DataSourceLoader']
}
}
並且似乎正在運行...不過,我仍然對僅使用web.xml
方法感興趣,這是我的原始問題。
從Grails 2.x升級到Grails 3.3的一部分,我以前使用過web.xml來定義第三方servlet。
為了使這些servlet可用(並在啟動時加載),我采取的方法是通過一個自定義類。 因此,您可以像這樣在src / java中定義一個自定義類:
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ServletRegistrations {
@Bean
public ServletRegistrationBean fileServlet(){
ServletRegistrationBean registration = new ServletRegistrationBean(new FileServlet(), "/files/*");
// to load add startup uncomment the line below
//registration.setLoadOnStartup(1);
// define init param
registration.addInitParameter("basePath","/WEB-INF/resources");
return registration;
}
}
因此,盡管您沒有在一個XML文件中定義所有內容,但仍然可以在一個類中定義所有servlet,因此這並不是什么大的改變,我現在已經經歷了一次,我希望能夠代碼而不是xml中的定義。 希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.